1// META: global=window,worker 2'use strict'; 3 4const transformerMethods = { 5 start: { 6 length: 1, 7 trigger: () => Promise.resolve() 8 }, 9 transform: { 10 length: 2, 11 trigger: ts => ts.writable.getWriter().write() 12 }, 13 flush: { 14 length: 1, 15 trigger: ts => ts.writable.getWriter().close() 16 } 17}; 18 19for (const method in transformerMethods) { 20 const { length, trigger } = transformerMethods[method]; 21 22 // Some semantic tests of how transformer methods are called can be found in general.js, as well as in the test files 23 // specific to each method. 24 promise_test(() => { 25 let argCount; 26 const ts = new TransformStream({ 27 [method](...args) { 28 argCount = args.length; 29 } 30 }, undefined, { highWaterMark: Infinity }); 31 return Promise.resolve(trigger(ts)).then(() => { 32 assert_equals(argCount, length, `${method} should be called with ${length} arguments`); 33 }); 34 }, `transformer method ${method} should be called with the right number of arguments`); 35 36 promise_test(() => { 37 let methodWasCalled = false; 38 function Transformer() {} 39 Transformer.prototype = { 40 [method]() { 41 methodWasCalled = true; 42 } 43 }; 44 const ts = new TransformStream(new Transformer(), undefined, { highWaterMark: Infinity }); 45 return Promise.resolve(trigger(ts)).then(() => { 46 assert_true(methodWasCalled, `${method} should be called`); 47 }); 48 }, `transformer method ${method} should be called even when it's located on the prototype chain`); 49} 50