Bug 1554145 [wpt PR 15122] - Align legacy callback interface tests, a=testonly

Automatic update from web-platform-tests
Align legacy callback interface tests (#15122)

--

wp5At-commits: ecf36e0069be779649c30b647f6b13f2842c14da
wpt-pr: 15122
This commit is contained in:
Aleksey Shvayka 2019-06-13 14:09:38 +00:00 коммит произвёл James Graham
Родитель 27868b36ad
Коммит f8e8616007
2 изменённых файлов: 86 добавлений и 24 удалений

Просмотреть файл

@ -5,13 +5,12 @@
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://dom.spec.whatwg.org/#callbackdef-eventlistener">
<div id=log></div>
<div id=target></div>
<script>
setup({ allow_uncaught_exception: true });
test(function(t) {
var type = "foo";
var target = document.getElementById("target");
var target = document.createElement("div");
var eventListener = {
handleEvent: function(evt) {
var that = this;
@ -30,12 +29,16 @@ test(function(t) {
test(function(t) {
var type = "foo";
var target = document.getElementById("target");
var thrownError = new Error();
var target = document.createElement("div");
var thrownError = { name: "test" };
var uncaughtError;
window.addEventListener("error", function(event) {
var errorHandler = function(event) {
uncaughtError = event.error;
};
window.addEventListener("error", errorHandler);
t.add_cleanup(function() {
window.removeEventListener("error", errorHandler);
});
target.addEventListener(type, {
@ -50,7 +53,7 @@ test(function(t) {
test(function(t) {
var type = "foo";
var target = document.getElementById("target");
var target = document.createElement("div");
var calls = 0;
target.addEventListener(type, {
@ -68,11 +71,27 @@ test(function(t) {
test(function(t) {
var type = "foo";
var target = document.getElementById("target");
var uncaughtError;
var target = document.createElement("div");
var calls = 0;
var eventListener = function() { calls++; };
eventListener.handleEvent = t.unreached_func("`handleEvent` method should not be called on functions");
window.addEventListener("error", function(event) {
target.addEventListener(type, eventListener);
target.dispatchEvent(new Event(type));
assert_equals(calls, 1);
}, "doesn't call `handleEvent` method on callable `EventListener`");
test(function(t) {
var type = "foo";
var target = document.createElement("div");
var uncaughtError;
var errorHandler = function(event) {
uncaughtError = event.error;
};
window.addEventListener("error", errorHandler);
t.add_cleanup(function() {
window.removeEventListener("error", errorHandler);
});
target.addEventListener(type, {
@ -81,5 +100,26 @@ test(function(t) {
target.dispatchEvent(new Event(type));
assert_true(uncaughtError instanceof TypeError);
}, "throws if `handleEvent` is not callable");
}, "throws if `handleEvent` is falsy and not callable");
test(function(t) {
var type = "foo";
var target = document.createElement("div");
var uncaughtError;
var errorHandler = function(event) {
uncaughtError = event.error;
};
window.addEventListener("error", errorHandler);
t.add_cleanup(function() {
window.removeEventListener("error", errorHandler);
});
target.addEventListener(type, {
handleEvent: 1,
});
target.dispatchEvent(new Event(type));
assert_true(uncaughtError instanceof TypeError);
}, "throws if `handleEvent` is thruthy and not callable");
</script>

Просмотреть файл

@ -8,6 +8,7 @@ Test adapted from https://dxr.mozilla.org/chromium/source/src/third_party/WebKit
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="traversal-support.js"></script>
<link rel="help" href="https://dom.spec.whatwg.org/#callbackdef-nodefilter">
<div id=log></div>
</head>
<body>
@ -102,26 +103,15 @@ test(function()
assert_node(walker.currentNode, { type: Element, id: 'root' });
}, 'Testing with object with non-function acceptNode property');
test(function()
test(function(t)
{
var filter = function() { return NodeFilter.FILTER_ACCEPT; };
filter.acceptNode = function(node) { return NodeFilter.FILTER_SKIP; };
filter.acceptNode = t.unreached_func("`acceptNode` method should not be called on functions");
var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
assert_node(walker.firstChild(), { type: Element, id: 'A1' });
assert_node(walker.nextNode(), { type: Element, id: 'B1' });
}, 'Testing with function having acceptNode function');
test(function()
{
var filter = {
acceptNode: function(node) {
return NodeFilter.FILTER_ACCEPT;
}
};
var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
assert_node(walker.firstChild(), { type: Element, id: 'A1' });
}, 'Testing acceptNode callee');
test(function()
{
var test_error = { name: "test" };
@ -135,6 +125,38 @@ test(function()
assert_node(walker.currentNode, { type: Element, id: 'root' });
}, 'Testing with filter function that throws');
test(function() {
var testError = { name: "test" };
var filter = {
get acceptNode() {
throw testError;
},
};
var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
assert_throws(testError, function() { walker.firstChild(); });
assert_node(walker.currentNode, { type: Element, id: 'root' });
assert_throws(testError, function() { walker.nextNode(); });
assert_node(walker.currentNode, { type: Element, id: 'root' });
}, "rethrows errors when getting `acceptNode`");
test(function() {
var calls = 0;
var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, {
get acceptNode() {
calls++;
return function() {
return NodeFilter.FILTER_ACCEPT;
};
},
});
assert_equals(calls, 0);
walker.nextNode();
walker.nextNode();
assert_equals(calls, 2);
}, "performs `Get` on every traverse");
test(function()
{
var test_error = { name: "test" };