mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-30 04:39:06 +00:00
Tests/LibWeb: Import the WPT URL test suite
This commit is contained in:
parent
20890d7b70
commit
2022c9e679
Notes:
github-actions[bot]
2025-03-18 09:01:32 +00:00
Author: https://github.com/shannonbooth
Commit: 2022c9e679
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3869
Reviewed-by: https://github.com/gmta ✅
Reviewed-by: https://github.com/vishalbiswas
59 changed files with 31488 additions and 0 deletions
|
@ -0,0 +1,83 @@
|
|||
(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;
|
||||
})();
|
Loading…
Add table
Add a link
Reference in a new issue