1<!DOCTYPE html>
2<title>Synthetic events are always cancelable by default</title>
3<link rel="help" href="https://dom.spec.whatwg.org/#dictdef-eventinit">
4<script src="/resources/testharness.js"></script>
5<script src="/resources/testharnessreport.js"></script>
6<script>
7const eventsMap = {
8  wheel: 'WheelEvent',
9  mousewheel: 'WheelEvent',
10  touchstart: 'TouchEvent',
11  touchmove: 'TouchEvent',
12  touchend: 'TouchEvent',
13  touchcancel: 'TouchEvent',
14}
15function isCancelable(eventName, interfaceName) {
16  test(() => {
17    assert_implements(interfaceName in self, `${interfaceName} should be supported`);
18    let defaultPrevented = null;
19    addEventListener(eventName, event => {
20      event.preventDefault();
21      defaultPrevented = event.defaultPrevented;
22    });
23    const event = new self[interfaceName](eventName);
24    assert_false(event.cancelable, 'cancelable');
25    const dispatchEventReturnValue = dispatchEvent(event);
26    assert_false(defaultPrevented, 'defaultPrevented');
27    assert_true(dispatchEventReturnValue, 'dispatchEvent() return value');
28  }, `Synthetic ${eventName} event with interface ${interfaceName} is not cancelable`);
29}
30for (const eventName in eventsMap) {
31  isCancelable(eventName, eventsMap[eventName]);
32  isCancelable(eventName, 'Event');
33}
34</script>
35