65 lines
1.7 KiB
HTML
65 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
window.jsTestIsAsync = true;
|
|
|
|
function addListener(eventType, prop) {
|
|
document.addEventListener(eventType, function(event) {
|
|
window.prop = prop;
|
|
// Despite the earlier assignment of the local variable to null and
|
|
// the following garabage collection, the property should still be
|
|
// present here.
|
|
shouldBeEqualToString("event[prop]", "foo");
|
|
window.prop = undefined;
|
|
window.postMessage("done", "*");
|
|
});
|
|
}
|
|
|
|
// Run the tests whenever a notification arrives, which indicates that the
|
|
// previous test has finished.
|
|
window.addEventListener("message", function(message) {
|
|
runNextTest();
|
|
}, false);
|
|
|
|
function newEvent(eventType, prop, value) {
|
|
return eval("new " + eventType + "('" + eventType + "', { " + prop + ": value })");
|
|
}
|
|
|
|
// The events that we want to test, with the properties that each one uses.
|
|
var events = [
|
|
{ eventType: "CustomEvent", prop: "detail" },
|
|
{ eventType: "MessageEvent", prop: "data" },
|
|
{ eventType: "PopStateEvent", prop: "state" },
|
|
{ eventType: "ErrorEvent", prop: "error" },
|
|
];
|
|
|
|
function runNextTest () {
|
|
var evt = events.pop();
|
|
if (!evt) {
|
|
finishJSTest();
|
|
return;
|
|
}
|
|
|
|
debug("");
|
|
debug("Testing: " + evt.eventType + "." + evt.prop);
|
|
var value = "foo";
|
|
var eventToDispatch = newEvent(evt.eventType, evt.prop, value);
|
|
value = null;
|
|
gc();
|
|
addListener(evt.eventType, evt.prop);
|
|
document.dispatchEvent(eventToDispatch);
|
|
};
|
|
|
|
// This test is meaningless without testRunner.
|
|
if (window.testRunner) {
|
|
runNextTest();
|
|
}
|
|
</script>
|
|
</body>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</html>
|