%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Flags: --expose-internals 'use strict'; const common = require('../common'); const assert = require('assert'); const { StreamWrap } = require('internal/js_stream_socket'); const { Duplex } = require('stream'); const { internalBinding } = require('internal/test/binding'); const { ShutdownWrap } = internalBinding('stream_wrap'); // This test makes sure that when a wrapped stream is waiting for // a "drain" event to `doShutdown`, the instance will work correctly when a // "drain" event emitted. { let resolve = null; class TestDuplex extends Duplex { _write(chunk, encoding, callback) { // We will resolve the write later. resolve = () => { callback(); }; } _read() {} } const testDuplex = new TestDuplex(); const socket = new StreamWrap(testDuplex); socket.write( // Make the buffer long enough so that the `Writable` will emit "drain". Buffer.allocUnsafe(socket.writableHighWaterMark * 2), common.mustCall() ); // Make sure that the 'drain' events will be emitted. testDuplex.on('drain', common.mustCall(() => { console.log('testDuplex drain'); })); assert.strictEqual(typeof resolve, 'function'); const req = new ShutdownWrap(); req.oncomplete = common.mustCall(); req.handle = socket._handle; // Should not throw. socket._handle.shutdown(req); resolve(); }