Commit ae813dd6 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 to WPT
SHA 39b27a7875 (https://github.com/web-platform-tests/wpt/commit/39b27a7875).
The primary purpose is to consume the assert_throws/promise_rejects API
removals. It does not roll to WPT HEAD as shortly after this SHA an API
change occurs in the assert_throws_dom/promise_rejects_dom APIs that
will require work in Chromium to consume.

Some fixes done alongside:
  * One use of assert_throws fixed in payment-request-interface.html
  * Three expected files that reference line numbers in testharness.js
    updated for the new version.

Bug: 1051932
Change-Id: I9cc1c8235ce88262a6a7a2905d0996ba64fe9866
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2129897Reviewed-by: default avatarLuke Z <lpz@chromium.org>
Commit-Queue: Stephen McGruer <smcgruer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756241}
parent abf88f9e
......@@ -273,84 +273,84 @@ promise_test(function(t) {
return promise_rejects_dom(t, 'InvalidStateError', new PaymentRequest([{'supportedMethods': 'foo'}], buildDetails()).abort());
}, 'abort() without show() should reject with error');
generate_tests(assert_throws, [
['PaymentRequest constructor should throw for incorrect parameter types.', new TypeError(), function() {
generate_tests(assert_throws_js, [
['PaymentRequest constructor should throw for incorrect parameter types.', TypeError, function() {
new PaymentRequest('', '', '')
}],
['PaymentRequest constructor should throw for undefined required parameters.', new TypeError(), function() {
['PaymentRequest constructor should throw for undefined required parameters.', TypeError, function() {
new PaymentRequest(undefined, undefined)
}],
['PaymentRequest constructor should throw for null required parameter.', new TypeError(), function() {
['PaymentRequest constructor should throw for null required parameter.', TypeError, function() {
new PaymentRequest(null, null)
}],
['Empty list of supported payment method identifiers should throw TypeError.', new TypeError(), function() {
['Empty list of supported payment method identifiers should throw TypeError.', TypeError, function() {
new PaymentRequest([], buildDetails())
}],
['Empty supported payment method identifier should throw RangeError.', new RangeError(), function() {
['Empty supported payment method identifier should throw RangeError.', RangeError, function() {
new PaymentRequest([{'supportedMethods': ''}], buildDetails())
}],
['Absence of total should throw TypeError.', new TypeError(), function() {
['Absence of total should throw TypeError.', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], {'displayItems': [buildItem()]})
}],
['Negative total value should throw a TypeError.', new TypeError(), function() {
['Negative total value should throw a TypeError.', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], buildDetails('total', {'value': '-0.01'}))
}],
['Negative total value in PaymentDetailsModifier should throw a TypeError.', new TypeError(), function() {
['Negative total value in PaymentDetailsModifier should throw a TypeError.', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], {'total': buildItem(), 'modifiers': [{'supportedMethods': 'foo', 'total': buildItem({'value': '-0.01'})}]})
}],
['Undefined supportedMethods in modifiers should throw TypeError.', new TypeError(), function() {
['Undefined supportedMethods in modifiers should throw TypeError.', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], {'total': buildItem(), 'modifiers': [{'supportedMethods': undefined}]})
}],
['Empty supportedMethods in modifiers should throw RangeError.', new RangeError(), function() {
['Empty supportedMethods in modifiers should throw RangeError.', RangeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], {'total': buildItem(), 'modifiers': [{'supportedMethods': ''}]})
}],
['Absence of supportedMethods in modifiers should throw TypeError.', new TypeError(), function() {
['Absence of supportedMethods in modifiers should throw TypeError.', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], {'total': buildItem(), 'modifiers': [{'total': buildItem()}]})
}],
['Empty details should throw', new TypeError(), function() {
['Empty details should throw', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], {})
}],
['Null items should throw', new TypeError(), function() {
['Null items should throw', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], {'total': buildItem(), 'displayItems': null});
}],
['Null shipping options should throw', new TypeError(), function() {
['Null shipping options should throw', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo'}], {'total': buildItem(), 'displayItems': [buildItem()], 'shippingOptions': null});
}],
['Undefined PaymentShippingType value for shppingType should throw a TypeError', new TypeError(), function() {
['Undefined PaymentShippingType value for shppingType should throw a TypeError', TypeError, function() {
var request = new PaymentRequest([{'supportedMethods': 'foo'}], buildDetails(), {'requestShipping': true, 'shippingType': 'invalid'});
}],
['Null for shppingType should throw a TypeError', new TypeError(), function() {
['Null for shppingType should throw a TypeError', TypeError, function() {
var request = new PaymentRequest([{'supportedMethods': 'foo'}], buildDetails(), {'requestShipping': true, 'shippingType': null});
}],
['Array value for shppingType should throw a TypeError', new TypeError(), function() {
['Array value for shppingType should throw a TypeError', TypeError, function() {
var request = new PaymentRequest([{'supportedMethods': 'foo'}], buildDetails(), {'requestShipping': true, 'shippingType': []});
}],
['Object value for shppingType should throw a TypeError', new TypeError(), function() {
['Object value for shppingType should throw a TypeError', TypeError, function() {
var request = new PaymentRequest([{'supportedMethods': 'foo'}], buildDetails(), {'requestShipping': true, 'shippingType': {}});
}],
['Numeric value for shppingType should throw a TypeError', new TypeError(), function() {
['Numeric value for shppingType should throw a TypeError', TypeError, function() {
var request = new PaymentRequest([{'supportedMethods': 'foo'}], buildDetails(), {'requestShipping': true, 'shippingType': 0});
}],
// Payment method specific data should be a JSON-serializable object.
['String value for payment method specific data parameter should throw', new TypeError(), function() {
['String value for payment method specific data parameter should throw', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo', 'data': 'foo'}], buildDetails(), {})
}],
['Numeric value for payment method specific data parameter should throw', new TypeError(), function() {
['Numeric value for payment method specific data parameter should throw', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo', 'data': 42}], buildDetails(), {})
}],
['Infinite JSON value for one of the payment method specific data pieces should throw', new TypeError(), function() {
['Infinite JSON value for one of the payment method specific data pieces should throw', TypeError, function() {
var infiniteData = {'foo': {}};
infiniteData.foo = infiniteData;
new PaymentRequest([{'supportedMethods': 'foo', 'data': infiniteData}], buildDetails())
}],
['Null for payment method specific data parameter should throw', new TypeError(), function() {
['Null for payment method specific data parameter should throw', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo', 'data': null}], buildDetails())
}],
['Empty string for payment method specific data parameter should throw', new TypeError(), function() {
['Empty string for payment method specific data parameter should throw', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'foo', 'data': ''}], buildDetails())
}],
['PaymentRequest constructor should throw for invalid "basic-card" parameters.', new TypeError(), function() {
['PaymentRequest constructor should throw for invalid "basic-card" parameters.', TypeError, function() {
new PaymentRequest([{'supportedMethods': 'basic-card', 'data': {'supportedTypes': 0, 'supportedNetworks': 'foo'}}], buildDetails())
}]
]);
......
This is a testharness.js-based test.
PASS Continuations across a block -20
FAIL Continuations across a block -15 resources/testharness.js:2024:25)
FAIL Continuations across a block -15 resources/testharness.js:1867: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>
......
......@@ -638,29 +638,23 @@ policies and contribution forms [3].
});
}
function promise_rejects(test, expected, promise, description) {
function promise_rejects_js(test, constructor, promise, description) {
return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) {
assert_throws(expected, function() { throw e }, description);
});
}
function promise_rejects_js(test, expected, promise, description) {
return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) {
assert_throws_js_impl(expected, function() { throw e },
assert_throws_js_impl(constructor, function() { throw e },
description, "promise_reject_js");
});
}
function promise_rejects_dom(test, expected, promise, description) {
function promise_rejects_dom(test, type, promise, description) {
return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) {
assert_throws_dom_impl(expected, function() { throw e },
assert_throws_dom_impl(type, function() { throw e },
description, "promise_rejects_dom");
});
}
function promise_rejects_exactly(test, expected, promise, description) {
function promise_rejects_exactly(test, exception, promise, description) {
return promise.then(test.unreached_func("Should have rejected: " + description)).catch(function(e) {
assert_throws_exactly_impl(expected, function() { throw e },
assert_throws_exactly_impl(exception, function() { throw e },
description, "promise_rejects_exactly");
});
}
......@@ -849,7 +843,7 @@ policies and contribution forms [3].
// descriptive than the generic message defined here.
if (tests.status.status === null) {
tests.status.status = tests.status.ERROR;
tests.status.message = "done() was called without first defining any tests: " + new Error().stack;
tests.status.message = "done() was called without first defining any tests";
}
tests.complete();
......@@ -898,7 +892,6 @@ policies and contribution forms [3].
expose(test, 'test');
expose(async_test, 'async_test');
expose(promise_test, 'promise_test');
expose(promise_rejects, 'promise_rejects');
expose(promise_rejects_js, 'promise_rejects_js');
expose(promise_rejects_dom, 'promise_rejects_dom');
expose(promise_rejects_exactly, 'promise_rejects_exactly');
......@@ -1467,156 +1460,6 @@ policies and contribution forms [3].
}
expose(assert_readonly, "assert_readonly");
/**
* Assert an Exception with the expected code is thrown.
*
* @param {object|number|string} code The expected exception code.
* @param {Function} func Function which should throw.
* @param {string} description Error description for the case that the error is not thrown.
*/
function assert_throws(code, func, description)
{
try {
func.call(this);
assert(false, "assert_throws", description,
"${func} did not throw", {func:func});
} catch (e) {
if (e instanceof AssertionError) {
throw e;
}
assert(typeof e === "object",
"assert_throws", description,
"${func} threw ${e} with type ${type}, not an object",
{func:func, e:e, type:typeof e});
assert(e !== null,
"assert_throws", description,
"${func} threw null, not an object",
{func:func});
if (code === null) {
throw new AssertionError('Test bug: need to pass exception to assert_throws()');
}
if (typeof code === "object") {
assert("name" in e && e.name == code.name,
"assert_throws", description,
"${func} threw ${actual} (${actual_name}) expected ${expected} (${expected_name})",
{func:func, actual:e, actual_name:e.name,
expected:code,
expected_name:code.name});
return;
}
var code_name_map = {
INDEX_SIZE_ERR: 'IndexSizeError',
HIERARCHY_REQUEST_ERR: 'HierarchyRequestError',
WRONG_DOCUMENT_ERR: 'WrongDocumentError',
INVALID_CHARACTER_ERR: 'InvalidCharacterError',
NO_MODIFICATION_ALLOWED_ERR: 'NoModificationAllowedError',
NOT_FOUND_ERR: 'NotFoundError',
NOT_SUPPORTED_ERR: 'NotSupportedError',
INUSE_ATTRIBUTE_ERR: 'InUseAttributeError',
INVALID_STATE_ERR: 'InvalidStateError',
SYNTAX_ERR: 'SyntaxError',
INVALID_MODIFICATION_ERR: 'InvalidModificationError',
NAMESPACE_ERR: 'NamespaceError',
INVALID_ACCESS_ERR: 'InvalidAccessError',
TYPE_MISMATCH_ERR: 'TypeMismatchError',
SECURITY_ERR: 'SecurityError',
NETWORK_ERR: 'NetworkError',
ABORT_ERR: 'AbortError',
URL_MISMATCH_ERR: 'URLMismatchError',
QUOTA_EXCEEDED_ERR: 'QuotaExceededError',
TIMEOUT_ERR: 'TimeoutError',
INVALID_NODE_TYPE_ERR: 'InvalidNodeTypeError',
DATA_CLONE_ERR: 'DataCloneError'
};
var name = code in code_name_map ? code_name_map[code] : code;
var name_code_map = {
IndexSizeError: 1,
HierarchyRequestError: 3,
WrongDocumentError: 4,
InvalidCharacterError: 5,
NoModificationAllowedError: 7,
NotFoundError: 8,
NotSupportedError: 9,
InUseAttributeError: 10,
InvalidStateError: 11,
SyntaxError: 12,
InvalidModificationError: 13,
NamespaceError: 14,
InvalidAccessError: 15,
TypeMismatchError: 17,
SecurityError: 18,
NetworkError: 19,
AbortError: 20,
URLMismatchError: 21,
QuotaExceededError: 22,
TimeoutError: 23,
InvalidNodeTypeError: 24,
DataCloneError: 25,
EncodingError: 0,
NotReadableError: 0,
UnknownError: 0,
ConstraintError: 0,
DataError: 0,
TransactionInactiveError: 0,
ReadOnlyError: 0,
VersionError: 0,
OperationError: 0,
NotAllowedError: 0
};
var code_name_map = {};
for (var key in name_code_map) {
if (name_code_map[key] > 0) {
code_name_map[name_code_map[key]] = key;
}
}
var required_props = { code: code };
if (typeof code === "number") {
if (code === 0) {
throw new AssertionError('Test bug: ambiguous DOMException code 0 passed to assert_throws()');
} else if (!(code in code_name_map)) {
throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
}
name = code_name_map[code];
} else if (typeof code === "string") {
if (!(name in name_code_map)) {
throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
}
required_props.code = name_code_map[name];
}
if (required_props.code === 0 ||
("name" in e &&
e.name !== e.name.toUpperCase() &&
e.name !== "DOMException")) {
// New style exception: also test the name property.
required_props.name = name;
}
//We'd like to test that e instanceof the appropriate interface,
//but we can't, because we don't know what window it was created
//in. It might be an instanceof the appropriate interface on some
//unknown other window. TODO: Work around this somehow?
for (var prop in required_props) {
assert(prop in e && e[prop] == required_props[prop],
"assert_throws", description,
"${func} threw ${e} that is not a DOMException " + code + ": property ${prop} is equal to ${actual}, expected ${expected}",
{func:func, e:e, prop:prop, actual:e[prop], expected:required_props[prop]});
}
}
}
expose(assert_throws, "assert_throws");
/**
* Assert a JS Error with the expected constructor is thrown.
*
......
This source diff could not be displayed because it is too large. You can view the blob instead.
CONSOLE ERROR: line 3503: 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 3346: 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 3503: 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 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;"
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