summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/common/subset-tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/common/subset-tests.js')
-rw-r--r--testing/web-platform/tests/common/subset-tests.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/testing/web-platform/tests/common/subset-tests.js b/testing/web-platform/tests/common/subset-tests.js
new file mode 100644
index 0000000000..58e93413de
--- /dev/null
+++ b/testing/web-platform/tests/common/subset-tests.js
@@ -0,0 +1,60 @@
+(function() {
+ var subTestStart = 0;
+ var subTestEnd = Infinity;
+ var match;
+ if (location.search) {
+ match = /(?:^\?|&)(\d+)-(\d+|last)(?:&|$)/.exec(location.search);
+ if (match) {
+ subTestStart = parseInt(match[1], 10);
+ if (match[2] !== "last") {
+ subTestEnd = parseInt(match[2], 10);
+ }
+ }
+ // Below is utility code to generate <meta> for copy/paste into tests.
+ // Sample usage:
+ // test.html?split=1000
+ match = /(?:^\?|&)split=(\d+)(?:&|$)/.exec(location.search);
+ if (match) {
+ var testsPerVariant = parseInt(match[1], 10);
+ add_completion_callback(tests => {
+ var total = tests.length;
+ var template = '<meta name="variant" content="?%s-%s">';
+ var metas = [];
+ for (var i = 1; i < total - testsPerVariant; i = i + testsPerVariant) {
+ metas.push(template.replace("%s", i).replace("%s", i + testsPerVariant - 1));
+ }
+ metas.push(template.replace("%s", i).replace("%s", "last"));
+ var pre = document.createElement('pre');
+ pre.textContent = metas.join('\n');
+ document.body.insertBefore(pre, document.body.firstChild);
+ document.getSelection().selectAllChildren(pre);
+ });
+ }
+ }
+ /**
+ * Check if `currentSubTest` is in the subset specified in the URL.
+ * @param {number} currentSubTest
+ * @returns {boolean}
+ */
+ function shouldRunSubTest(currentSubTest) {
+ return currentSubTest >= subTestStart && currentSubTest <= subTestEnd;
+ }
+ var currentSubTest = 0;
+ /**
+ * Only test a subset of tests with, e.g., `?1-10` in the URL.
+ * Can be used together with `<meta name="variant" content="...">`
+ * Sample usage:
+ * for (const test of tests) {
+ * subsetTest(async_test, test.fn, test.name);
+ * }
+ */
+ function subsetTest(testFunc, ...args) {
+ currentSubTest++;
+ if (shouldRunSubTest(currentSubTest)) {
+ return testFunc(...args);
+ }
+ return null;
+ }
+ self.shouldRunSubTest = shouldRunSubTest;
+ self.subsetTest = subsetTest;
+})();