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