зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1676460
[wpt PR 26472] - Test addEventListener abort signal, a=testonly
Automatic update from web-platform-tests DOM: signal support for addEventListener() Tests for https://github.com/whatwg/dom/pull/919. -- wpt-commits: 625e1310ce19e9dde25b01f9eda0452c6ec274da wpt-pr: 26472
This commit is contained in:
Родитель
67c93632bb
Коммит
5004b5c087
|
@ -1,56 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<link rel="author" title="Joey Arhar" href="mailto:jarhar@chromium.org">
|
||||
|
||||
<!-- This behavior has not been specified yet. See https://github.com/whatwg/dom/issues/911 -->
|
||||
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
|
||||
<body>
|
||||
|
||||
<script>
|
||||
test(t => {
|
||||
const target = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
|
||||
target.addEventListener('testevent', t.step_func(() => {
|
||||
assert_unreached('testevent should have been canceled by AbortController');
|
||||
}), {signal: controller.signal});
|
||||
|
||||
controller.abort();
|
||||
target.dispatchEvent(new Event('testevent'));
|
||||
}, 'Tests support for EventController to cancel event listeners in addEventListener.');
|
||||
|
||||
test(t => {
|
||||
const target = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
|
||||
target.addEventListener('testevent', t.step_func(() => {
|
||||
assert_unreached('testevent should have been canceled by AbortController');
|
||||
}), {signal: controller.signal, capture: true});
|
||||
|
||||
controller.abort();
|
||||
target.dispatchEvent(new Event('testevent'));
|
||||
}, 'Tests support for EventController to cancel capture event listeners in addEventListener.');
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 1, "Adding a signal still adds a listener");
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "The listener was not added with the once flag");
|
||||
controller.abort();
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "Aborting on the controller removes the listener");
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "Passing an aborted signal never adds the handler");
|
||||
}, "Passing an AbortSignal to addEventListener options should allow removing a listener");
|
||||
</script>
|
|
@ -0,0 +1,133 @@
|
|||
'use strict';
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 1, "Adding a signal still adds a listener");
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "The listener was not added with the once flag");
|
||||
controller.abort();
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "Aborting on the controller removes the listener");
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 2, "Passing an aborted signal never adds the handler");
|
||||
}, "Passing an AbortSignal to addEventListener options should allow removing a listener");
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
et.removeEventListener('test', handler);
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 0, "The listener was still removed");
|
||||
}, "Passing an AbortSignal to addEventListener does not prevent removeEventListener");
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', handler, { signal: controller.signal, once: true });
|
||||
controller.abort();
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 0, "The listener was still removed");
|
||||
}, "Passing an AbortSignal to addEventListener works with the once flag");
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', handler, { signal: controller.signal, once: true });
|
||||
et.removeEventListener('test', handler);
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 0, "The listener was still removed");
|
||||
}, "Removing a once listener works with a passed signal");
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('first', handler, { signal: controller.signal, once: true });
|
||||
et.addEventListener('second', handler, { signal: controller.signal, once: true });
|
||||
controller.abort();
|
||||
et.dispatchEvent(new Event('first'));
|
||||
et.dispatchEvent(new Event('second'));
|
||||
assert_equals(count, 0, "The listener was still removed");
|
||||
}, "Passing an AbortSignal to multiple listeners");
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', handler, { signal: controller.signal, capture: true });
|
||||
controller.abort();
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 0, "The listener was still removed");
|
||||
}, "Passing an AbortSignal to addEventListener works with the capture flag");
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', () => {
|
||||
controller.abort();
|
||||
}, { signal: controller.signal });
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 0, "The listener was still removed");
|
||||
}, "Aborting from a listener does not call future listeners");
|
||||
|
||||
test(function() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener('test', () => {
|
||||
et.addEventListener('test', handler, { signal: controller.signal });
|
||||
controller.abort();
|
||||
}, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event('test'));
|
||||
assert_equals(count, 0, "The listener was still removed");
|
||||
}, "Adding then aborting a listener in another listener does not call it");
|
||||
|
||||
test(function() {
|
||||
const et = new EventTarget();
|
||||
const ac = new AbortController();
|
||||
let count = 0;
|
||||
et.addEventListener('foo', () => {
|
||||
et.addEventListener('foo', () => {
|
||||
count++;
|
||||
if (count > 5) ac.abort();
|
||||
et.dispatchEvent(new Event('foo'));
|
||||
}, { signal: ac.signal });
|
||||
et.dispatchEvent(new Event('foo'));
|
||||
}, { once: true });
|
||||
et.dispatchEvent(new Event('foo'));
|
||||
}, "Aborting from a nested listener should remove it");
|
Загрузка…
Ссылка в новой задаче