| // META: global=window,worker |
| 'use strict'; |
| |
| const sinkMethods = { |
| start: { |
| length: 1, |
| trigger: () => Promise.resolve() |
| }, |
| write: { |
| length: 2, |
| trigger: writer => writer.write() |
| }, |
| close: { |
| length: 0, |
| trigger: writer => writer.close() |
| }, |
| abort: { |
| length: 1, |
| trigger: writer => writer.abort() |
| } |
| }; |
| |
| for (const method in sinkMethods) { |
| const { length, trigger } = sinkMethods[method]; |
| |
| // Some semantic tests of how sink methods are called can be found in general.js, as well as in the test files |
| // specific to each method. |
| promise_test(() => { |
| let argCount; |
| const ws = new WritableStream({ |
| [method](...args) { |
| argCount = args.length; |
| } |
| }); |
| return Promise.resolve(trigger(ws.getWriter())).then(() => { |
| assert_equals(argCount, length, `${method} should be called with ${length} arguments`); |
| }); |
| }, `sink method ${method} should be called with the right number of arguments`); |
| |
| promise_test(() => { |
| let methodWasCalled = false; |
| function Sink() {} |
| Sink.prototype = { |
| [method]() { |
| methodWasCalled = true; |
| } |
| }; |
| const ws = new WritableStream(new Sink()); |
| return Promise.resolve(trigger(ws.getWriter())).then(() => { |
| assert_true(methodWasCalled, `${method} should be called`); |
| }); |
| }, `sink method ${method} should be called even when it's located on the prototype chain`); |
| } |