Commit 37602af1 authored by Stephen McGruer's avatar Stephen McGruer Committed by Commit Bot

Roll WPT js scripts into Chromium

This rolls testharness.js, idlharness.js, and webidl2.js from the
external copy in external/wpt/resources/ to the internal copy in
resources/, bringing us up to WPT SHA e343467e.

Note that the webidl2.js changes are just tab characters present in the
original file that I accidentally cleaned into spaces in the previous
roll.

Bug: 1067618, 1066131
Change-Id: I1ccdf13418e10ace29564695d3dd20a738a7a3eb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2135540Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarRobert Ma <robertma@chromium.org>
Commit-Queue: Stephen McGruer <smcgruer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756371}
parent 14103155
......@@ -30,6 +30,7 @@ _EXCLUDED_PATHS = (
r'^third_party[\\/]blink[\\/]tools[\\/]blinkpy[\\/]third_party[\\/]wpt[\\/]wpt[\\/].*',
r'^third_party[\\/]blink[\\/]web_tests[\\/]external[\\/]wpt[\\/]tools[\\/].*',
r'^third_party[\\/]blink[\\/]web_tests[\\/]external[\\/]wpt[\\/]resources[\\/]webidl2[\\/].*',
r'^third_party[\\/]blink[\\/]web_tests[\\/]resources[\\/]webidl2.js',
)
......
......@@ -37,7 +37,7 @@ function setup(w) {
}
test_with_window((w) => {
assert_throws_dom_exception(w, 'InvalidCharacterError', () => {
assert_throws_dom('InvalidCharacterError', w.DOMException, () => {
w.document.createElement('.invalid.name.');
});
}, 'createElement 1. If localName does not match the Name production, then throw an InvalidCharacterError');
......
......@@ -93,9 +93,9 @@
function promise_rejects_with_dom_exception_syntax_error(global_context, test, promise, description) {
return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) {
assert_throws_dom_exception(global_context, 'SYNTAX_ERR', function () { throw e; })
assert_throws_dom('SYNTAX_ERR', global_context.DOMException, function () { throw e; })
});
}
}
})();
</script>
</body>
......@@ -19,7 +19,7 @@ test_with_window((w) => {
'a.b-c'
];
valid_custom_element_names.forEach((val) => {
assert_throws_dom_exception(w, 'NotSupportedError', () => {
assert_throws_dom('NotSupportedError', w.DOMException, () => {
w.customElements.define('a-a', A, { extends: val });
}, `having valid custon element name element interface (${val}) ` +
'for extends should throw a NotSupportedError')
......@@ -38,7 +38,7 @@ test_with_window((w) => {
42
]
HTMLUnknownElement_names.forEach((val) => {
assert_throws_dom_exception(w, 'NotSupportedError', () => {
assert_throws_dom('NotSupportedError', w.DOMException, () => {
w.customElements.define('a-a', A, { extends: val });
}, `having element interface for extends (${val}) undefined in specs` +
' should throw a NotSupportedError');
......
......@@ -47,7 +47,7 @@ test_with_window((w) => {
];
class X extends w.HTMLElement {}
invalid_names.forEach((name) => {
assert_throws_dom_exception(w, 'SYNTAX_ERR', () => {
assert_throws_dom('SYNTAX_ERR', w.DOMException, () => {
w.customElements.define(name, X);
})
});
......@@ -57,7 +57,7 @@ test_with_window((w) => {
class X extends w.HTMLElement {}
class Y extends w.HTMLElement {}
w.customElements.define('a-a', X);
assert_throws_dom_exception(w, 'NotSupportedError', () => {
assert_throws_dom('NotSupportedError', w.DOMException, () => {
w.customElements.define('a-a', Y);
}, 'defining an element with a name that is already defined should throw ' +
'a NotSupportedError');
......@@ -68,7 +68,7 @@ test_with_window((w) => {
let X = (function () {}).bind({});
Object.defineProperty(X, 'prototype', {
get() {
assert_throws_dom_exception(w, 'NotSupportedError', () => {
assert_throws_dom('NotSupportedError', w.DOMException, () => {
w.customElements.define('a-a', Y);
}, 'defining an element with a name that is being defined should ' +
'throw a NotSupportedError');
......@@ -82,7 +82,7 @@ test_with_window((w) => {
test_with_window((w) => {
class X extends w.HTMLElement {}
w.customElements.define('a-a', X);
assert_throws_dom_exception(w, 'NotSupportedError', () => {
assert_throws_dom('NotSupportedError', w.DOMException, () => {
w.customElements.define('a-b', X);
}, 'defining an element with a constructor that is already in the ' +
'registry should throw a NotSupportedError');
......@@ -117,7 +117,7 @@ test_with_window((w) => {
let X = (function () {}).bind({});
Object.defineProperty(X, 'prototype', {
get() {
assert_throws_dom_exception(w, 'NotSupportedError', () => {
assert_throws_dom('NotSupportedError', w.DOMException, () => {
w.customElements.define('second-name', X);
}, 'defining an element with a constructor that is being defined ' +
'should throw a NotSupportedError');
......@@ -132,7 +132,7 @@ test_with_window((w) => {
let X = (function () {}).bind({});
Object.defineProperty(X, 'prototype', {
get() {
assert_throws_dom_exception(w, 'NotSupportedError', () => {
assert_throws_dom('NotSupportedError', w.DOMException, () => {
w.customElements.define('second-name', class extends HTMLElement { });
}, 'defining an element while element definition is running should ' +
'throw a NotSupportedError');
......@@ -189,7 +189,7 @@ test_with_window((w) => {
class C extends w.HTMLElement {}
w.customElements.define('a-a', C);
assert_throws_dom_exception(w, 'SYNTAX_ERR', () => {
assert_throws_dom('SYNTAX_ERR', w.DOMException, () => {
let invalid_name = 'annotation-xml';
let reused_constructor = C;
w.customElements.define(invalid_name, reused_constructor);
......
......@@ -21,22 +21,6 @@ function test_with_window(f, name, srcdoc) {
}, name);
}
// TODO(1066131): After https://github.com/web-platform-tests/wpt/pull/21876 is
// rolled into Chromium, this function can be replaced with:
// assert_throws_dom(code, global_context.DOMException, func, description);
function assert_throws_dom_exception(global_context, code, func, description) {
let exception;
assert_throws_dom(code, () => {
try {
func.call(this);
} catch(e) {
exception = e;
throw e;
}
}, description);
assert_true(exception instanceof global_context.DOMException, 'DOMException on the appropriate window');
}
function assert_array_equals_callback_invocations(actual, expected, description) {
assert_equals(actual.length, expected.length);
for (let len=actual.length, i=0; i<len; ++i) {
......@@ -80,7 +64,7 @@ function assert_reports_impl(w, func) {
// with the expected DOMException.
function assert_reports_dom(w, expected_error, func, description) {
const e = assert_reports_impl(w, func);
assert_throws_dom(expected_error, () => { throw e; }, description);
assert_throws_dom(expected_error, w.DOMException, () => { throw e; }, description);
}
// Asserts that func synchronously invokes the error event handler in w
......
......@@ -10,7 +10,7 @@ test_with_window((w) => {
class X extends w.HTMLElement {}
w.customElements.define('new-old', X);
assert_throws_dom("NotSupportedError", () => {
assert_throws_dom("NotSupportedError", w.DOMException, () => {
w.document.registerElement('new-old', {prototype: X.prototype});
}, '"registering" (v0) a name already "defined" should throw');
......@@ -18,7 +18,7 @@ test_with_window((w) => {
prototype: Object.create(w.HTMLElement.prototype)
});
class Y extends w.HTMLElement {}
assert_throws_dom("NotSupportedError", () => {
assert_throws_dom("NotSupportedError", w.DOMException, () => {
w.customElements.define('old-new', Y);
}, '"defining" (v1) a name already "registered" (v0) should throw');
}, 'Overlapping old and new-style custom elements are not allowed');
......
......@@ -51,7 +51,7 @@ t.step(() => {
// Check that an exception is properly raised when attempting to
// add a duplicate string type.
assert_throws_dom('NotSupportedError',
assert_throws_dom('NotSupportedError', selection.window.DOMException,
() => items.add('Moo', 'text/plain'),
'Adding another text/plain data');
});
......
......@@ -163,6 +163,7 @@ withFrame(t.step_func(function (frame) {
var documentB = documentA.implementation.createDocument(null, '');
assert_throws_dom(
'NOT_SUPPORTED_ERR',
frame.contentWindow.DOMException,
function() { documentB.registerElement('x-a'); });
// This document will not process custom elements because there is
......@@ -170,6 +171,7 @@ withFrame(t.step_func(function (frame) {
var documentC = documentB.implementation.createHTMLDocument();
assert_throws_dom(
'NOT_SUPPORTED_ERR',
frame.contentWindow.DOMException,
function() { documentC.registerElement('x-b'); });
// Nor this one.
......@@ -177,6 +179,7 @@ withFrame(t.step_func(function (frame) {
'http://www.w3.org/1999/xhtml', 'html');
assert_throws_dom(
'NOT_SUPPORTED_ERR',
frame.contentWindow.DOMException,
function() { documentD.registerElement('x-c'); });
frame.remove();
......
This is a testharness.js-based test.
PASS applyConstraints() sets the value of a constraint set by getUserMedia()
FAIL Attempting to change the deviceId with applyConstraints() fails promise_reject_js: function "function OverconstrainedError() { [native code] }" is not an Error subtype
FAIL Attempting to change the deviceId with applyConstraints() fails promise_rejects_js: function "function OverconstrainedError() { [native code] }" is not an Error subtype
PASS An unsupported constraint is ignored by applyConstraints()
PASS All valid keys are returned for complex constraints
PASS Simple integer
......
......@@ -9,8 +9,9 @@ async_test(function(t) {
iframe.onload = t.step_func_done(function() {
var video = iframe.contentDocument.getElementById("v");
var iframeDOMException = iframe.contentWindow.DOMException;
iframe.remove();
assert_throws_dom("NotSupportedError",
assert_throws_dom("NotSupportedError", iframeDOMException,
function() { video.captureStream(1.0); },
"Failed to execute 'captureStream' on 'HTMLMediaElement': The context has been destroyed.");
});
......
......@@ -16,8 +16,9 @@ promise_test(async t => {
await frameLoadedPromise;
const video = await loadVideo(frame.contentDocument, '../content/test.ogv');
const frameDOMException = frame.contentWindow.DOMException;
document.body.removeChild(frame);
return promise_rejects_dom(t, 'InvalidStateError',
return promise_rejects_dom(t, 'InvalidStateError', frameDOMException,
requestPictureInPictureWithTrustedClick(video));
}, 'request Picture-in-Picture rejects when frame is detached');
</script>
......@@ -18,8 +18,9 @@ promise_test(async t => {
await frameLoadedPromise;
const element = frame.contentDocument.createElement('div');
const frameDOMException = frame.contentWindow.DOMException;
document.body.removeChild(frame);
return promise_rejects_dom(t, 'InvalidStateError',
return promise_rejects_dom(t, 'InvalidStateError', frameDOMException,
requestPictureInPictureWithTrustedClick(element, { height: 1, width: 1 }));
}, 'request Picture-in-Picture rejects when frame is detached');
</script>
This is a testharness.js-based test.
PASS Continuations across a block -20
FAIL Continuations across a block -15 resources/testharness.js:1867:25)
FAIL Continuations across a block -15 resources/testharness.js:1958:25)
expected <style>* { font: 20px Ahem; }</style><p>^AAAAA</p><p>|BBBBB</p>,
but got <style>* { font: 20px Ahem; }</style><p>^AAAAA</p><p>BB|BBB</p>,
sameupto <style>* { font: 20px Ahem; }</style><p>^AAAAA</p><p>
......
......@@ -2406,10 +2406,7 @@ IdlInterface.prototype.test_member_operation = function(member)
if (!shouldRunSubTest(this.name)) {
return;
}
var a_test = subsetTestByKey(this.name, async_test, this.name + " interface: operation " + member.name +
"(" + member.arguments.map(
function(m) {return m.idlType.idlType; } ).join(", ")
+")");
var a_test = subsetTestByKey(this.name, async_test, this.name + " interface: operation " + member);
a_test.step(function()
{
// This function tests WebIDL as of 2015-12-29.
......@@ -2749,10 +2746,19 @@ IdlInterface.prototype.test_object = function(desc)
exception = e;
}
var expected_typeof =
this.members.some(function(member) { return member.legacycaller; })
? "function"
: "object";
var expected_typeof;
if (this.name == "HTMLAllCollection")
{
// Result of [[IsHTMLDDA]] slot
expected_typeof = "undefined";
} else if (this.members.some(function(member) { return member.legacycaller; }))
{
expected_typeof = "function";
}
else
{
expected_typeof = "object";
}
this.test_primary_interface_of(desc, obj, exception, expected_typeof);
......@@ -2883,11 +2889,6 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
|| member.type == "operation")
&& member.name)
{
var described_name = member.name;
if (member.type == "operation")
{
described_name += "(" + member.arguments.map(arg => arg.idlType.idlType).join(", ") + ")";
}
subsetTestByKey(this.name, test, function()
{
assert_equals(exception, null, "Unexpected exception when evaluating object");
......@@ -2919,7 +2920,15 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
}
if (!thrown)
{
this.array.assert_type_is(property, member.idlType);
if (this.name == "Document" && member.name == "all")
{
// Result of [[IsHTMLDDA]] slot
assert_equals(typeof property, "undefined");
}
else
{
this.array.assert_type_is(property, member.idlType);
}
}
}
if (member.type == "operation")
......@@ -2927,16 +2936,17 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
assert_equals(typeof obj[member.name], "function");
}
}
}.bind(this), this.name + " interface: " + desc + ' must inherit property "' + described_name + '" with the proper type');
}.bind(this), this.name + " interface: " + desc + ' must inherit property "' + member + '" with the proper type');
}
// TODO: This is wrong if there are multiple operations with the same
// identifier.
// TODO: Test passing arguments of the wrong type.
if (member.type == "operation" && member.name && member.arguments.length)
{
var a_test = subsetTestByKey(this.name, async_test, this.name + " interface: calling " + member.name +
"(" + member.arguments.map(function(m) { return m.idlType.idlType; }).join(", ") +
") on " + desc + " with too few arguments must throw TypeError");
var description =
this.name + " interface: calling " + member + " on " + desc +
" with too few arguments must throw TypeError";
var a_test = subsetTestByKey(this.name, async_test, description);
a_test.step(function()
{
assert_equals(exception, null, "Unexpected exception when evaluating object");
......@@ -3150,6 +3160,36 @@ IdlInterfaceMember.prototype.is_to_json_regular_operation = function() {
return this.type == "operation" && this.special !== "static" && this.name == "toJSON";
};
IdlInterfaceMember.prototype.toString = function() {
function formatType(type) {
var result;
if (type.generic) {
result = type.generic + "<" + type.idlType.map(formatType).join(", ") + ">";
} else if (type.union) {
result = "(" + type.subtype.map(formatType).join(" or ") + ")";
} else {
result = type.idlType;
}
if (type.nullable) {
result += "?"
}
return result;
}
if (this.type === "operation") {
var args = this.arguments.map(function(m) {
return [
m.optional ? "optional " : "",
formatType(m.idlType),
m.variadic ? "..." : "",
].join("");
}).join(", ");
return this.name + "(" + args + ")";
}
return this.name;
}
/// Internal helper functions ///
function create_suitable_object(type)
{
......@@ -3294,17 +3334,10 @@ IdlNamespace.prototype.test_member_operation = function(member)
if (!shouldRunSubTest(this.name)) {
return;
}
var args = member.arguments.map(function(a) {
var s = a.idlType.idlType;
if (a.variadic) {
s += '...';
}
return s;
}).join(", ");
var a_test = subsetTestByKey(
this.name,
async_test,
this.name + ' namespace: operation ' + member.name + '(' + args + ')');
this.name + ' namespace: operation ' + member);
a_test.step(function() {
assert_own_property(
self[this.name],
......
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["WebIDL2"] = factory();
else
root["WebIDL2"] = factory();
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["WebIDL2"] = factory();
else
root["WebIDL2"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
......@@ -2870,4 +2870,4 @@ function validate(ast) {
/***/ })
/******/ ]);
});
//# sourceMappingURL=webidl2.js.map
//# sourceMappingURL=webidl2.js.map
\ No newline at end of file
CONSOLE ERROR: line 3346: Uncaught Error: assert_equals: Normal script execution order comparison expected "Inline1;Sync1;EndOfBody;DOMContentLoaded;Async1;" but got "EndOfBody;Inline1;Sync1;DOMContentLoaded;Async1;"
CONSOLE ERROR: line 3421: Uncaught Error: assert_equals: Normal script execution order comparison expected "Inline1;Sync1;EndOfBody;DOMContentLoaded;Async1;" but got "EndOfBody;Inline1;Sync1;DOMContentLoaded;Async1;"
This is a testharness.js-based test.
FAIL Async Script Execution Order (wrt possibly deferred Synchronous Script) Uncaught Error: assert_equals: Normal script execution order comparison expected "Inline1;Sync1;EndOfBody;DOMContentLoaded;Async1;" but got "EndOfBody;Inline1;Sync1;DOMContentLoaded;Async1;"
Harness: the test ran to completion.
......
CONSOLE ERROR: line 3346: Uncaught Error: assert_equals: Normal defer script execution order comparison expected "Inline1;Sync1;Inline2;Sync2;EndOfBody;Defer1;Defer2;DOMContentLoaded;" but got "EndOfBody;Inline1;Sync1;Inline2;Sync2;Defer1;Defer2;DOMContentLoaded;"
CONSOLE ERROR: line 3421: Uncaught Error: assert_equals: Normal defer script execution order comparison expected "Inline1;Sync1;Inline2;Sync2;EndOfBody;Defer1;Defer2;DOMContentLoaded;" but got "EndOfBody;Inline1;Sync1;Inline2;Sync2;Defer1;Defer2;DOMContentLoaded;"
This is a testharness.js-based test.
FAIL Defer Script Execution Order Uncaught Error: assert_equals: Normal defer script execution order comparison expected "Inline1;Sync1;Inline2;Sync2;EndOfBody;Defer1;Defer2;DOMContentLoaded;" but got "EndOfBody;Inline1;Sync1;Inline2;Sync2;Defer1;Defer2;DOMContentLoaded;"
Harness: the test ran to completion.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment