11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ciconst common = require('../common'); 31cb0ef41Sopenharmony_ciconst assert = require('assert'); 41cb0ef41Sopenharmony_ciconst zlib = require('zlib'); 51cb0ef41Sopenharmony_ci 61cb0ef41Sopenharmony_ciconst expectStr = 'abcdefghijklmnopqrstuvwxyz'.repeat(2); 71cb0ef41Sopenharmony_ciconst expectBuf = Buffer.from(expectStr); 81cb0ef41Sopenharmony_ci 91cb0ef41Sopenharmony_cifunction createWriter(target, buffer) { 101cb0ef41Sopenharmony_ci const writer = { size: 0 }; 111cb0ef41Sopenharmony_ci const write = () => { 121cb0ef41Sopenharmony_ci target.write(Buffer.from([buffer[writer.size++]]), () => { 131cb0ef41Sopenharmony_ci if (writer.size < buffer.length) { 141cb0ef41Sopenharmony_ci target.flush(write); 151cb0ef41Sopenharmony_ci } else { 161cb0ef41Sopenharmony_ci target.end(); 171cb0ef41Sopenharmony_ci } 181cb0ef41Sopenharmony_ci }); 191cb0ef41Sopenharmony_ci }; 201cb0ef41Sopenharmony_ci write(); 211cb0ef41Sopenharmony_ci return writer; 221cb0ef41Sopenharmony_ci} 231cb0ef41Sopenharmony_ci 241cb0ef41Sopenharmony_cicommon.expectWarning( 251cb0ef41Sopenharmony_ci 'DeprecationWarning', 261cb0ef41Sopenharmony_ci 'zlib.bytesRead is deprecated and will change its meaning in the ' + 271cb0ef41Sopenharmony_ci 'future. Use zlib.bytesWritten instead.', 281cb0ef41Sopenharmony_ci 'DEP0108'); 291cb0ef41Sopenharmony_ci 301cb0ef41Sopenharmony_cifor (const method of [ 311cb0ef41Sopenharmony_ci ['createGzip', 'createGunzip', false], 321cb0ef41Sopenharmony_ci ['createGzip', 'createUnzip', false], 331cb0ef41Sopenharmony_ci ['createDeflate', 'createInflate', true], 341cb0ef41Sopenharmony_ci ['createDeflateRaw', 'createInflateRaw', true], 351cb0ef41Sopenharmony_ci ['createBrotliCompress', 'createBrotliDecompress', true], 361cb0ef41Sopenharmony_ci]) { 371cb0ef41Sopenharmony_ci let compWriter; 381cb0ef41Sopenharmony_ci let compData = Buffer.alloc(0); 391cb0ef41Sopenharmony_ci 401cb0ef41Sopenharmony_ci const comp = zlib[method[0]](); 411cb0ef41Sopenharmony_ci comp.on('data', function(d) { 421cb0ef41Sopenharmony_ci compData = Buffer.concat([compData, d]); 431cb0ef41Sopenharmony_ci assert.strictEqual(this.bytesWritten, compWriter.size, 441cb0ef41Sopenharmony_ci `Should get write size on ${method[0]} data.`); 451cb0ef41Sopenharmony_ci }); 461cb0ef41Sopenharmony_ci comp.on('end', common.mustCall(function() { 471cb0ef41Sopenharmony_ci assert.strictEqual(this.bytesWritten, compWriter.size, 481cb0ef41Sopenharmony_ci `Should get write size on ${method[0]} end.`); 491cb0ef41Sopenharmony_ci assert.strictEqual(this.bytesWritten, expectStr.length, 501cb0ef41Sopenharmony_ci `Should get data size on ${method[0]} end.`); 511cb0ef41Sopenharmony_ci 521cb0ef41Sopenharmony_ci { 531cb0ef41Sopenharmony_ci let decompWriter; 541cb0ef41Sopenharmony_ci let decompData = Buffer.alloc(0); 551cb0ef41Sopenharmony_ci 561cb0ef41Sopenharmony_ci const decomp = zlib[method[1]](); 571cb0ef41Sopenharmony_ci decomp.on('data', function(d) { 581cb0ef41Sopenharmony_ci decompData = Buffer.concat([decompData, d]); 591cb0ef41Sopenharmony_ci assert.strictEqual(this.bytesWritten, decompWriter.size, 601cb0ef41Sopenharmony_ci `Should get write size on ${method[0]}/` + 611cb0ef41Sopenharmony_ci `${method[1]} data.`); 621cb0ef41Sopenharmony_ci }); 631cb0ef41Sopenharmony_ci decomp.on('end', common.mustCall(function() { 641cb0ef41Sopenharmony_ci assert.strictEqual(this.bytesWritten, compData.length, 651cb0ef41Sopenharmony_ci `Should get compressed size on ${method[0]}/` + 661cb0ef41Sopenharmony_ci `${method[1]} end.`); 671cb0ef41Sopenharmony_ci assert.strictEqual(decompData.toString(), expectStr, 681cb0ef41Sopenharmony_ci `Should get original string on ${method[0]}/` + 691cb0ef41Sopenharmony_ci `${method[1]} end.`); 701cb0ef41Sopenharmony_ci })); 711cb0ef41Sopenharmony_ci decompWriter = createWriter(decomp, compData); 721cb0ef41Sopenharmony_ci } 731cb0ef41Sopenharmony_ci 741cb0ef41Sopenharmony_ci // Some methods should allow extra data after the compressed data 751cb0ef41Sopenharmony_ci if (method[2]) { 761cb0ef41Sopenharmony_ci const compDataExtra = Buffer.concat([compData, Buffer.from('extra')]); 771cb0ef41Sopenharmony_ci 781cb0ef41Sopenharmony_ci let decompWriter; 791cb0ef41Sopenharmony_ci let decompData = Buffer.alloc(0); 801cb0ef41Sopenharmony_ci 811cb0ef41Sopenharmony_ci const decomp = zlib[method[1]](); 821cb0ef41Sopenharmony_ci decomp.on('data', function(d) { 831cb0ef41Sopenharmony_ci decompData = Buffer.concat([decompData, d]); 841cb0ef41Sopenharmony_ci assert.strictEqual(this.bytesWritten, decompWriter.size, 851cb0ef41Sopenharmony_ci `Should get write size on ${method[0]}/` + 861cb0ef41Sopenharmony_ci `${method[1]} data.`); 871cb0ef41Sopenharmony_ci }); 881cb0ef41Sopenharmony_ci decomp.on('end', common.mustCall(function() { 891cb0ef41Sopenharmony_ci assert.strictEqual(this.bytesWritten, compData.length, 901cb0ef41Sopenharmony_ci `Should get compressed size on ${method[0]}/` + 911cb0ef41Sopenharmony_ci `${method[1]} end.`); 921cb0ef41Sopenharmony_ci // Checking legacy name. 931cb0ef41Sopenharmony_ci assert.strictEqual(this.bytesWritten, this.bytesRead); 941cb0ef41Sopenharmony_ci assert.strictEqual(decompData.toString(), expectStr, 951cb0ef41Sopenharmony_ci `Should get original string on ${method[0]}/` + 961cb0ef41Sopenharmony_ci `${method[1]} end.`); 971cb0ef41Sopenharmony_ci })); 981cb0ef41Sopenharmony_ci decompWriter = createWriter(decomp, compDataExtra); 991cb0ef41Sopenharmony_ci } 1001cb0ef41Sopenharmony_ci })); 1011cb0ef41Sopenharmony_ci compWriter = createWriter(comp, expectBuf); 1021cb0ef41Sopenharmony_ci} 103