summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/resources
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/resources')
-rw-r--r--testing/web-platform/tests/resources/chromium/mock-pressure-service.js26
-rw-r--r--testing/web-platform/tests/resources/idlharness.js1
-rw-r--r--testing/web-platform/tests/resources/test/tests/unit/IdlArray/is_json_type.html1
-rw-r--r--testing/web-platform/tests/resources/test/tox.ini2
-rw-r--r--testing/web-platform/tests/resources/testdriver.js51
-rw-r--r--testing/web-platform/tests/resources/testharness.js133
-rw-r--r--testing/web-platform/tests/resources/testharnessreport.js25
7 files changed, 117 insertions, 122 deletions
diff --git a/testing/web-platform/tests/resources/chromium/mock-pressure-service.js b/testing/web-platform/tests/resources/chromium/mock-pressure-service.js
index bd0e32c567..016c6d97e7 100644
--- a/testing/web-platform/tests/resources/chromium/mock-pressure-service.js
+++ b/testing/web-platform/tests/resources/chromium/mock-pressure-service.js
@@ -65,26 +65,20 @@ class MockPressureService {
if (this.pressureServiceReadingTimerId_ != null)
this.stopPlatformCollector();
- // The following code for calculating the timestamp was taken from
- // https://source.chromium.org/chromium/chromium/src/+/main:third_party/
- // blink/web_tests/http/tests/resources/
- // geolocation-mock.js;l=131;drc=37a9b6c03b9bda9fcd62fc0e5e8016c278abd31f
-
- // The new Date().getTime() returns the number of milliseconds since the
- // UNIX epoch (1970-01-01 00::00:00 UTC), while |internalValue| of the
- // device.mojom.PressureUpdate represents the value of microseconds since
- // the Windows FILETIME epoch (1601-01-01 00:00:00 UTC). So add the delta
- // when sets the |internalValue|. See more info in //base/time/time.h.
- const windowsEpoch = Date.UTC(1601, 0, 1, 0, 0, 0, 0);
- const unixEpoch = Date.UTC(1970, 0, 1, 0, 0, 0, 0);
- // |epochDeltaInMs| equals to base::Time::kTimeTToMicrosecondsOffset.
- const epochDeltaInMs = unixEpoch - windowsEpoch;
-
this.pressureServiceReadingTimerId_ = self.setInterval(() => {
if (this.pressureUpdate_ === null || this.observers_.length === 0)
return;
+
+ // Because we cannot retrieve directly the timeOrigin internal in
+ // TimeTicks from Chromium, we need to create a timestamp that
+ // would help to test basic functionality.
+ // by multiplying performance.timeOrigin by 10 we make sure that the
+ // origin is higher than the internal time origin in TimeTicks.
+ // performance.now() allows us to have an increase matching the TimeTicks
+ // that would be read from the platform collector.
this.pressureUpdate_.timestamp = {
- internalValue: BigInt((new Date().getTime() + epochDeltaInMs) * 1000)
+ internalValue:
+ Math.round((performance.timeOrigin * 10) + performance.now()) * 1000
};
for (let observer of this.observers_)
observer.onPressureUpdated(this.pressureUpdate_);
diff --git a/testing/web-platform/tests/resources/idlharness.js b/testing/web-platform/tests/resources/idlharness.js
index 8f741b09b2..4cf19234af 100644
--- a/testing/web-platform/tests/resources/idlharness.js
+++ b/testing/web-platform/tests/resources/idlharness.js
@@ -566,6 +566,7 @@ IdlArray.prototype.is_json_type = function(type)
case "Uint8ClampedArray":
case "BigInt64Array":
case "BigUint64Array":
+ case "Float16Array":
case "Float32Array":
case "Float64Array":
case "ArrayBuffer":
diff --git a/testing/web-platform/tests/resources/test/tests/unit/IdlArray/is_json_type.html b/testing/web-platform/tests/resources/test/tests/unit/IdlArray/is_json_type.html
index 18e83a8e89..caea20067f 100644
--- a/testing/web-platform/tests/resources/test/tests/unit/IdlArray/is_json_type.html
+++ b/testing/web-platform/tests/resources/test/tests/unit/IdlArray/is_json_type.html
@@ -39,6 +39,7 @@
assert_false(idl.is_json_type(typeFrom("Uint8ClampedArray")));
assert_false(idl.is_json_type(typeFrom("BigInt64Array")));
assert_false(idl.is_json_type(typeFrom("BigUint64Array")));
+ assert_false(idl.is_json_type(typeFrom("Float16Array")));
assert_false(idl.is_json_type(typeFrom("Float32Array")));
assert_false(idl.is_json_type(typeFrom("Float64Array")));
assert_false(idl.is_json_type(typeFrom("ArrayBuffer")));
diff --git a/testing/web-platform/tests/resources/test/tox.ini b/testing/web-platform/tests/resources/test/tox.ini
index 12013a1a70..49603ef64b 100644
--- a/testing/web-platform/tests/resources/test/tox.ini
+++ b/testing/web-platform/tests/resources/test/tox.ini
@@ -1,5 +1,5 @@
[tox]
-envlist = py37,py38,py39,py310,py311
+envlist = py38,py39,py310,py311
skipsdist=True
[testenv]
diff --git a/testing/web-platform/tests/resources/testdriver.js b/testing/web-platform/tests/resources/testdriver.js
index 20140b2fc0..2d1a89690c 100644
--- a/testing/web-platform/tests/resources/testdriver.js
+++ b/testing/web-platform/tests/resources/testdriver.js
@@ -1023,6 +1023,49 @@
*/
get_virtual_sensor_information: function(sensor_type, context=null) {
return window.test_driver_internal.get_virtual_sensor_information(sensor_type, context);
+ },
+
+ /**
+ * Overrides device posture set by hardware.
+ *
+ * Matches the `Set device posture
+ * <https://w3c.github.io/device-posture/#set-device-posture>`_
+ * WebDriver command.
+ *
+ * @param {String} posture - A `DevicePostureType
+ * <https://w3c.github.io/device-posture/#dom-deviceposturetype>`_
+ * either "continuous" or "folded".
+ * @param {WindowProxy} [context=null] - Browsing context in which to
+ * run the call, or null for the
+ * current browsing context.
+ *
+ * @returns {Promise} Fulfilled when device posture is set.
+ * Rejected in case the WebDriver command errors out
+ * (including if a device posture of the given type
+ * does not exist).
+ */
+ set_device_posture: function(posture, context=null) {
+ return window.test_driver_internal.set_device_posture(posture, context);
+ },
+
+ /**
+ * Removes device posture override and returns device posture control
+ * back to hardware.
+ *
+ * Matches the `Clear device posture
+ * <https://w3c.github.io/device-posture/#clear-device-posture>`_
+ * WebDriver command.
+ *
+ * @param {WindowProxy} [context=null] - Browsing context in which to
+ * run the call, or null for the
+ * current browsing context.
+ *
+ * @returns {Promise} Fulfilled after the device posture override has
+ * been removed. Rejected in case the WebDriver
+ * command errors out.
+ */
+ clear_device_posture: function(context=null) {
+ return window.test_driver_internal.clear_device_posture(context);
}
};
@@ -1203,6 +1246,14 @@
async get_virtual_sensor_information(sensor_type, context=null) {
throw new Error("get_virtual_sensor_information() is not implemented by testdriver-vendor.js");
+ },
+
+ async set_device_posture(posture, context=null) {
+ throw new Error("set_device_posture() is not implemented by testdriver-vendor.js");
+ },
+
+ async clear_device_posture(context=null) {
+ throw new Error("clear_device_posture() is not implemented by testdriver-vendor.js");
}
};
})();
diff --git a/testing/web-platform/tests/resources/testharness.js b/testing/web-platform/tests/resources/testharness.js
index 1a6a4bb341..c5c375e172 100644
--- a/testing/web-platform/tests/resources/testharness.js
+++ b/testing/web-platform/tests/resources/testharness.js
@@ -4194,11 +4194,7 @@
status
],
],
- ["button",
- {"onclick": "let evt = new Event('__test_restart'); " +
- "let canceled = !window.dispatchEvent(evt);" +
- "if (!canceled) { location.reload() }"},
- "Rerun"]
+ ["button", {"id":"rerun"}, "Rerun"]
]];
if (harness_status.status === harness_status.ERROR) {
@@ -4230,6 +4226,13 @@
log.appendChild(render(summary_template, {num_tests:tests.length}, output_document));
+ output_document.getElementById("rerun").addEventListener("click",
+ function() {
+ let evt = new Event('__test_restart');
+ let canceled = !window.dispatchEvent(evt);
+ if (!canceled) { location.reload(); }
+ });
+
forEach(output_document.querySelectorAll("section#summary label"),
function(element)
{
@@ -4254,18 +4257,6 @@
});
});
- // This use of innerHTML plus manual escaping is not recommended in
- // general, but is necessary here for performance. Using textContent
- // on each individual <td> adds tens of seconds of execution time for
- // large test suites (tens of thousands of tests).
- function escape_html(s)
- {
- return s.replace(/\&/g, "&amp;")
- .replace(/</g, "&lt;")
- .replace(/"/g, "&quot;")
- .replace(/'/g, "&#39;");
- }
-
function has_assertions()
{
for (var i = 0; i < tests.length; i++) {
@@ -4296,81 +4287,63 @@
});
function get_asserts_output(test) {
+ const asserts_output = render(
+ ["details", {},
+ ["summary", {}, "Asserts run"],
+ ["table", {}, ""] ]);
+
var asserts = asserts_run_by_test.get(test);
if (!asserts) {
- return "No asserts ran";
+ asserts_output.querySelector("summary").insertAdjacentText("afterend", "No asserts ran");
+ return asserts_output;
}
- rv = "<table>";
- rv += asserts.map(assert => {
- var output_fn = "<strong>" + escape_html(assert.assert_name) + "</strong>(";
- var prefix_len = output_fn.length;
- var output_args = assert.args;
- var output_len = output_args.reduce((prev, current) => prev+current, prefix_len);
- if (output_len[output_len.length - 1] > 50) {
- output_args = output_args.map((x, i) =>
- (i > 0 ? " ".repeat(prefix_len) : "" )+ x + (i < output_args.length - 1 ? ",\n" : ""));
- } else {
- output_args = output_args.map((x, i) => x + (i < output_args.length - 1 ? ", " : ""));
- }
- output_fn += escape_html(output_args.join(""));
- output_fn += ')';
- var output_location;
+
+ const table = asserts_output.querySelector("table");
+ for (const assert of asserts) {
+ const status_class_name = status_class(Test.prototype.status_formats[assert.status]);
+ var output_fn = "(" + assert.args.join(", ") + ")";
if (assert.stack) {
- output_location = assert.stack.split("\n", 1)[0].replace(/@?\w+:\/\/[^ "\/]+(?::\d+)?/g, " ");
+ output_fn += "\n";
+ output_fn += assert.stack.split("\n", 1)[0].replace(/@?\w+:\/\/[^ "\/]+(?::\d+)?/g, " ");
}
- return "<tr class='overall-" +
- status_class(Test.prototype.status_formats[assert.status]) + "'>" +
- "<td class='" +
- status_class(Test.prototype.status_formats[assert.status]) + "'>" +
- Test.prototype.status_formats[assert.status] + "</td>" +
- "<td><pre>" +
- output_fn +
- (output_location ? "\n" + escape_html(output_location) : "") +
- "</pre></td></tr>";
+ table.appendChild(render(
+ ["tr", {"class":"overall-" + status_class_name},
+ ["td", {"class":status_class_name}, Test.prototype.status_formats[assert.status]],
+ ["td", {}, ["pre", {}, ["strong", {}, assert.assert_name], output_fn]] ]));
}
- ).join("\n");
- rv += "</table>";
- return rv;
+ return asserts_output;
}
- log.appendChild(document.createElementNS(xhtml_ns, "section"));
var assertions = has_assertions();
- var html = "<h2>Details</h2><table id='results' " + (assertions ? "class='assertions'" : "" ) + ">" +
- "<thead><tr><th>Result</th><th>Test Name</th>" +
- (assertions ? "<th>Assertion</th>" : "") +
- "<th>Message</th></tr></thead>" +
- "<tbody>";
- for (var i = 0; i < tests.length; i++) {
- var test = tests[i];
- html += '<tr class="overall-' +
- status_class(test.format_status()) +
- '">' +
- '<td class="' +
- status_class(test.format_status()) +
- '">' +
- test.format_status() +
- "</td><td>" +
- escape_html(test.name) +
- "</td><td>" +
- (assertions ? escape_html(get_assertion(test)) + "</td><td>" : "") +
- escape_html(test.message ? tests[i].message : " ") +
- (tests[i].stack ? "<pre>" +
- escape_html(tests[i].stack) +
- "</pre>": "");
+ const section = render(
+ ["section", {},
+ ["h2", {}, "Details"],
+ ["table", {"id":"results", "class":(assertions ? "assertions" : "")},
+ ["thead", {},
+ ["tr", {},
+ ["th", {}, "Result"],
+ ["th", {}, "Test Name"],
+ (assertions ? ["th", {}, "Assertion"] : ""),
+ ["th", {}, "Message" ]]],
+ ["tbody", {}]]]);
+
+ const tbody = section.querySelector("tbody");
+ for (const test of tests) {
+ const status = test.format_status();
+ const status_class_name = status_class(status);
+ tbody.appendChild(render(
+ ["tr", {"class":"overall-" + status_class_name},
+ ["td", {"class":status_class_name}, status],
+ ["td", {}, test.name],
+ (assertions ? ["td", {}, get_assertion(test)] : ""),
+ ["td", {},
+ test.message ?? "",
+ ["pre", {}, test.stack ?? ""]]]));
if (!(test instanceof RemoteTest)) {
- html += "<details><summary>Asserts run</summary>" + get_asserts_output(test) + "</details>"
+ tbody.lastChild.lastChild.appendChild(get_asserts_output(test));
}
- html += "</td></tr>";
- }
- html += "</tbody></table>";
- try {
- log.lastChild.innerHTML = html;
- } catch (e) {
- log.appendChild(document.createElementNS(xhtml_ns, "p"))
- .textContent = "Setting innerHTML for the log threw an exception.";
- log.appendChild(document.createElementNS(xhtml_ns, "pre"))
- .textContent = html;
}
+ log.appendChild(section);
};
/*
diff --git a/testing/web-platform/tests/resources/testharnessreport.js b/testing/web-platform/tests/resources/testharnessreport.js
index e5cb40fe0e..405a2d8b06 100644
--- a/testing/web-platform/tests/resources/testharnessreport.js
+++ b/testing/web-platform/tests/resources/testharnessreport.js
@@ -14,31 +14,6 @@
* parameters they are called with see testharness.js
*/
-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