зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1157218 - Update web-platform-tests to revision 20aef05e164be1ccbbd8f66192f01e778b5e5c18, a=testonly
--HG-- rename : testing/web-platform/tests/tools/lint/lint.whitelist => testing/web-platform/tests/lint.whitelist
This commit is contained in:
Родитель
99aa852b73
Коммит
ff8ed55e99
|
@ -1767,6 +1767,46 @@
|
|||
],
|
||||
"url": "/html/rendering/bindings/the-select-element-0/option-label.html"
|
||||
},
|
||||
{
|
||||
"path": "html/rendering/bindings/the-textarea-element-0/cols-default.html",
|
||||
"references": [
|
||||
[
|
||||
"/html/rendering/bindings/the-textarea-element-0/textarea-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
"url": "/html/rendering/bindings/the-textarea-element-0/cols-default.html"
|
||||
},
|
||||
{
|
||||
"path": "html/rendering/bindings/the-textarea-element-0/cols-zero.html",
|
||||
"references": [
|
||||
[
|
||||
"/html/rendering/bindings/the-textarea-element-0/textarea-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
"url": "/html/rendering/bindings/the-textarea-element-0/cols-zero.html"
|
||||
},
|
||||
{
|
||||
"path": "html/rendering/bindings/the-textarea-element-0/rows-default.html",
|
||||
"references": [
|
||||
[
|
||||
"/html/rendering/bindings/the-textarea-element-0/textarea-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
"url": "/html/rendering/bindings/the-textarea-element-0/rows-default.html"
|
||||
},
|
||||
{
|
||||
"path": "html/rendering/bindings/the-textarea-element-0/rows-zero.html",
|
||||
"references": [
|
||||
[
|
||||
"/html/rendering/bindings/the-textarea-element-0/textarea-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
"url": "/html/rendering/bindings/the-textarea-element-0/rows-zero.html"
|
||||
},
|
||||
{
|
||||
"path": "html/rendering/non-replaced-elements/flow-content-0/figure.html",
|
||||
"references": [
|
||||
|
@ -10911,6 +10951,10 @@
|
|||
"path": "encoding/api-basics.html",
|
||||
"url": "/encoding/api-basics.html"
|
||||
},
|
||||
{
|
||||
"path": "encoding/api-invalid-label.html",
|
||||
"url": "/encoding/api-invalid-label.html"
|
||||
},
|
||||
{
|
||||
"path": "encoding/api-replacement-encodings.html",
|
||||
"url": "/encoding/api-replacement-encodings.html"
|
||||
|
@ -21008,6 +21052,54 @@
|
|||
"url": "/html/rendering/bindings/the-select-element-0/option-label.html"
|
||||
}
|
||||
],
|
||||
"html/rendering/bindings/the-textarea-element-0/cols-default.html": [
|
||||
{
|
||||
"path": "html/rendering/bindings/the-textarea-element-0/cols-default.html",
|
||||
"references": [
|
||||
[
|
||||
"/html/rendering/bindings/the-textarea-element-0/textarea-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
"url": "/html/rendering/bindings/the-textarea-element-0/cols-default.html"
|
||||
}
|
||||
],
|
||||
"html/rendering/bindings/the-textarea-element-0/cols-zero.html": [
|
||||
{
|
||||
"path": "html/rendering/bindings/the-textarea-element-0/cols-zero.html",
|
||||
"references": [
|
||||
[
|
||||
"/html/rendering/bindings/the-textarea-element-0/textarea-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
"url": "/html/rendering/bindings/the-textarea-element-0/cols-zero.html"
|
||||
}
|
||||
],
|
||||
"html/rendering/bindings/the-textarea-element-0/rows-default.html": [
|
||||
{
|
||||
"path": "html/rendering/bindings/the-textarea-element-0/rows-default.html",
|
||||
"references": [
|
||||
[
|
||||
"/html/rendering/bindings/the-textarea-element-0/textarea-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
"url": "/html/rendering/bindings/the-textarea-element-0/rows-default.html"
|
||||
}
|
||||
],
|
||||
"html/rendering/bindings/the-textarea-element-0/rows-zero.html": [
|
||||
{
|
||||
"path": "html/rendering/bindings/the-textarea-element-0/rows-zero.html",
|
||||
"references": [
|
||||
[
|
||||
"/html/rendering/bindings/the-textarea-element-0/textarea-ref.html",
|
||||
"=="
|
||||
]
|
||||
],
|
||||
"url": "/html/rendering/bindings/the-textarea-element-0/rows-zero.html"
|
||||
}
|
||||
],
|
||||
"html/rendering/non-replaced-elements/flow-content-0/figure.html": [
|
||||
{
|
||||
"path": "html/rendering/non-replaced-elements/flow-content-0/figure.html",
|
||||
|
@ -24729,7 +24821,7 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"rev": "89b6e2bc460316c7f273712d22f0b2d3a3d0c5be",
|
||||
"rev": "20aef05e164be1ccbbd8f66192f01e778b5e5c18",
|
||||
"url_base": "/",
|
||||
"version": 2
|
||||
}
|
|
@ -1 +1 @@
|
|||
ec9e346b36e59c9a4fc6fc1cc5a3687417769191
|
||||
821cd0c3a55889f05c04ed9b6c12c810cd1a6c0f
|
|
@ -2,3 +2,4 @@ importScripts("/resources/testharness.js");
|
|||
importScripts("/resources/testharnessreport.js");
|
||||
importScripts("send-usp.js");
|
||||
run_test();
|
||||
done();
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Encoding API: invalid label</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
|
||||
var invalidLabel = "invalid-invalidLabel"
|
||||
|
||||
test(function() {
|
||||
assert_throws(new RangeError(), function() { new TextEncoder(invalidLabel); });
|
||||
assert_throws(new RangeError(), function() { new TextDecoder(invalidLabel); });
|
||||
}, 'Invalid label "' + invalidLabel + '" should be rejected by API.');
|
||||
|
||||
</script>
|
|
@ -6,8 +6,8 @@
|
|||
<script>
|
||||
|
||||
test(function() {
|
||||
assert_throws({name: 'RangeError'}, function() { new TextEncoder('replacement'); });
|
||||
assert_throws({name: 'RangeError'}, function() { new TextDecoder('replacement'); });
|
||||
assert_throws(new RangeError(), function() { new TextEncoder('replacement'); });
|
||||
assert_throws(new RangeError(), function() { new TextDecoder('replacement'); });
|
||||
}, 'The "replacement" label should not be a known encoding.');
|
||||
|
||||
encodings_table.forEach(function(section) {
|
||||
|
@ -16,8 +16,8 @@ encodings_table.forEach(function(section) {
|
|||
}).forEach(function(encoding) {
|
||||
encoding.labels.forEach(function(label) {
|
||||
test(function() {
|
||||
assert_throws({name: 'RangeError'}, function() { new TextEncoder(label); });
|
||||
assert_throws({name: 'RangeError'}, function() { new TextDecoder(label); });
|
||||
assert_throws(new RangeError(), function() { new TextEncoder(label); });
|
||||
assert_throws(new RangeError(), function() { new TextDecoder(label); });
|
||||
}, 'Label for "replacement" should be rejected by API: ' + label);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -17,7 +17,7 @@ encodings_table.forEach(function(section) {
|
|||
} else {
|
||||
test(function() {
|
||||
assert_equals(new TextDecoder(encoding.name).encoding, encoding.name);
|
||||
assert_throws({name: 'RangeError'}, function() { new TextEncoder(encoding.name); });
|
||||
assert_throws(new RangeError(), function() { new TextEncoder(encoding.name); });
|
||||
}, 'Non-UTF encodings supported only for decode, not encode: ' + encoding.name);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>Textarea cols</title>
|
||||
<link rel=match href=textarea-ref.html>
|
||||
<textarea cols=20></textarea>
|
|
@ -0,0 +1,5 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>Textarea cols</title>
|
||||
<link rel=match href=textarea-ref.html>
|
||||
<textarea cols=0></textarea>
|
|
@ -0,0 +1,5 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>Textarea rows</title>
|
||||
<link rel=match href=textarea-ref.html>
|
||||
<textarea rows=2></textarea>
|
|
@ -0,0 +1,5 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>Textarea rows</title>
|
||||
<link rel=match href=textarea-ref.html>
|
||||
<textarea rows=0></textarea>
|
|
@ -0,0 +1,4 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>Default textarea</title>
|
||||
<textarea></textarea>
|
|
@ -107,10 +107,9 @@ function t(desc, func, expect) {
|
|||
var img = document.querySelector('[data-desc="' + desc + '"]');
|
||||
img.onload = img.onerror = this.unreached_func('update the image data was run');
|
||||
if (expect == 'timeout') {
|
||||
setTimeout(this.step_func_done(), 250);
|
||||
setTimeout(this.step_func_done(), 1000);
|
||||
} else {
|
||||
img['on' + expect] = this.step_func_done(function() {});
|
||||
setTimeout(this.unreached_func('update the image data was not run'), 250)
|
||||
}
|
||||
func.call(this, img);
|
||||
}, desc);
|
||||
|
|
|
@ -22,6 +22,23 @@ function run_test() {
|
|||
assert_equals(navigator.product, "Gecko");
|
||||
}, "product");
|
||||
|
||||
test(function() {
|
||||
// See https://www.w3.org/Bugs/Public/show_bug.cgi?id=22555
|
||||
if ("window" in self) {
|
||||
// If you identify as WebKit, taintEnabled should not exist.
|
||||
if (navigator.userAgent.indexOf("WebKit") != -1) {
|
||||
assert_false("taintEnabled" in navigator);
|
||||
}
|
||||
// Otherwise it should exist and return false.
|
||||
else {
|
||||
assert_false(navigator.taintEnabled());
|
||||
}
|
||||
} else {
|
||||
// taintEnabled should not exist in workers.
|
||||
assert_false("taintEnabled" in navigator);
|
||||
}
|
||||
}, "taintEnabled");
|
||||
|
||||
test(function() {
|
||||
assert_equals(typeof navigator.userAgent, "string",
|
||||
"navigator.userAgent should be a string");
|
||||
|
|
|
@ -553,6 +553,11 @@ function IdlInterface(obj, is_callback) {
|
|||
|
||||
/** An array of IdlInterfaceMembers. */
|
||||
this.members = obj.members.map(function(m){return new IdlInterfaceMember(m); });
|
||||
if (this.has_extended_attribute("Unforgeable")) {
|
||||
this.members
|
||||
.filter(m => !m["static"] && (m.type == "attribute" || m.type == "operation"))
|
||||
.forEach(m => m.isUnforgeable = true);
|
||||
}
|
||||
|
||||
/**
|
||||
* The name (as a string) of the type we inherit from, or null if there is
|
||||
|
@ -1003,7 +1008,26 @@ IdlInterface.prototype.test_member_attribute = function(member)
|
|||
assert_false(member.name in self[this.name].prototype,
|
||||
"The prototype object must not have a property " +
|
||||
format_value(member.name));
|
||||
do_interface_attribute_asserts(self, member);
|
||||
|
||||
// Try/catch around the get here, since it can legitimately throw.
|
||||
// If it does, we obviously can't check for equality with direct
|
||||
// invocation of the getter.
|
||||
var gotValue;
|
||||
var propVal;
|
||||
try {
|
||||
propVal = self[member.name];
|
||||
gotValue = true;
|
||||
} catch (e) {
|
||||
gotValue = false;
|
||||
}
|
||||
if (gotValue) {
|
||||
var getter = Object.getOwnPropertyDescriptor(self, member.name).get;
|
||||
assert_equals(typeof(getter), "function",
|
||||
format_value(member.name) + " must have a getter");
|
||||
assert_equals(propVal, getter.call(undefined),
|
||||
"Gets on a global should not require an explicit this");
|
||||
}
|
||||
this.do_interface_attribute_asserts(self, member);
|
||||
} else {
|
||||
assert_true(member.name in self[this.name].prototype,
|
||||
"The prototype object must have a property " +
|
||||
|
@ -1017,7 +1041,7 @@ IdlInterface.prototype.test_member_attribute = function(member)
|
|||
assert_equals(self[this.name].prototype[member.name], undefined,
|
||||
"getting property on prototype object must return undefined");
|
||||
}
|
||||
do_interface_attribute_asserts(self[this.name].prototype, member);
|
||||
this.do_interface_attribute_asserts(self[this.name].prototype, member);
|
||||
}
|
||||
}.bind(this), this.name + " interface: attribute " + member.name);
|
||||
};
|
||||
|
@ -1055,7 +1079,7 @@ IdlInterface.prototype.test_member_operation = function(member)
|
|||
var memberHolderObject;
|
||||
if (member["static"]) {
|
||||
assert_own_property(self[this.name], member.name,
|
||||
"interface prototype object missing static operation");
|
||||
"interface object missing static operation");
|
||||
memberHolderObject = self[this.name];
|
||||
} else if (this.is_global()) {
|
||||
assert_own_property(self, member.name,
|
||||
|
@ -1067,46 +1091,66 @@ IdlInterface.prototype.test_member_operation = function(member)
|
|||
memberHolderObject = self[this.name].prototype;
|
||||
}
|
||||
|
||||
var desc = Object.getOwnPropertyDescriptor(memberHolderObject, member.name);
|
||||
// "The property has attributes { [[Writable]]: true,
|
||||
// [[Enumerable]]: true, [[Configurable]]: true }."
|
||||
assert_false("get" in desc, "property has getter");
|
||||
assert_false("set" in desc, "property has setter");
|
||||
assert_true(desc.writable, "property is not writable");
|
||||
assert_true(desc.enumerable, "property is not enumerable");
|
||||
assert_true(desc.configurable, "property is not configurable");
|
||||
// "The value of the property is a Function object whose
|
||||
// behavior is as follows . . ."
|
||||
assert_equals(typeof memberHolderObject[member.name], "function",
|
||||
"property must be a function");
|
||||
// "The value of the Function object’s “length” property is
|
||||
// a Number determined as follows:
|
||||
// ". . .
|
||||
// "Return the length of the shortest argument list of the
|
||||
// entries in S."
|
||||
//
|
||||
// TODO: Doesn't handle overloading or variadic arguments.
|
||||
assert_equals(memberHolderObject[member.name].length,
|
||||
member.arguments.filter(function(arg) {
|
||||
return !arg.optional;
|
||||
}).length,
|
||||
"property has wrong .length");
|
||||
this.do_member_operation_asserts(memberHolderObject, member);
|
||||
}.bind(this), this.name + " interface: operation " + member.name +
|
||||
"(" + member.arguments.map(function(m) { return m.idlType.idlType; }) +
|
||||
")");
|
||||
};
|
||||
|
||||
// Make some suitable arguments
|
||||
var args = member.arguments.map(function(arg) {
|
||||
return create_suitable_object(arg.idlType);
|
||||
});
|
||||
//@}
|
||||
IdlInterface.prototype.do_member_operation_asserts = function(memberHolderObject, member)
|
||||
//@{
|
||||
{
|
||||
var operationUnforgeable = member.isUnforgeable;
|
||||
var desc = Object.getOwnPropertyDescriptor(memberHolderObject, member.name);
|
||||
// "The property has attributes { [[Writable]]: B,
|
||||
// [[Enumerable]]: true, [[Configurable]]: B }, where B is false if the
|
||||
// operation is unforgeable on the interface, and true otherwise".
|
||||
assert_false("get" in desc, "property has getter");
|
||||
assert_false("set" in desc, "property has setter");
|
||||
assert_equals(desc.writable, !operationUnforgeable,
|
||||
"property should be writable if and only if not unforgeable");
|
||||
assert_true(desc.enumerable, "property is not enumerable");
|
||||
assert_equals(desc.configurable, !operationUnforgeable,
|
||||
"property should be configurable if and only if not unforgeable");
|
||||
// "The value of the property is a Function object whose
|
||||
// behavior is as follows . . ."
|
||||
assert_equals(typeof memberHolderObject[member.name], "function",
|
||||
"property must be a function");
|
||||
// "The value of the Function object’s “length” property is
|
||||
// a Number determined as follows:
|
||||
// ". . .
|
||||
// "Return the length of the shortest argument list of the
|
||||
// entries in S."
|
||||
//
|
||||
// TODO: Doesn't handle overloading or variadic arguments.
|
||||
assert_equals(memberHolderObject[member.name].length,
|
||||
member.arguments.filter(function(arg) {
|
||||
return !arg.optional;
|
||||
}).length,
|
||||
"property has wrong .length");
|
||||
|
||||
// "Let O be a value determined as follows:
|
||||
// ". . .
|
||||
// "Otherwise, throw a TypeError."
|
||||
// This should be hit if the operation is not static, there is
|
||||
// no [ImplicitThis] attribute, and the this value is null.
|
||||
//
|
||||
// TODO: We currently ignore the [ImplicitThis] case.
|
||||
if (!member["static"]) {
|
||||
// Make some suitable arguments
|
||||
var args = member.arguments.map(function(arg) {
|
||||
return create_suitable_object(arg.idlType);
|
||||
});
|
||||
|
||||
// "Let O be a value determined as follows:
|
||||
// ". . .
|
||||
// "Otherwise, throw a TypeError."
|
||||
// This should be hit if the operation is not static, there is
|
||||
// no [ImplicitThis] attribute, and the this value is null.
|
||||
//
|
||||
// TODO: We currently ignore the [ImplicitThis] case. Except we manually
|
||||
// check for globals, since otherwise we'll invoke window.close(). And we
|
||||
// have to skip this test for anything that on the proto chain of "self",
|
||||
// since that does in fact have implicit-this behavior.
|
||||
if (!member["static"]) {
|
||||
if (!this.is_global() &&
|
||||
memberHolderObject[member.name] != self[member.name])
|
||||
{
|
||||
assert_throws(new TypeError(), function() {
|
||||
self[this.name].prototype[member.name].apply(null, args);
|
||||
memberHolderObject[member.name].apply(null, args);
|
||||
}, "calling operation with this = null didn't throw TypeError");
|
||||
}
|
||||
|
||||
|
@ -1116,12 +1160,10 @@ IdlInterface.prototype.test_member_operation = function(member)
|
|||
// TODO: Test a platform object that implements some other
|
||||
// interface. (Have to be sure to get inheritance right.)
|
||||
assert_throws(new TypeError(), function() {
|
||||
self[this.name].prototype[member.name].apply({}, args);
|
||||
memberHolderObject[member.name].apply({}, args);
|
||||
}, "calling operation with this = {} didn't throw TypeError");
|
||||
}.bind(this), this.name + " interface: operation " + member.name +
|
||||
"(" + member.arguments.map(function(m) { return m.idlType.idlType; }) +
|
||||
")");
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
//@}
|
||||
IdlInterface.prototype.test_member_stringifier = function(member)
|
||||
|
@ -1150,15 +1192,18 @@ IdlInterface.prototype.test_member_stringifier = function(member)
|
|||
assert_own_property(self[this.name].prototype, "toString",
|
||||
"interface prototype object missing non-static operation");
|
||||
|
||||
var stringifierUnforgeable = member.isUnforgeable;
|
||||
var desc = Object.getOwnPropertyDescriptor(interfacePrototypeObject, "toString");
|
||||
// "The property has attributes { [[Writable]]: B,
|
||||
// [[Enumerable]]: true, [[Configurable]]: B }, where B is false if the
|
||||
// stringifier is unforgeable on the interface, and true otherwise."
|
||||
assert_false("get" in desc, "property has getter");
|
||||
assert_false("set" in desc, "property has setter");
|
||||
assert_true(desc.writable, "property is not writable");
|
||||
assert_equals(desc.writable, !stringifierUnforgeable,
|
||||
"property should be writable if and only if not unforgeable");
|
||||
assert_true(desc.enumerable, "property is not enumerable");
|
||||
assert_true(desc.configurable, "property is not configurable");
|
||||
assert_equals(desc.configurable, !stringifierUnforgeable,
|
||||
"property should be configurable if and only if not unforgeable");
|
||||
// "The value of the property is a Function object, which behaves as
|
||||
// follows . . ."
|
||||
assert_equals(typeof interfacePrototypeObject.toString, "function",
|
||||
|
@ -1203,7 +1248,8 @@ IdlInterface.prototype.test_members = function()
|
|||
case "attribute":
|
||||
// For unforgeable attributes, we do the checks in
|
||||
// test_interface_of instead.
|
||||
if (!member.has_extended_attribute("Unforgeable")) {
|
||||
if (!member.isUnforgeable)
|
||||
{
|
||||
this.test_member_attribute(member);
|
||||
}
|
||||
break;
|
||||
|
@ -1211,8 +1257,13 @@ IdlInterface.prototype.test_members = function()
|
|||
case "operation":
|
||||
// TODO: Need to correctly handle multiple operations with the same
|
||||
// identifier.
|
||||
// For unforgeable operations, we do the checks in
|
||||
// test_interface_of instead.
|
||||
if (member.name) {
|
||||
this.test_member_operation(member);
|
||||
if (!member.isUnforgeable)
|
||||
{
|
||||
this.test_member_operation(member);
|
||||
}
|
||||
} else if (member.stringifier) {
|
||||
this.test_member_stringifier(member);
|
||||
}
|
||||
|
@ -1321,13 +1372,26 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
|
|||
for (var i = 0; i < this.members.length; i++)
|
||||
{
|
||||
var member = this.members[i];
|
||||
if (member.has_extended_attribute("Unforgeable"))
|
||||
if (member.type == "attribute" && member.isUnforgeable)
|
||||
{
|
||||
test(function()
|
||||
{
|
||||
assert_equals(exception, null, "Unexpected exception when evaluating object");
|
||||
assert_equals(typeof obj, expected_typeof, "wrong typeof object");
|
||||
do_interface_attribute_asserts(obj, member);
|
||||
this.do_interface_attribute_asserts(obj, member);
|
||||
}.bind(this), this.name + " interface: " + desc + ' must have own property "' + member.name + '"');
|
||||
}
|
||||
else if (member.type == "operation" &&
|
||||
member.name &&
|
||||
member.isUnforgeable)
|
||||
{
|
||||
test(function()
|
||||
{
|
||||
assert_equals(exception, null, "Unexpected exception when evaluating object");
|
||||
assert_equals(typeof obj, expected_typeof, "wrong typeof object");
|
||||
assert_own_property(obj, member.name,
|
||||
"Doesn't have the unforgeable operation property");
|
||||
this.do_member_operation_asserts(obj, member);
|
||||
}.bind(this), this.name + " interface: " + desc + ' must have own property "' + member.name + '"');
|
||||
}
|
||||
else if ((member.type == "const"
|
||||
|
@ -1340,7 +1404,12 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
|
|||
assert_equals(exception, null, "Unexpected exception when evaluating object");
|
||||
assert_equals(typeof obj, expected_typeof, "wrong typeof object");
|
||||
if (!member["static"]) {
|
||||
assert_inherits(obj, member.name);
|
||||
if (!this.is_global()) {
|
||||
assert_inherits(obj, member.name);
|
||||
} else {
|
||||
assert_own_property(obj, member.name);
|
||||
}
|
||||
|
||||
if (member.type == "const")
|
||||
{
|
||||
assert_equals(obj[member.name], constValue(member.value));
|
||||
|
@ -1381,7 +1450,11 @@ IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expect
|
|||
assert_equals(exception, null, "Unexpected exception when evaluating object");
|
||||
assert_equals(typeof obj, expected_typeof, "wrong typeof object");
|
||||
if (!member["static"]) {
|
||||
assert_inherits(obj, member.name);
|
||||
if (!this.is_global() && !member.isUnforgeable) {
|
||||
assert_inherits(obj, member.name);
|
||||
} else {
|
||||
assert_own_property(obj, member.name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1423,7 +1496,7 @@ IdlInterface.prototype.has_stringifier = function()
|
|||
};
|
||||
|
||||
//@}
|
||||
function do_interface_attribute_asserts(obj, member)
|
||||
IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member)
|
||||
//@{
|
||||
{
|
||||
// This function tests WebIDL as of 2015-01-27.
|
||||
|
@ -1451,7 +1524,7 @@ function do_interface_attribute_asserts(obj, member)
|
|||
assert_false("value" in desc, 'property descriptor has value but is supposed to be accessor');
|
||||
assert_false("writable" in desc, 'property descriptor has "writable" field but is supposed to be accessor');
|
||||
assert_true(desc.enumerable, "property is not enumerable");
|
||||
if (member.has_extended_attribute("Unforgeable"))
|
||||
if (member.isUnforgeable)
|
||||
{
|
||||
assert_false(desc.configurable, "[Unforgeable] property must not be configurable");
|
||||
}
|
||||
|
@ -1545,6 +1618,8 @@ function IdlInterfaceMember(obj)
|
|||
{
|
||||
this.extAttrs = [];
|
||||
}
|
||||
|
||||
this.isUnforgeable = this.has_extended_attribute("Unforgeable");
|
||||
}
|
||||
|
||||
//@}
|
||||
|
|
|
@ -71,13 +71,22 @@ policies and contribution forms [3].
|
|||
|
||||
WindowTestEnvironment.prototype._dispatch = function(selector, callback_args, message_arg) {
|
||||
this._forEach_windows(
|
||||
function(w, is_same_origin) {
|
||||
if (is_same_origin && selector in w) {
|
||||
function(w, same_origin) {
|
||||
if (same_origin) {
|
||||
try {
|
||||
w[selector].apply(undefined, callback_args);
|
||||
} catch (e) {
|
||||
if (debug) {
|
||||
throw e;
|
||||
var has_selector = selector in w;
|
||||
} catch(e) {
|
||||
// If document.domain was set at some point same_origin can be
|
||||
// wrong and the above will fail.
|
||||
has_selector = false;
|
||||
}
|
||||
if (has_selector) {
|
||||
try {
|
||||
w[selector].apply(undefined, callback_args);
|
||||
} catch (e) {
|
||||
if (debug) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1504,7 +1513,7 @@ policies and contribution forms [3].
|
|||
status: {
|
||||
status: tests.status.ERROR,
|
||||
message: "Error in worker" + filename + ": " + message,
|
||||
stack: e.stack
|
||||
stack: error.stack
|
||||
}
|
||||
});
|
||||
error.preventDefault();
|
||||
|
|
|
@ -76,7 +76,7 @@ def whitelist_errors(path, errors):
|
|||
global _whitelist_fn
|
||||
|
||||
if _whitelist_fn is None:
|
||||
_whitelist_fn = parse_whitelist_file(os.path.join(here, "lint.whitelist"))
|
||||
_whitelist_fn = parse_whitelist_file(os.path.join(repo_root, "lint.whitelist"))
|
||||
return _whitelist_fn(path, errors)
|
||||
|
||||
class Regexp(object):
|
||||
|
|
|
@ -14,6 +14,8 @@ async_test(function(t) {
|
|||
assert_equals(e.wasClean, false, 'e.wasClean = true');
|
||||
delete e.wasClean;
|
||||
assert_equals(e.wasClean, false, 'delete e.wasClean');
|
||||
delete CloseEvent.prototype.wasClean;
|
||||
assert_equals(e.wasClean, undefined, 'delete CloseEvent.prototype.wasClean');
|
||||
t.done();
|
||||
});
|
||||
ws.close();
|
||||
|
|
|
@ -6,10 +6,11 @@
|
|||
<div id=log></div>
|
||||
<script>
|
||||
test(function(t) {
|
||||
delete WebSocket.prototype.readyState;
|
||||
var ws = new WebSocket(SCHEME_DOMAIN_PORT+'/');
|
||||
ws.close();
|
||||
delete ws.readyState;
|
||||
assert_equals(ws.readyState, ws.CLOSING);
|
||||
assert_equals(ws.readyState, ws.CLOSING, 'delete ws.readyState');
|
||||
delete WebSocket.prototype.readyState;
|
||||
assert_equals(ws.readyState, undefined, 'delete WebSocket.prototype.readyState');
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
test(function() {
|
||||
var ws = new WebSocket(SCHEME_DOMAIN_PORT+'/');
|
||||
delete ws.url;
|
||||
assert_equals(ws.url, SCHEME_DOMAIN_PORT+'/');
|
||||
assert_equals(ws.url, SCHEME_DOMAIN_PORT+'/', 'delete ws.url');
|
||||
delete WebSocket.prototype.url;
|
||||
assert_equals(ws.url, undefined, 'delete WebSocket.prototype.url');
|
||||
});
|
||||
</script>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
importScripts("/resources/testharness.js");
|
||||
|
||||
test(function() {
|
||||
test(function(t) {
|
||||
var i = 0;
|
||||
addEventListener("message", function listener(evt) {
|
||||
this.step(function() {
|
||||
t.step(function() {
|
||||
++i;
|
||||
removeEventListener("message", listener, true);
|
||||
});
|
||||
|
|
|
@ -21,7 +21,7 @@ async_test(function() {
|
|||
assert_equals(typeof e.message, 'string', 'typeof e.message');
|
||||
assert_equals(e.filename, document.URL+'#', 'e.filename');
|
||||
assert_equals(typeof e.lineno, 'number', 'typeof e.lineno');
|
||||
assert_equals(typeof e.column, 'number', 'typeof e.column');
|
||||
assert_equals(typeof e.colno, 'number', 'typeof e.column');
|
||||
e.preventDefault(); // "handled"
|
||||
this.done();
|
||||
});
|
||||
|
@ -29,4 +29,4 @@ async_test(function() {
|
|||
</script>
|
||||
<!--
|
||||
*/
|
||||
//-->
|
||||
//-->
|
||||
|
|
|
@ -21,7 +21,7 @@ async_test(function() {
|
|||
assert_equals(typeof e.message, 'string', 'typeof e.message');
|
||||
assert_equals(e.filename, document.URL+'#', 'e.filename');
|
||||
assert_equals(typeof e.lineno, 'number', 'typeof e.lineno');
|
||||
assert_equals(typeof e.column, 'number', 'typeof e.column');
|
||||
assert_equals(typeof e.colno, 'number', 'typeof e.column');
|
||||
e.preventDefault(); // "handled"
|
||||
this.done();
|
||||
});
|
||||
|
@ -29,4 +29,4 @@ async_test(function() {
|
|||
</script>
|
||||
<!--
|
||||
*/
|
||||
//-->
|
||||
//-->
|
||||
|
|
|
@ -16,15 +16,11 @@ setup({
|
|||
});
|
||||
async_test(function() {
|
||||
var worker = new Worker('#');
|
||||
var timeout = setTimeout(this.step_func(function() {
|
||||
assert_unreached();
|
||||
}, 500));
|
||||
window.onerror = this.step_func(function(a, b, c, d) {
|
||||
assert_true(typeof a, 'string', 'first argument');
|
||||
assert_equals(typeof a, 'string', 'first argument');
|
||||
assert_equals(b, document.URL+'#', 'second argument');
|
||||
assert_equals(typeof c, 'number', 'third argument');
|
||||
assert_equals(typeof d, 'number', 'fourth argument');
|
||||
clearTimeout(timeout);
|
||||
this.done();
|
||||
return true; // "handled"
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче