test(() => { // See https://dom.spec.whatwg.org/#dom-event-eventphase. const CAPTURING_PHASE = 1; const BUBBLING_PHASE = 3; // First, create a div underneath the `` element. It will be the // dispatch target for synthetic click events. const target = document.querySelector('body').appendChild(document.createElement('div')); const body = document.querySelector('body'); const captureObservable = body.when('click', {capture: true}); const bubbleObservable = body.when('click', {capture: false}); const results = []; captureObservable.subscribe(e => results.push(e.eventPhase)); bubbleObservable.subscribe(e => results.push(e.eventPhase)); target.dispatchEvent(new MouseEvent('click', {bubbles: true})); assert_array_equals(results, [CAPTURING_PHASE, BUBBLING_PHASE]); }, "EventTarget Observables can listen for events in the capturing or bubbling phase"); test(() => { const target = new EventTarget(); const observable = target.when('event', {passive: true}); observable.subscribe(event => { assert_false(event.defaultPrevented); // Should do nothing, since `observable` is "passive". event.preventDefault(); assert_false(event.defaultPrevented); }); // Create a cancelable event which ordinarily would be able to have its // "default" prevented. const event = new Event('event', {cancelable: true}); target.dispatchEvent(event); }, "EventTarget Observables can be 'passive'");