| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const zlib = require('zlib'); |
| |
| const expectStr = 'abcdefghijklmnopqrstuvwxyz'.repeat(2); |
| const expectBuf = Buffer.from(expectStr); |
| |
| function createWriter(target, buffer) { |
| const writer = { size: 0 }; |
| const write = () => { |
| target.write(Buffer.from([buffer[writer.size++]]), () => { |
| if (writer.size < buffer.length) { |
| target.flush(write); |
| } else { |
| target.end(); |
| } |
| }); |
| }; |
| write(); |
| return writer; |
| } |
| |
| common.expectWarning( |
| 'DeprecationWarning', |
| 'zlib.bytesRead is deprecated and will change its meaning in the ' + |
| 'future. Use zlib.bytesWritten instead.', |
| 'DEP0108'); |
| |
| for (const method of [ |
| ['createGzip', 'createGunzip', false], |
| ['createGzip', 'createUnzip', false], |
| ['createDeflate', 'createInflate', true], |
| ['createDeflateRaw', 'createInflateRaw', true], |
| ['createBrotliCompress', 'createBrotliDecompress', true] |
| ]) { |
| let compWriter; |
| let compData = Buffer.alloc(0); |
| |
| const comp = zlib[method[0]](); |
| comp.on('data', function(d) { |
| compData = Buffer.concat([compData, d]); |
| assert.strictEqual(this.bytesWritten, compWriter.size, |
| `Should get write size on ${method[0]} data.`); |
| }); |
| comp.on('end', common.mustCall(function() { |
| assert.strictEqual(this.bytesWritten, compWriter.size, |
| `Should get write size on ${method[0]} end.`); |
| assert.strictEqual(this.bytesWritten, expectStr.length, |
| `Should get data size on ${method[0]} end.`); |
| |
| { |
| let decompWriter; |
| let decompData = Buffer.alloc(0); |
| |
| const decomp = zlib[method[1]](); |
| decomp.on('data', function(d) { |
| decompData = Buffer.concat([decompData, d]); |
| assert.strictEqual(this.bytesWritten, decompWriter.size, |
| `Should get write size on ${method[0]}/` + |
| `${method[1]} data.`); |
| }); |
| decomp.on('end', common.mustCall(function() { |
| assert.strictEqual(this.bytesWritten, compData.length, |
| `Should get compressed size on ${method[0]}/` + |
| `${method[1]} end.`); |
| assert.strictEqual(decompData.toString(), expectStr, |
| `Should get original string on ${method[0]}/` + |
| `${method[1]} end.`); |
| })); |
| decompWriter = createWriter(decomp, compData); |
| } |
| |
| // Some methods should allow extra data after the compressed data |
| if (method[2]) { |
| const compDataExtra = Buffer.concat([compData, Buffer.from('extra')]); |
| |
| let decompWriter; |
| let decompData = Buffer.alloc(0); |
| |
| const decomp = zlib[method[1]](); |
| decomp.on('data', function(d) { |
| decompData = Buffer.concat([decompData, d]); |
| assert.strictEqual(this.bytesWritten, decompWriter.size, |
| `Should get write size on ${method[0]}/` + |
| `${method[1]} data.`); |
| }); |
| decomp.on('end', common.mustCall(function() { |
| assert.strictEqual(this.bytesWritten, compData.length, |
| `Should get compressed size on ${method[0]}/` + |
| `${method[1]} end.`); |
| // Checking legacy name. |
| assert.strictEqual(this.bytesWritten, this.bytesRead); |
| assert.strictEqual(decompData.toString(), expectStr, |
| `Should get original string on ${method[0]}/` + |
| `${method[1]} end.`); |
| })); |
| decompWriter = createWriter(decomp, compDataExtra); |
| } |
| })); |
| compWriter = createWriter(comp, expectBuf); |
| } |