90 lines
3.6 KiB
JavaScript
90 lines
3.6 KiB
JavaScript
const otherWindow = document.body.appendChild(document.createElement("iframe")).contentWindow;
|
|
|
|
["EventTarget", "XMLHttpRequest"].forEach(constructorName => {
|
|
async_test(t => {
|
|
const eventTarget = new otherWindow[constructorName]();
|
|
eventTarget.addEventListener("hi", t.step_func_done(e => {
|
|
assert_equals(otherWindow.event, undefined);
|
|
assert_equals(e, window.event);
|
|
}));
|
|
eventTarget.dispatchEvent(new Event("hi"));
|
|
}, "window.event for constructors from another global: " + constructorName);
|
|
});
|
|
|
|
// XXX: It would be good to test a subclass of EventTarget once we sort out
|
|
// https://github.com/heycam/webidl/issues/540
|
|
|
|
async_test(t => {
|
|
const element = document.body.appendChild(otherWindow.document.createElement("meh"));
|
|
element.addEventListener("yo", t.step_func_done(e => {
|
|
assert_equals(e, window.event);
|
|
}));
|
|
element.dispatchEvent(new Event("yo"));
|
|
}, "window.event and element from another document");
|
|
|
|
async_test(t => {
|
|
const doc = otherWindow.document,
|
|
element = doc.body.appendChild(doc.createElement("meh")),
|
|
child = element.appendChild(doc.createElement("bleh"));
|
|
element.addEventListener("yoyo", t.step_func(e => {
|
|
document.body.appendChild(element);
|
|
assert_equals(element.ownerDocument, document);
|
|
assert_equals(window.event, e);
|
|
assert_equals(otherWindow.event, undefined);
|
|
}), true);
|
|
element.addEventListener("yoyo", t.step_func(e => {
|
|
assert_equals(element.ownerDocument, document);
|
|
assert_equals(window.event, e);
|
|
assert_equals(otherWindow.event, undefined);
|
|
}), true);
|
|
child.addEventListener("yoyo", t.step_func_done(e => {
|
|
assert_equals(child.ownerDocument, document);
|
|
assert_equals(window.event, e);
|
|
assert_equals(otherWindow.event, undefined);
|
|
}));
|
|
child.dispatchEvent(new Event("yoyo"));
|
|
}, "window.event and moving an element post-dispatch");
|
|
|
|
test(t => {
|
|
const host = document.createElement("div"),
|
|
shadow = host.attachShadow({ mode: "open" }),
|
|
child = shadow.appendChild(document.createElement("trala")),
|
|
furtherChild = child.appendChild(document.createElement("waddup"));
|
|
let counter = 0;
|
|
host.addEventListener("hi", t.step_func(e => {
|
|
assert_equals(window.event, e);
|
|
assert_equals(counter++, 3);
|
|
}));
|
|
child.addEventListener("hi", t.step_func(e => {
|
|
assert_equals(window.event, undefined);
|
|
assert_equals(counter++, 2);
|
|
}));
|
|
furtherChild.addEventListener("hi", t.step_func(e => {
|
|
host.appendChild(child);
|
|
assert_equals(window.event, undefined);
|
|
assert_equals(counter++, 0);
|
|
}));
|
|
furtherChild.addEventListener("hi", t.step_func(e => {
|
|
assert_equals(window.event, undefined);
|
|
assert_equals(counter++, 1);
|
|
}));
|
|
furtherChild.dispatchEvent(new Event("hi", { composed: true, bubbles: true }));
|
|
assert_equals(counter, 4);
|
|
}, "window.event should not be affected by nodes moving post-dispatch");
|
|
|
|
async_test(t => {
|
|
const frame = document.body.appendChild(document.createElement("iframe"));
|
|
frame.src = "resources/event-global-extra-frame.html";
|
|
frame.onload = t.step_func_done((load_event) => {
|
|
const event = new Event("hi");
|
|
document.addEventListener("hi", frame.contentWindow.listener); // listener intentionally not wrapped in t.step_func
|
|
document.addEventListener("hi", t.step_func(e => {
|
|
assert_equals(event, e);
|
|
assert_equals(window.event, e);
|
|
}));
|
|
document.dispatchEvent(event);
|
|
assert_equals(frameState.event, event);
|
|
assert_equals(frameState.windowEvent, event);
|
|
assert_equals(frameState.parentEvent, load_event);
|
|
});
|
|
}, "Listener from a different global");
|