aboutsummaryrefslogtreecommitdiff
path: root/tests/LargeFileTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/LargeFileTest.php')
-rw-r--r--tests/LargeFileTest.php35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/LargeFileTest.php b/tests/LargeFileTest.php
new file mode 100644
index 0000000..c271b47
--- /dev/null
+++ b/tests/LargeFileTest.php
@@ -0,0 +1,35 @@
+<?php
+declare(strict_types = 1);
+
+namespace Pablotron\ZipStream\Tests;
+
+use \PHPUnit\Framework\TestCase;
+use \Pablotron\ZipStream\ZipStream;
+
+final class LargeFileTest extends BaseTestCase {
+ public function testCreateLargeFile() : void {
+ # build 4M string
+ $chunk_size = (1 << 22);
+ $num_chunks = 1025;
+
+ # calculate expected size
+ $expected_size = $chunk_size * $num_chunks;
+
+ $this->with_temp_zip(function(ZipStream &$zip) use ($chunk_size, $num_chunks) {
+ $zip->add('hello.txt', function($e) use ($chunk_size, $num_chunks) {
+ # build chunk
+ $data = str_repeat('x', $chunk_size);
+
+ # repeatedly write chunk
+ foreach (range(0, $num_chunks - 1) as $i) {
+ $e->write($data);
+ }
+ });
+ }, function($zip_path) use ($expected_size) {
+ $zip = $this->open_archive($zip_path);
+ $st = $zip->statName('hello.txt');
+
+ $this->assertEquals($expected_size, $st['size']);
+ });
+ }
+};