summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/webappapis/structured-clone/structured-clone-battery-of-tests-harness.js
diff options
context:
space:
mode:
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.js45
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());
+}