// META: global=window,worker,shadowrealm 'use strict'; const transformerMethods = { start: { length: 1, trigger: () => Promise.resolve() }, transform: { length: 2, trigger: ts => ts.writable.getWriter().write() }, flush: { length: 1, trigger: ts => ts.writable.getWriter().close() } }; for (const method in transformerMethods) { const { length, trigger } = transformerMethods[method]; // Some semantic tests of how transformer 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 ts = new TransformStream({ [method](...args) { argCount = args.length; } }, undefined, { highWaterMark: Infinity }); return Promise.resolve(trigger(ts)).then(() => { assert_equals(argCount, length, `${method} should be called with ${length} arguments`); }); }, `transformer method ${method} should be called with the right number of arguments`); promise_test(() => { let methodWasCalled = false; function Transformer() {} Transformer.prototype = { [method]() { methodWasCalled = true; } }; const ts = new TransformStream(new Transformer(), undefined, { highWaterMark: Infinity }); return Promise.resolve(trigger(ts)).then(() => { assert_true(methodWasCalled, `${method} should be called`); }); }, `transformer method ${method} should be called even when it's located on the prototype chain`); }