mirror of
https://github.com/servo/servo.git
synced 2025-06-25 17:44:33 +01:00
83 lines
2.3 KiB
JavaScript
83 lines
2.3 KiB
JavaScript
(function() {
|
|
var subTestKeyPattern = null;
|
|
var match;
|
|
var collectKeys = false;
|
|
var collectCounts = false;
|
|
var keys = {};
|
|
var exclude = false;
|
|
if (location.search) {
|
|
match = /(?:^\?|&)(include|exclude)=([^&]+)?/.exec(location.search);
|
|
if (match) {
|
|
subTestKeyPattern = new RegExp(`^${match[2]}$`);
|
|
if (match[1] === 'exclude') {
|
|
exclude = true;
|
|
}
|
|
}
|
|
// Below is utility code to generate <meta> for copy/paste into tests.
|
|
// Sample usage:
|
|
// test.html?get-keys
|
|
match = /(?:^\?|&)get-keys(&get-counts)?(?:&|$)/.exec(location.search);
|
|
if (match) {
|
|
collectKeys = true;
|
|
if (match[1]) {
|
|
collectCounts = true;
|
|
}
|
|
add_completion_callback(() => {
|
|
var metas = [];
|
|
var template = '<meta name="variant" content="?include=%s">';
|
|
if (collectCounts) {
|
|
template += ' <!--%s-->';
|
|
}
|
|
for (var key in keys) {
|
|
var meta = template.replace("%s", key);
|
|
if (collectCounts) {
|
|
meta = meta.replace("%s", keys[key]);
|
|
}
|
|
metas.push(meta);
|
|
}
|
|
var pre = document.createElement('pre');
|
|
pre.textContent = metas.join('\n') + '\n';
|
|
document.body.insertBefore(pre, document.body.firstChild);
|
|
document.getSelection().selectAllChildren(pre);
|
|
});
|
|
}
|
|
}
|
|
/**
|
|
* Check if `key` is in the subset specified in the URL.
|
|
* @param {string} key
|
|
* @returns {boolean}
|
|
*/
|
|
function shouldRunSubTest(key) {
|
|
if (key && subTestKeyPattern) {
|
|
var found = subTestKeyPattern.test(key);
|
|
if (exclude) {
|
|
return !found;
|
|
}
|
|
return found;
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* Only test a subset of tests with `?include=Foo` or `?exclude=Foo` in the URL.
|
|
* Can be used together with `<meta name="variant" content="...">`
|
|
* Sample usage:
|
|
* for (const test of tests) {
|
|
* subsetTestByKey("Foo", async_test, test.fn, test.name);
|
|
* }
|
|
*/
|
|
function subsetTestByKey(key, testFunc, ...args) {
|
|
if (collectKeys) {
|
|
if (collectCounts && key in keys) {
|
|
keys[key]++;
|
|
} else {
|
|
keys[key] = 1;
|
|
}
|
|
}
|
|
if (shouldRunSubTest(key)) {
|
|
return testFunc(...args);
|
|
}
|
|
return null;
|
|
}
|
|
self.shouldRunSubTest = shouldRunSubTest;
|
|
self.subsetTestByKey = subsetTestByKey;
|
|
})();
|