summaryrefslogtreecommitdiff
path: root/ext/zlib
diff options
context:
space:
mode:
authorDaniel Lowrey <rdlowrey@php.net>2015-04-21 23:02:34 -0600
committerDaniel Lowrey <rdlowrey@php.net>2015-04-23 23:49:41 -0600
commit4d5324088c3e020cf7abc44e27d857c042166b90 (patch)
tree786f9a23032b640fde3d1b5841d27c75e36a0702 /ext/zlib
parentdaecc326188d7d3ced05e42f0c07ded4e9b130aa (diff)
downloadphp-git-4d5324088c3e020cf7abc44e27d857c042166b90.tar.gz
Add deflate_*() test cases
Diffstat (limited to 'ext/zlib')
-rw-r--r--ext/zlib/tests/deflate_add_basic.phpt66
-rw-r--r--ext/zlib/tests/deflate_add_error.phpt24
-rw-r--r--ext/zlib/tests/deflate_init_error.phpt32
-rw-r--r--ext/zlib/tests/deflate_init_reuse.phpt28
4 files changed, 150 insertions, 0 deletions
diff --git a/ext/zlib/tests/deflate_add_basic.phpt b/ext/zlib/tests/deflate_add_basic.phpt
new file mode 100644
index 0000000000..9f48bb0448
--- /dev/null
+++ b/ext/zlib/tests/deflate_add_basic.phpt
@@ -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
index 0000000000..159f1648c9
--- /dev/null
+++ b/ext/zlib/tests/deflate_add_error.phpt
@@ -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
index 0000000000..424272c124
--- /dev/null
+++ b/ext/zlib/tests/deflate_init_error.phpt
@@ -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
index 0000000000..b351f496f7
--- /dev/null
+++ b/ext/zlib/tests/deflate_init_reuse.phpt
@@ -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===