%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
// META: global=window,worker 'use strict'; const classes = [ { name: 'TextDecoderStream', input: new Uint8Array([65]) }, { name: 'TextEncoderStream', input: 'A' } ]; const microtasksRun = () => new Promise(resolve => step_timeout(resolve, 0)); for (const streamClass of classes) { promise_test(async () => { const stream = new self[streamClass.name](); const writer = stream.writable.getWriter(); const reader = stream.readable.getReader(); const events = []; await microtasksRun(); const writePromise = writer.write(streamClass.input); writePromise.then(() => events.push('write')); await microtasksRun(); events.push('paused'); await reader.read(); events.push('read'); await writePromise; assert_array_equals(events, ['paused', 'read', 'write'], 'write should happen after read'); }, 'write() should not complete until read relieves backpressure for ' + `${streamClass.name}`); promise_test(async () => { const stream = new self[streamClass.name](); const writer = stream.writable.getWriter(); const reader = stream.readable.getReader(); const events = []; await microtasksRun(); const readPromise1 = reader.read(); readPromise1.then(() => events.push('read1')); const writePromise1 = writer.write(streamClass.input); const writePromise2 = writer.write(streamClass.input); writePromise1.then(() => events.push('write1')); writePromise2.then(() => events.push('write2')); await microtasksRun(); events.push('paused'); const readPromise2 = reader.read(); readPromise2.then(() => events.push('read2')); await Promise.all([writePromise1, writePromise2, readPromise1, readPromise2]); assert_array_equals(events, ['read1', 'write1', 'paused', 'read2', 'write2'], 'writes should not happen before read2'); }, 'additional writes should wait for backpressure to be relieved for ' + `class ${streamClass.name}`); }