summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/tools/wave/resources
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/tools/wave/resources
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/tools/wave/resources')
-rw-r--r--testing/web-platform/tests/tools/wave/resources/testharnessreport.js284
1 files changed, 284 insertions, 0 deletions
diff --git a/testing/web-platform/tests/tools/wave/resources/testharnessreport.js b/testing/web-platform/tests/tools/wave/resources/testharnessreport.js
new file mode 100644
index 0000000000..394b4bf3a8
--- /dev/null
+++ b/testing/web-platform/tests/tools/wave/resources/testharnessreport.js
@@ -0,0 +1,284 @@
+/* global add_completion_callback */
+/* global setup */
+
+/*
+ * This file is intended for vendors to implement code needed to integrate
+ * testharness.js tests with their own test systems.
+ *
+ * Typically test system integration will attach callbacks when each test has
+ * run, using add_result_callback(callback(test)), or when the whole test file
+ * has completed, using
+ * add_completion_callback(callback(tests, harness_status)).
+ *
+ * For more documentation about the callback functions and the
+ * parameters they are called with see testharness.js
+ */
+
+/*
+ * If the query parameter token is available means that the test was loaded by
+ * the WAVE test runner and the results need to be reported to the server using
+ * the provided token to identify the session associated this token.
+ */
+if (location.search && location.search.indexOf("token=") != -1) {
+ var __WAVE__HOSTNAME = location.hostname;
+ var __WAVE__PORT = location.port;
+ var __WAVE__PROTOCOL = location.protocol.replace(/:/, "");
+ var __WAVE__QUERY = location.search;
+ var queryParameters = {};
+ var keysAndValues = location.search.replace("?", "").split("&");
+ for (var i = 0; i < keysAndValues.length; i++) {
+ var key = keysAndValues[i].split("=")[0];
+ var value = keysAndValues[i].split("=")[1];
+ queryParameters[key] = value;
+ }
+ var __HTTPS_PORT = parseInt(queryParameters["https_port"] || 443);
+ var __WAVE__TIMEOUT = parseInt(queryParameters["timeout"] || 65000);
+ var __WAVE__WEB_ROOT = queryParameters["web_root"] || "/_wave/";
+ var __WAVE__TOKEN = queryParameters["token"] || null;
+ var __WAVE__TEST = location.pathname;
+ var nextUrl = null;
+ var resultSent = false;
+ var screenConsole;
+
+ try {
+ var documentRoot = document.body ? document.body : document.documentElement;
+ documentRoot.style["background-color"] = "#FFF";
+ window.open = function () {
+ logToConsole(
+ "window.open() is overridden in testharnessreport.js and has not effect"
+ );
+ var dummyWin = {
+ close: function () {
+ logToConsole(
+ "dummyWindow.close() in testharnessreport.js and has not effect"
+ );
+ },
+ };
+ return dummyWin;
+ };
+ window.close = function () {
+ logToConsole(
+ "window.close() is overridden in testharnessreport.js and has not effect"
+ );
+ };
+ } catch (err) {}
+
+ setTimeout(function () {
+ loadNext();
+ }, __WAVE__TIMEOUT);
+
+ function logToConsole() {
+ var text = "";
+ for (var i = 0; i < arguments.length; i++) {
+ text += arguments[i] + " ";
+ }
+ if (console && console.log) {
+ console.log(text);
+ }
+ if (screenConsole) {
+ try {
+ text = text.replace(/ /gm, "&nbsp;");
+ text = text.replace(/\n/gm, "<br/>");
+ screenConsole.innerHTML += "<br/>" + text;
+ } catch (error) {
+ screenConsole.innerText += "\n" + text;
+ }
+ }
+ }
+
+ function dump_and_report_test_results(tests, status) {
+ var results_element = document.createElement("script");
+ results_element.type = "text/json";
+ results_element.id = "__testharness__results__";
+ var test_results = tests.map(function (x) {
+ return {
+ name: x.name,
+ status: x.status,
+ message: x.message,
+ stack: x.stack,
+ };
+ });
+ var data = {
+ test: window.location.href,
+ tests: test_results,
+ status: status.status,
+ message: status.message,
+ stack: status.stack,
+ };
+ results_element.textContent = JSON.stringify(data);
+
+ // To avoid a HierarchyRequestError with XML documents, ensure that 'results_element'
+ // is inserted at a location that results in a valid document.
+ var parent = document.body
+ ? document.body // <body> is required in XHTML documents
+ : document.documentElement; // fallback for optional <body> in HTML5, SVG, etc.
+
+ parent.appendChild(results_element);
+
+ screenConsole = document.getElementById("console");
+ if (!screenConsole) {
+ screenConsole = document.createElement("div");
+ screenConsole.setAttribute("id", "console");
+ screenConsole.setAttribute("style", "font-family: monospace; padding: 5px");
+ parent.appendChild(screenConsole);
+ }
+ window.onerror = logToConsole;
+
+ finishWptTest(data);
+ }
+
+ function finishWptTest(data) {
+ logToConsole("Creating result ...");
+ data.test = __WAVE__TEST;
+ createResult(
+ __WAVE__TOKEN,
+ data,
+ function () {
+ logToConsole("Result created.");
+ loadNext();
+ },
+ function () {
+ logToConsole("Failed to create result.");
+ logToConsole("Trying alternative method ...");
+ createResultAlt(__WAVE__TOKEN, data);
+ }
+ );
+ }
+
+ function loadNext() {
+ logToConsole("Loading next test ...");
+ readNextTest(
+ __WAVE__TOKEN,
+ function (url) {
+ logToConsole("Redirecting to " + url);
+ location.href = url;
+ },
+ function () {
+ logToConsole("Could not load next test.");
+ logToConsole("Trying alternative method ...");
+ readNextAlt(__WAVE__TOKEN);
+ }
+ );
+ }
+
+ function readNextTest(token, onSuccess, onError) {
+ sendRequest(
+ "GET",
+ "api/tests/" + token + "/next",
+ null,
+ null,
+ function (response) {
+ var jsonObject = JSON.parse(response);
+ onSuccess(jsonObject.next_test);
+ },
+ onError
+ );
+ }
+
+ function readNextAlt(token) {
+ location.href =
+ location.protocol +
+ "//" +
+ location.host +
+ getWaveUrl("next.html?token=" + token);
+ }
+
+ function createResult(token, result, onSuccess, onError) {
+ sendRequest(
+ "POST",
+ "api/results/" + token,
+ {
+ "Content-Type": "application/json",
+ },
+ JSON.stringify(result),
+ function () {
+ onSuccess();
+ },
+ onError
+ );
+ }
+
+ function createResultAlt(token, result) {
+ location.href =
+ __WAVE__WEB_ROOT +
+ "submitresult.html" +
+ "?token=" +
+ token +
+ "&result=" +
+ encodeURIComponent(JSON.stringify(result));
+ }
+
+ function sendRequest(method, uri, headers, data, onSuccess, onError) {
+ var url = getWaveUrl(uri);
+ url = location.protocol + "//" + location.host + url;
+ var xhr = new XMLHttpRequest();
+ xhr.addEventListener("load", function () {
+ onSuccess(xhr.response);
+ });
+ xhr.addEventListener("error", function () {
+ if (onError) onError();
+ });
+ logToConsole("Sending", method, 'request to "' + url + '"');
+ xhr.open(method, url, true);
+ if (headers) {
+ for (var header in headers) {
+ xhr.setRequestHeader(header, headers[header]);
+ }
+ }
+ xhr.send(data);
+ }
+
+ function getWaveUrl(uri) {
+ var url = __WAVE__WEB_ROOT + uri;
+ return url;
+ }
+
+ add_completion_callback(dump_and_report_test_results);
+} else {
+ function dump_test_results(tests, status) {
+ var results_element = document.createElement("script");
+ results_element.type = "text/json";
+ results_element.id = "__testharness__results__";
+ var test_results = tests.map(function (x) {
+ return {
+ name: x.name,
+ status: x.status,
+ message: x.message,
+ stack: x.stack,
+ };
+ });
+ var data = {
+ test: window.location.href,
+ tests: test_results,
+ status: status.status,
+ message: status.message,
+ stack: status.stack,
+ };
+ results_element.textContent = JSON.stringify(data);
+
+ // To avoid a HierarchyRequestError with XML documents, ensure that 'results_element'
+ // is inserted at a location that results in a valid document.
+ var parent = document.body
+ ? document.body // <body> is required in XHTML documents
+ : document.documentElement; // fallback for optional <body> in HTML5, SVG, etc.
+
+ parent.appendChild(results_element);
+ }
+
+ add_completion_callback(dump_test_results);
+
+ /* If the parent window has a testharness_properties object,
+ * we use this to provide the test settings. This is used by the
+ * default in-browser runner to configure the timeout and the
+ * rendering of results
+ */
+ try {
+ if (window.opener && "testharness_properties" in window.opener) {
+ /* If we pass the testharness_properties object as-is here without
+ * JSON stringifying and reparsing it, IE fails & emits the message
+ * "Could not complete the operation due to error 80700019".
+ */
+ setup(JSON.parse(JSON.stringify(window.opener.testharness_properties)));
+ }
+ } catch (e) {}
+}