| 'use strict'; |
| |
| if (self.importScripts) { |
| self.importScripts('/resources/testharness.js'); |
| } |
| |
| test(() => { |
| new WritableStream({}, new CountQueuingStrategy({ highWaterMark: 4 })); |
| }, 'Can construct a writable stream with a valid CountQueuingStrategy'); |
| |
| promise_test(() => { |
| const dones = Object.create(null); |
| |
| const ws = new WritableStream( |
| { |
| write(chunk) { |
| return new Promise(resolve => { |
| dones[chunk] = resolve; |
| }); |
| } |
| }, |
| new CountQueuingStrategy({ highWaterMark: 0 }) |
| ); |
| |
| const writer = ws.getWriter(); |
| let writePromiseB; |
| let writePromiseC; |
| |
| return Promise.resolve().then(() => { |
| assert_equals(writer.desiredSize, 0, 'desiredSize should be initially 0'); |
| |
| const writePromiseA = writer.write('a'); |
| assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 1st write()'); |
| |
| writePromiseB = writer.write('b'); |
| assert_equals(writer.desiredSize, -2, 'desiredSize should be -2 after 2nd write()'); |
| |
| dones.a(); |
| return writePromiseA; |
| }).then(() => { |
| assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after completing 1st write()'); |
| |
| dones.b(); |
| return writePromiseB; |
| }).then(() => { |
| assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after completing 2nd write()'); |
| |
| writePromiseC = writer.write('c'); |
| assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 3rd write()'); |
| |
| dones.c(); |
| return writePromiseC; |
| }).then(() => { |
| assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after completing 3rd write()'); |
| }); |
| }, 'Correctly governs the value of a WritableStream\'s state property (HWM = 0)'); |
| |
| promise_test(() => { |
| const dones = Object.create(null); |
| |
| const ws = new WritableStream( |
| { |
| write(chunk) { |
| return new Promise(resolve => { |
| dones[chunk] = resolve; |
| }); |
| } |
| }, |
| new CountQueuingStrategy({ highWaterMark: 4 }) |
| ); |
| |
| const writer = ws.getWriter(); |
| let writePromiseB; |
| let writePromiseC; |
| let writePromiseD; |
| |
| return Promise.resolve().then(() => { |
| assert_equals(writer.desiredSize, 4, 'desiredSize should be initially 4'); |
| |
| const writePromiseA = writer.write('a'); |
| assert_equals(writer.desiredSize, 3, 'desiredSize should be 3 after 1st write()'); |
| |
| writePromiseB = writer.write('b'); |
| assert_equals(writer.desiredSize, 2, 'desiredSize should be 2 after 2nd write()'); |
| |
| writePromiseC = writer.write('c'); |
| assert_equals(writer.desiredSize, 1, 'desiredSize should be 1 after 3rd write()'); |
| |
| writePromiseD = writer.write('d'); |
| assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after 4th write()'); |
| |
| writer.write('e'); |
| assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 5th write()'); |
| |
| writer.write('f'); |
| assert_equals(writer.desiredSize, -2, 'desiredSize should be -2 after 6th write()'); |
| |
| writer.write('g'); |
| assert_equals(writer.desiredSize, -3, 'desiredSize should be -3 after 7th write()'); |
| |
| dones.a(); |
| return writePromiseA; |
| }).then(() => { |
| assert_equals(writer.desiredSize, -2, 'desiredSize should be -2 after completing 1st write()'); |
| |
| dones.b(); |
| return writePromiseB; |
| }).then(() => { |
| assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after completing 2nd write()'); |
| |
| dones.c(); |
| return writePromiseC; |
| }).then(() => { |
| assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after completing 3rd write()'); |
| |
| writer.write('h'); |
| assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 8th write()'); |
| |
| dones.d(); |
| return writePromiseD; |
| }).then(() => { |
| assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after completing 4th write()'); |
| |
| writer.write('i'); |
| assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 9th write()'); |
| }); |
| }, 'Correctly governs the value of a WritableStream\'s state property (HWM = 4)'); |
| |
| done(); |