summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander O'Mara <me@alexomara.com>2017-05-17 20:43:06 -0400
committerAnna Henningsen <anna@addaleax.net>2017-06-01 00:21:32 +0200
commitd0b1b52edba8a4815086a1fa5e978ceaa91f6d3a (patch)
tree9fa99da703a05c54c343690fd041a22b4e47a175
parent36867786d095de89a37ced4378d07c8efe30cdfa (diff)
downloadandroid-node-v8-d0b1b52edba8a4815086a1fa5e978ceaa91f6d3a.tar.gz
android-node-v8-d0b1b52edba8a4815086a1fa5e978ceaa91f6d3a.tar.bz2
android-node-v8-d0b1b52edba8a4815086a1fa5e978ceaa91f6d3a.zip
zlib: option for engine in convenience methods
Added option to expose engine to convenience methods Refs: https://github.com/nodejs/node/issues/8874 PR-URL: https://github.com/nodejs/node/pull/13089 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
-rw-r--r--doc/api/zlib.md1
-rw-r--r--lib/zlib.js11
-rw-r--r--test/parallel/test-zlib-convenience-methods.js44
3 files changed, 50 insertions, 6 deletions
diff --git a/doc/api/zlib.md b/doc/api/zlib.md
index b7b9170b78..e97ba9cc83 100644
--- a/doc/api/zlib.md
+++ b/doc/api/zlib.md
@@ -301,6 +301,7 @@ ignored by the decompression classes.
* `strategy` {integer} (compression only)
* `dictionary` {Buffer|TypedArray|DataView} (deflate/inflate only, empty dictionary by
default)
+* `info` {boolean} (If `true`, returns an object with `buffer` and `engine`)
See the description of `deflateInit2` and `inflateInit2` at
<http://zlib.net/manual.html#Advanced> for more information on these.
diff --git a/lib/zlib.js b/lib/zlib.js
index c1cc0a2c54..9fc49b0340 100644
--- a/lib/zlib.js
+++ b/lib/zlib.js
@@ -77,6 +77,13 @@ function isInvalidStrategy(strategy) {
// constants.Z_DEFAULT_STRATEGY (0)
}
+function responseData(engine, buffer) {
+ if (engine._opts.info) {
+ return { buffer, engine };
+ }
+ return buffer;
+}
+
function zlibBuffer(engine, buffer, callback) {
// Streams do not support non-Buffer ArrayBufferViews yet. Convert it to a
// Buffer without copying.
@@ -121,7 +128,7 @@ function zlibBuffer(engine, buffer, callback) {
buffers = [];
engine.close();
- callback(err, buf);
+ callback(err, responseData(engine, buf));
}
}
@@ -134,7 +141,7 @@ function zlibBufferSync(engine, buffer) {
var flushFlag = engine._finishFlushFlag;
- return engine._processChunk(buffer, flushFlag);
+ return responseData(engine, engine._processChunk(buffer, flushFlag));
}
function zlibOnError(message, errno) {
diff --git a/test/parallel/test-zlib-convenience-methods.js b/test/parallel/test-zlib-convenience-methods.js
index 5612575d8e..5c1f739506 100644
--- a/test/parallel/test-zlib-convenience-methods.js
+++ b/test/parallel/test-zlib-convenience-methods.js
@@ -36,6 +36,10 @@ const opts = {
chunkSize: 1024,
};
+const optsInfo = {
+ info: true
+};
+
for (const [type, expect] of [
['string', expectStr],
['Buffer', expectBuf],
@@ -44,10 +48,10 @@ for (const [type, expect] of [
)
]) {
for (const method of [
- ['gzip', 'gunzip'],
- ['gzip', 'unzip'],
- ['deflate', 'inflate'],
- ['deflateRaw', 'inflateRaw'],
+ ['gzip', 'gunzip', 'Gzip', 'Gunzip'],
+ ['gzip', 'unzip', 'Gzip', 'Unzip'],
+ ['deflate', 'inflate', 'Deflate', 'Inflate'],
+ ['deflateRaw', 'inflateRaw', 'DeflateRaw', 'InflateRaw'],
]) {
zlib[method[0]](expect, opts, common.mustCall((err, result) => {
zlib[method[1]](result, opts, common.mustCall((err, result) => {
@@ -65,6 +69,22 @@ for (const [type, expect] of [
}));
}));
+ zlib[method[0]](expect, optsInfo, common.mustCall((err, result) => {
+ assert.ok(result.engine instanceof zlib[method[2]],
+ `Should get engine ${method[2]} after ${method[0]} ` +
+ `${type} with info option.`);
+
+ const compressed = result.buffer;
+ zlib[method[1]](compressed, optsInfo, common.mustCall((err, result) => {
+ assert.strictEqual(result.buffer.toString(), expectStr,
+ `Should get original string after ${method[0]}/` +
+ `${method[1]} ${type} with info option.`);
+ assert.ok(result.engine instanceof zlib[method[3]],
+ `Should get engine ${method[3]} after ${method[0]} ` +
+ `${type} with info option.`);
+ }));
+ }));
+
{
const compressed = zlib[`${method[0]}Sync`](expect, opts);
const decompressed = zlib[`${method[1]}Sync`](compressed, opts);
@@ -81,5 +101,21 @@ for (const [type, expect] of [
`Should get original string after ${method[0]}Sync/` +
`${method[1]}Sync ${type} without options.`);
}
+
+
+ {
+ const compressed = zlib[`${method[0]}Sync`](expect, optsInfo);
+ assert.ok(compressed.engine instanceof zlib[method[2]],
+ `Should get engine ${method[2]} after ${method[0]} ` +
+ `${type} with info option.`);
+ const decompressed = zlib[`${method[1]}Sync`](compressed.buffer,
+ optsInfo);
+ assert.strictEqual(decompressed.buffer.toString(), expectStr,
+ `Should get original string after ${method[0]}Sync/` +
+ `${method[1]}Sync ${type} without options.`);
+ assert.ok(decompressed.engine instanceof zlib[method[3]],
+ `Should get engine ${method[3]} after ${method[0]} ` +
+ `${type} with info option.`);
+ }
}
}