1// META: global=window,worker 2'use strict'; 3 4test(() => { 5 new WritableStream({}, new CountQueuingStrategy({ highWaterMark: 4 })); 6}, 'Can construct a writable stream with a valid CountQueuingStrategy'); 7 8promise_test(() => { 9 const dones = Object.create(null); 10 11 const ws = new WritableStream( 12 { 13 write(chunk) { 14 return new Promise(resolve => { 15 dones[chunk] = resolve; 16 }); 17 } 18 }, 19 new CountQueuingStrategy({ highWaterMark: 0 }) 20 ); 21 22 const writer = ws.getWriter(); 23 let writePromiseB; 24 let writePromiseC; 25 26 return Promise.resolve().then(() => { 27 assert_equals(writer.desiredSize, 0, 'desiredSize should be initially 0'); 28 29 const writePromiseA = writer.write('a'); 30 assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 1st write()'); 31 32 writePromiseB = writer.write('b'); 33 assert_equals(writer.desiredSize, -2, 'desiredSize should be -2 after 2nd write()'); 34 35 dones.a(); 36 return writePromiseA; 37 }).then(() => { 38 assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after completing 1st write()'); 39 40 dones.b(); 41 return writePromiseB; 42 }).then(() => { 43 assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after completing 2nd write()'); 44 45 writePromiseC = writer.write('c'); 46 assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 3rd write()'); 47 48 dones.c(); 49 return writePromiseC; 50 }).then(() => { 51 assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after completing 3rd write()'); 52 }); 53}, 'Correctly governs the value of a WritableStream\'s state property (HWM = 0)'); 54 55promise_test(() => { 56 const dones = Object.create(null); 57 58 const ws = new WritableStream( 59 { 60 write(chunk) { 61 return new Promise(resolve => { 62 dones[chunk] = resolve; 63 }); 64 } 65 }, 66 new CountQueuingStrategy({ highWaterMark: 4 }) 67 ); 68 69 const writer = ws.getWriter(); 70 let writePromiseB; 71 let writePromiseC; 72 let writePromiseD; 73 74 return Promise.resolve().then(() => { 75 assert_equals(writer.desiredSize, 4, 'desiredSize should be initially 4'); 76 77 const writePromiseA = writer.write('a'); 78 assert_equals(writer.desiredSize, 3, 'desiredSize should be 3 after 1st write()'); 79 80 writePromiseB = writer.write('b'); 81 assert_equals(writer.desiredSize, 2, 'desiredSize should be 2 after 2nd write()'); 82 83 writePromiseC = writer.write('c'); 84 assert_equals(writer.desiredSize, 1, 'desiredSize should be 1 after 3rd write()'); 85 86 writePromiseD = writer.write('d'); 87 assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after 4th write()'); 88 89 writer.write('e'); 90 assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 5th write()'); 91 92 writer.write('f'); 93 assert_equals(writer.desiredSize, -2, 'desiredSize should be -2 after 6th write()'); 94 95 writer.write('g'); 96 assert_equals(writer.desiredSize, -3, 'desiredSize should be -3 after 7th write()'); 97 98 dones.a(); 99 return writePromiseA; 100 }).then(() => { 101 assert_equals(writer.desiredSize, -2, 'desiredSize should be -2 after completing 1st write()'); 102 103 dones.b(); 104 return writePromiseB; 105 }).then(() => { 106 assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after completing 2nd write()'); 107 108 dones.c(); 109 return writePromiseC; 110 }).then(() => { 111 assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after completing 3rd write()'); 112 113 writer.write('h'); 114 assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 8th write()'); 115 116 dones.d(); 117 return writePromiseD; 118 }).then(() => { 119 assert_equals(writer.desiredSize, 0, 'desiredSize should be 0 after completing 4th write()'); 120 121 writer.write('i'); 122 assert_equals(writer.desiredSize, -1, 'desiredSize should be -1 after 9th write()'); 123 }); 124}, 'Correctly governs the value of a WritableStream\'s state property (HWM = 4)'); 125