]> granicus.if.org Git - php/commitdiff
Add deflate_*() test cases
authorDaniel Lowrey <rdlowrey@php.net>
Wed, 22 Apr 2015 05:02:34 +0000 (23:02 -0600)
committerDaniel Lowrey <rdlowrey@php.net>
Fri, 24 Apr 2015 05:49:41 +0000 (23:49 -0600)
ext/zlib/tests/deflate_add_basic.phpt [new file with mode: 0644]
ext/zlib/tests/deflate_add_error.phpt [new file with mode: 0644]
ext/zlib/tests/deflate_init_error.phpt [new file with mode: 0644]
ext/zlib/tests/deflate_init_reuse.phpt [new file with mode: 0644]

diff --git a/ext/zlib/tests/deflate_add_basic.phpt b/ext/zlib/tests/deflate_add_basic.phpt
new file mode 100644 (file)
index 0000000..9f48bb0
--- /dev/null
@@ -0,0 +1,66 @@
+--TEST--
+Test incremental deflate_add() functionality
+--SKIPIF--
+<?php 
+if (!extension_loaded("zlib")) {
+    print "skip - ZLIB extension not loaded"; 
+}
+?>
+--FILE--
+<?php
+
+function deflateStream($mode, $flushSize, $flushType) {
+    $buffer = "";
+    $deflated = null;
+    $resource = deflate_init($mode);
+
+    while (true) {
+        $dataToCompress = yield $deflated;
+        if (isset($dataToCompress)) {
+            $buffer .= $dataToCompress;
+            if (strlen($buffer) >= $flushSize) {
+                $deflated = deflate_add($resource, $buffer, $flushType);
+                $buffer = "";
+            } else {
+                $deflated = null;
+            }
+        } else {
+            $deflated = deflate_add($resource, $buffer, ZLIB_FINISH);
+        }
+    }
+}
+
+$modes = [
+    'ZLIB_ENCODING_RAW'     => ZLIB_ENCODING_RAW,
+    'ZLIB_ENCODING_GZIP'    => ZLIB_ENCODING_GZIP,
+    'ZLIB_ENCODING_DEFLATE' => ZLIB_ENCODING_DEFLATE,
+];
+$flushSizes = [1, 4, 32768];
+$flushTypes = [
+    'ZLIB_SYNC_FLUSH' => ZLIB_SYNC_FLUSH,
+    'ZLIB_PARTIAL_FLUSH' => ZLIB_PARTIAL_FLUSH,
+    'ZLIB_FULL_FLUSH' => ZLIB_FULL_FLUSH,
+    'ZLIB_NO_FLUSH' => ZLIB_NO_FLUSH,
+    'ZLIB_BLOCK' => ZLIB_BLOCK,
+];
+
+foreach ($modes as $modeKey => $mode) {
+    foreach ($flushSizes as $flushSize) {
+        foreach ($flushTypes as $flushTypeKey => $flushType) {
+            $uncompressed = $compressed = "";
+            $stream = deflateStream($mode, $flushSize, $flushType);
+            foreach (range("a", "z") as $c) {
+                $uncompressed .= $c;
+                $compressed .= $stream->send($c);
+            }
+            $compressed .= $stream->send(null);
+            if ($uncompressed !== zlib_decode($compressed)) {
+                echo "Error: {$modeKey} | {$flushSize} | {$flushTypeKey}\n";
+            }
+        }
+    }
+}
+?>
+===DONE===
+--EXPECTF--
+===DONE===
diff --git a/ext/zlib/tests/deflate_add_error.phpt b/ext/zlib/tests/deflate_add_error.phpt
new file mode 100644 (file)
index 0000000..159f164
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+Test incremental deflate_add() error functionality
+--SKIPIF--
+<?php 
+if (!extension_loaded("zlib")) {
+    print "skip - ZLIB extension not loaded"; 
+}
+?>
+--FILE--
+<?php
+$badResource = fopen("php://memory", "r+");
+var_dump(deflate_add($badResource, "test"));
+
+$resource = deflate_init(ZLIB_ENCODING_DEFLATE);
+$badFlushType = 6789;
+var_dump(deflate_add($resource, "test", $badFlushType));
+?>
+--EXPECTF--
+
+Warning: deflate_add(): Invalid deflate resource in %s on line %d
+bool(false)
+
+Warning: deflate_add(): flush mode must be ZLIB_NO_FLUSH, ZLIB_PARTIAL_FLUSH, ZLIB_SYNC_FLUSH, ZLIB_FULL_FLUSH, ZLIB_BLOCK or ZLIB_FINISH in %s on line %d
+bool(false)
diff --git a/ext/zlib/tests/deflate_init_error.phpt b/ext/zlib/tests/deflate_init_error.phpt
new file mode 100644 (file)
index 0000000..424272c
--- /dev/null
@@ -0,0 +1,32 @@
+--TEST--
+Test deflate_init() error
+--SKIPIF--
+<?php 
+if (!extension_loaded("zlib")) {
+    print "skip - ZLIB extension not loaded"; 
+}
+?>
+--FILE--
+<?php
+var_dump(deflate_init(42));
+var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['level' => 42]));
+var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['level' => -2]));
+var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['memory' => 0]));
+var_dump(deflate_init(ZLIB_ENCODING_DEFLATE, ['memory' => 10]));
+?>
+--EXPECTF--
+
+Warning: deflate_init(): encoding mode must be ZLIB_ENCODING_RAW, ZLIB_ENCODING_GZIP or ZLIB_ENCODING_DEFLATE in %s on line %d
+bool(false)
+
+Warning: deflate_init(): compression level (42) must be within -1..9 in %s on line %d
+bool(false)
+
+Warning: deflate_init(): compression level (-2) must be within -1..9 in %s on line %d
+bool(false)
+
+Warning: deflate_init(): compression memory level (0) must be within 1..9 in %s on line %d
+bool(false)
+
+Warning: deflate_init(): compression memory level (10) must be within 1..9 in %s on line %d
+bool(false)
diff --git a/ext/zlib/tests/deflate_init_reuse.phpt b/ext/zlib/tests/deflate_init_reuse.phpt
new file mode 100644 (file)
index 0000000..b351f49
--- /dev/null
@@ -0,0 +1,28 @@
+--TEST--
+Test incremental deflate_init() context reuse
+--SKIPIF--
+<?php 
+if (!extension_loaded("zlib")) {
+    print "skip - ZLIB extension not loaded"; 
+}
+?>
+--FILE--
+<?php
+$resource = deflate_init(ZLIB_ENCODING_DEFLATE);
+foreach (range("a", "z") as $char) {
+    deflate_add($resource, $char);
+}
+deflate_add($resource, "", ZLIB_FINISH);
+
+// Now reuse the existing resource after finishing the previous operations ...
+$uncompressed = $compressed = "";
+foreach (range("a", "z") as $char) {
+    $uncompressed .= $char;
+    $compressed .= deflate_add($resource, $char, ZLIB_NO_FLUSH);
+}
+$compressed .= deflate_add($resource, "", ZLIB_FINISH);
+assert($uncompressed === zlib_decode($compressed));
+?>
+===DONE===
+--EXPECTF--
+===DONE===