(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 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 = ''; 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 `` * 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; })();