53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
// META: global=window,worker,shadowrealm
|
|
'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`);
|
|
}
|