diff options
Diffstat (limited to 'testing/web-platform/tests/html/webappapis/structured-clone/structured-clone-battery-of-tests-harness.js')
-rw-r--r-- | testing/web-platform/tests/html/webappapis/structured-clone/structured-clone-battery-of-tests-harness.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/webappapis/structured-clone/structured-clone-battery-of-tests-harness.js b/testing/web-platform/tests/html/webappapis/structured-clone/structured-clone-battery-of-tests-harness.js new file mode 100644 index 0000000000..00a86fa74b --- /dev/null +++ b/testing/web-platform/tests/html/webappapis/structured-clone/structured-clone-battery-of-tests-harness.js @@ -0,0 +1,45 @@ +/** + * Runs a collection of tests that determine if an API implements structured clone + * correctly. + * + * The `runner` parameter has the following properties: + * - `setup()`: An optional function run once before testing starts + * - `teardown()`: An option function run once after all tests are done + * - `preTest()`: An optional, async function run before a test + * - `postTest()`: An optional, async function run after a test is done + * - `structuredClone(obj, transferList)`: Required function that somehow + * structurally clones an object. + * Must return a promise. + * - `hasDocument`: When true, disables tests that require a document. True by default. + */ + +function runStructuredCloneBatteryOfTests(runner) { + const defaultRunner = { + setup() {}, + preTest() {}, + postTest() {}, + teardown() {}, + hasDocument: true + }; + runner = Object.assign({}, defaultRunner, runner); + + let setupPromise = runner.setup(); + const allTests = structuredCloneBatteryOfTests.map(test => { + + if (!runner.hasDocument && test.requiresDocument) { + return; + } + + return new Promise(resolve => { + promise_test(async t => { + test = await test; + await setupPromise; + await runner.preTest(test); + await test.f(runner, t) + await runner.postTest(test); + resolve(); + }, test.description); + }).catch(_ => {}); + }); + Promise.all(allTests).then(_ => runner.teardown()); +} |