ladybird/Tests/LibWeb/Text/input/include.js

135 lines
3.4 KiB
JavaScript

var __outputElement = null;
let __alreadyCalledTest = false;
let __originalURL = null;
function __preventMultipleTestFunctions() {
if (__alreadyCalledTest) {
throw new Error("You must only call test() or asyncTest() once per page");
}
__alreadyCalledTest = true;
}
if (globalThis.internals === undefined) {
internals = {
signalTextTestIsDone: function () {},
spoofCurrentURL: function (url) {},
};
}
function __finishTest() {
if (__originalURL) {
internals.spoofCurrentURL(__originalURL);
}
internals.signalTextTestIsDone(__outputElement.innerText);
}
function spoofCurrentURL(url) {
if (__originalURL === null) {
__originalURL = document.location.href;
}
internals.spoofCurrentURL(url);
}
function println(s) {
__outputElement.appendChild(document.createTextNode(s + "\n"));
}
function printElement(e) {
let element_string = `<${e.nodeName} `;
if (e.id) element_string += `id="${e.id}" `;
element_string += ">";
println(element_string);
}
function animationFrame() {
const { promise, resolve } = Promise.withResolvers();
requestAnimationFrame(resolve);
return promise;
}
function timeout(ms) {
const { promise, resolve } = Promise.withResolvers();
setTimeout(resolve, ms);
return promise;
}
const __testErrorHandlerController = new AbortController();
window.addEventListener(
"error",
event => {
println(`Uncaught Error In Test: ${event.message}`);
__finishTest();
},
{ signal: __testErrorHandlerController.signal }
);
function removeTestErrorHandler() {
__testErrorHandlerController.abort();
}
document.addEventListener("DOMContentLoaded", function () {
__outputElement = document.createElement("pre");
__outputElement.setAttribute("id", "out");
document.body.appendChild(__outputElement);
});
function test(f) {
__preventMultipleTestFunctions();
document.addEventListener("DOMContentLoaded", f);
window.addEventListener("load", () => {
__finishTest();
});
}
function asyncTest(f) {
const done = () => {
__preventMultipleTestFunctions();
__finishTest();
};
document.addEventListener("DOMContentLoaded", () => {
f(done);
});
}
function promiseTest(f) {
document.addEventListener("DOMContentLoaded", () => {
f().then(() => {
__preventMultipleTestFunctions();
__finishTest();
});
});
}
class HTTPTestServer {
constructor(baseURL) {
this.baseURL = baseURL;
}
async createEcho(method, path, options) {
const result = await fetch(`${this.baseURL}/echo`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ ...options, method, path }),
});
if (!result.ok) {
throw new Error("Error creating echo: " + result.statusText);
}
return `${this.baseURL}${path}`;
}
getStaticURL(path) {
return `${this.baseURL}/static/${path}`;
}
}
const __httpTestServer = (function () {
if (globalThis.internals && globalThis.internals.getEchoServerPort)
return new HTTPTestServer(`http://localhost:${internals.getEchoServerPort()}`);
return null;
})();
function httpTestServer() {
if (!__httpTestServer)
throw new Error("window.internals must be exposed to use HTTPTestServer");
return __httpTestServer;
}