11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_cirequire('../common'); 31cb0ef41Sopenharmony_ciconst assert = require('assert'); 41cb0ef41Sopenharmony_ci 51cb0ef41Sopenharmony_ciconst { Transform, Readable, Writable } = require('stream'); 61cb0ef41Sopenharmony_ci 71cb0ef41Sopenharmony_ciconst DEFAULT = 16 * 1024; 81cb0ef41Sopenharmony_ci 91cb0ef41Sopenharmony_cifunction testTransform(expectedReadableHwm, expectedWritableHwm, options) { 101cb0ef41Sopenharmony_ci const t = new Transform(options); 111cb0ef41Sopenharmony_ci assert.strictEqual(t._readableState.highWaterMark, expectedReadableHwm); 121cb0ef41Sopenharmony_ci assert.strictEqual(t._writableState.highWaterMark, expectedWritableHwm); 131cb0ef41Sopenharmony_ci} 141cb0ef41Sopenharmony_ci 151cb0ef41Sopenharmony_ci// Test overriding defaultHwm 161cb0ef41Sopenharmony_citestTransform(666, DEFAULT, { readableHighWaterMark: 666 }); 171cb0ef41Sopenharmony_citestTransform(DEFAULT, 777, { writableHighWaterMark: 777 }); 181cb0ef41Sopenharmony_citestTransform(666, 777, { 191cb0ef41Sopenharmony_ci readableHighWaterMark: 666, 201cb0ef41Sopenharmony_ci writableHighWaterMark: 777, 211cb0ef41Sopenharmony_ci}); 221cb0ef41Sopenharmony_ci 231cb0ef41Sopenharmony_ci// Test highWaterMark overriding 241cb0ef41Sopenharmony_citestTransform(555, 555, { 251cb0ef41Sopenharmony_ci highWaterMark: 555, 261cb0ef41Sopenharmony_ci readableHighWaterMark: 666, 271cb0ef41Sopenharmony_ci}); 281cb0ef41Sopenharmony_citestTransform(555, 555, { 291cb0ef41Sopenharmony_ci highWaterMark: 555, 301cb0ef41Sopenharmony_ci writableHighWaterMark: 777, 311cb0ef41Sopenharmony_ci}); 321cb0ef41Sopenharmony_citestTransform(555, 555, { 331cb0ef41Sopenharmony_ci highWaterMark: 555, 341cb0ef41Sopenharmony_ci readableHighWaterMark: 666, 351cb0ef41Sopenharmony_ci writableHighWaterMark: 777, 361cb0ef41Sopenharmony_ci}); 371cb0ef41Sopenharmony_ci 381cb0ef41Sopenharmony_ci// Test undefined, null 391cb0ef41Sopenharmony_ci[undefined, null].forEach((v) => { 401cb0ef41Sopenharmony_ci testTransform(DEFAULT, DEFAULT, { readableHighWaterMark: v }); 411cb0ef41Sopenharmony_ci testTransform(DEFAULT, DEFAULT, { writableHighWaterMark: v }); 421cb0ef41Sopenharmony_ci testTransform(666, DEFAULT, { highWaterMark: v, readableHighWaterMark: 666 }); 431cb0ef41Sopenharmony_ci testTransform(DEFAULT, 777, { highWaterMark: v, writableHighWaterMark: 777 }); 441cb0ef41Sopenharmony_ci}); 451cb0ef41Sopenharmony_ci 461cb0ef41Sopenharmony_ci// test NaN 471cb0ef41Sopenharmony_ci{ 481cb0ef41Sopenharmony_ci assert.throws(() => { 491cb0ef41Sopenharmony_ci new Transform({ readableHighWaterMark: NaN }); 501cb0ef41Sopenharmony_ci }, { 511cb0ef41Sopenharmony_ci name: 'TypeError', 521cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_VALUE', 531cb0ef41Sopenharmony_ci message: "The property 'options.readableHighWaterMark' is invalid. " + 541cb0ef41Sopenharmony_ci 'Received NaN' 551cb0ef41Sopenharmony_ci }); 561cb0ef41Sopenharmony_ci 571cb0ef41Sopenharmony_ci assert.throws(() => { 581cb0ef41Sopenharmony_ci new Transform({ writableHighWaterMark: NaN }); 591cb0ef41Sopenharmony_ci }, { 601cb0ef41Sopenharmony_ci name: 'TypeError', 611cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_VALUE', 621cb0ef41Sopenharmony_ci message: "The property 'options.writableHighWaterMark' is invalid. " + 631cb0ef41Sopenharmony_ci 'Received NaN' 641cb0ef41Sopenharmony_ci }); 651cb0ef41Sopenharmony_ci} 661cb0ef41Sopenharmony_ci 671cb0ef41Sopenharmony_ci// Test non Duplex streams ignore the options 681cb0ef41Sopenharmony_ci{ 691cb0ef41Sopenharmony_ci const r = new Readable({ readableHighWaterMark: 666 }); 701cb0ef41Sopenharmony_ci assert.strictEqual(r._readableState.highWaterMark, DEFAULT); 711cb0ef41Sopenharmony_ci const w = new Writable({ writableHighWaterMark: 777 }); 721cb0ef41Sopenharmony_ci assert.strictEqual(w._writableState.highWaterMark, DEFAULT); 731cb0ef41Sopenharmony_ci} 74