Update web-platform-tests to revision 0d318188757a9c996e20b82db201fd04de5aa255

This commit is contained in:
James Graham 2015-03-27 09:15:38 +00:00
parent b2a5225831
commit 1a81b18b9f
12321 changed files with 544385 additions and 6 deletions

View file

@ -0,0 +1,23 @@
<!doctype html>
<title>Event constants</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../constants.js"></script>
<div id="log"></div>
<script>
var objects;
setup(function() {
objects = [
[Event, "Event interface object"],
[Event.prototype, "Event prototype object"],
[document.createEvent("Event"), "Event object"],
[document.createEvent("CustomEvent"), "CustomEvent object"]
]
})
testConstants(objects, [
["NONE", 0],
["CAPTURING_PHASE", 1],
["AT_TARGET", 2],
["BUBBLING_PHASE", 3]
], "eventPhase")
</script>

View file

@ -0,0 +1,124 @@
<!doctype html>
<title>Event constructors</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
test(function() {
assert_throws(new TypeError(), function() {
new Event()
})
})
test(function() {
var test_error = { name: "test" }
assert_throws(test_error, function() {
new Event({ toString: function() { throw test_error; } })
})
})
test(function() {
var ev = new Event("")
assert_equals(ev.type, "")
assert_equals(ev.target, null)
assert_equals(ev.currentTarget, null)
assert_equals(ev.eventPhase, Event.NONE)
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, false)
assert_equals(ev.defaultPrevented, false)
assert_equals(ev.isTrusted, false)
assert_true(ev.timeStamp > 0)
assert_true("initEvent" in ev)
})
test(function() {
var ev = new Event("test")
assert_equals(ev.type, "test")
assert_equals(ev.target, null)
assert_equals(ev.currentTarget, null)
assert_equals(ev.eventPhase, Event.NONE)
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, false)
assert_equals(ev.defaultPrevented, false)
assert_equals(ev.isTrusted, false)
assert_true(ev.timeStamp > 0)
assert_true("initEvent" in ev)
})
test(function() {
var ev = Event("test")
assert_equals(ev.type, "test")
assert_equals(ev.target, null)
assert_equals(ev.currentTarget, null)
assert_equals(ev.eventPhase, Event.NONE)
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, false)
assert_equals(ev.defaultPrevented, false)
assert_equals(ev.isTrusted, false)
assert_true(ev.timeStamp > 0)
assert_true("initEvent" in ev)
})
test(function() {
var ev = new Event("I am an event", { bubbles: true, cancelable: false})
assert_equals(ev.type, "I am an event")
assert_equals(ev.bubbles, true)
assert_equals(ev.cancelable, false)
})
test(function() {
var ev = new Event("@", { bubblesIGNORED: true, cancelable: true})
assert_equals(ev.type, "@")
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, true)
})
test(function() {
var ev = new Event("@", { "bubbles\0IGNORED": true, cancelable: true})
assert_equals(ev.type, "@")
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, true)
})
test(function() {
var ev = new Event("Xx", { cancelable: true})
assert_equals(ev.type, "Xx")
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, true)
})
test(function() {
var ev = new Event("Xx", {})
assert_equals(ev.type, "Xx")
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, false)
})
test(function() {
var ev = new Event("Xx", {bubbles: true, cancelable: false, sweet: "x"})
assert_equals(ev.type, "Xx")
assert_equals(ev.bubbles, true)
assert_equals(ev.cancelable, false)
assert_equals(ev.sweet, undefined)
})
test(function() {
var called = []
var ev = new Event("Xx", {
get cancelable() {
called.push("cancelable")
return false
},
get bubbles() {
called.push("bubbles")
return true;
},
get sweet() {
called.push("sweet")
return "x"
}
})
assert_array_equals(called, ["bubbles", "cancelable"])
assert_equals(ev.type, "Xx")
assert_equals(ev.bubbles, true)
assert_equals(ev.cancelable, false)
assert_equals(ev.sweet, undefined)
})
test(function() {
var ev = new CustomEvent("$", {detail: 54, sweet: "x", sweet2: "x", cancelable:true})
assert_equals(ev.type, "$")
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, true)
assert_equals(ev.sweet, undefined)
assert_equals(ev.detail, 54)
})
</script>

View file

@ -0,0 +1,42 @@
<!doctype html>
<title>Event.defaultPrevented</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
var ev;
test(function() {
ev = document.createEvent("Event");
assert_equals(ev.defaultPrevented, false, "defaultPrevented");
}, "When an event is created, defaultPrevented should be initialized to false.");
test(function() {
ev.initEvent("foo", true, false);
assert_equals(ev.bubbles, true, "bubbles");
assert_equals(ev.cancelable, false, "cancelable");
assert_equals(ev.defaultPrevented, false, "defaultPrevented");
}, "initEvent should work correctly (not cancelable).");
test(function() {
assert_equals(ev.cancelable, false, "cancelable (before)");
ev.preventDefault();
assert_equals(ev.cancelable, false, "cancelable (after)");
assert_equals(ev.defaultPrevented, false, "defaultPrevented");
}, "preventDefault() should not change defaultPrevented if cancelable is false.");
test(function() {
ev.initEvent("foo", true, true);
assert_equals(ev.bubbles, true, "bubbles");
assert_equals(ev.cancelable, true, "cancelable");
assert_equals(ev.defaultPrevented, false, "defaultPrevented");
}, "initEvent should work correctly (cancelable).");
test(function() {
assert_equals(ev.cancelable, true, "cancelable (before)");
ev.preventDefault();
assert_equals(ev.cancelable, true, "cancelable (after)");
assert_equals(ev.defaultPrevented, true, "defaultPrevented");
}, "preventDefault() should change defaultPrevented if cancelable is false.");
test(function() {
ev.initEvent("foo", true, true);
assert_equals(ev.bubbles, true, "bubbles");
assert_equals(ev.cancelable, true, "cancelable");
assert_equals(ev.defaultPrevented, false, "defaultPrevented");
}, "initEvent should unset defaultPrevented.");
</script>

View file

@ -0,0 +1,68 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title> Event.bubbles attribute is set to false </title>
<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-initevent">
<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<table id="table" border="1" style="display: none">
<tbody id="table-body">
<tr id="table-row">
<td id="table-cell">Shady Grove</td>
<td>Aeolian</td>
</tr>
<tr id="parent">
<td id="target">Over the river, Charlie</td>
<td>Dorian</td>
</tr>
</tbody>
</table>
<script>
test(function() {
var event_type = "click";
var target = document.getElementById("target");
var targets = [
window,
document,
document.documentElement,
document.body,
document.getElementById("table"),
document.getElementById("table-body"),
document.getElementById("parent"),
target,
];
var expected_targets = targets.concat(target);
var phases = [
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.AT_TARGET,
Event.AT_TARGET,
];
var actual_targets = [], actual_phases = [];
var test_event = function(evt) {
actual_targets.push(evt.currentTarget);
actual_phases.push(evt.eventPhase);
}
for (var i = 0; i < targets.length; i++) {
targets[i].addEventListener(event_type, test_event, true);
targets[i].addEventListener(event_type, test_event, false);
}
var evt = document.createEvent("Event");
evt.initEvent(event_type, false, true);
target.dispatchEvent(evt);
assert_array_equals(actual_targets, expected_targets, "targets");
assert_array_equals(actual_phases, phases, "phases");
}, "Event.dispatchEvent with Event.bubbles set to false.");
</script>

View file

@ -0,0 +1,92 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title> Dispatch additional events inside an event listener </title>
<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<table id="table" border="1" style="display: none">
<tbody id="table-body">
<tr id="table-row">
<td id="table-cell">Shady Grove</td>
<td>Aeolian</td>
</tr>
<tr id="parent">
<td id="target">Over the river, Charlie</td>
<td>Dorian</td>
</tr>
</tbody>
</table>
<script>
async_test(function() {
var event_type = "bar";
var target = document.getElementById("target");
var parent = document.getElementById("parent");
var tbody = document.getElementById("table-body");
var table = document.getElementById("table");
var body = document.body;
var html = document.documentElement;
var targets = [window, document, html, body, table, tbody, parent, target];
var expected_targets = [
window,
document,
html,
body,
table,
tbody,
parent,
target,
target,
parent,
tbody,
table,
body,
html,
document,
window
];
var expected_listeners = [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1];
var actual_targets = [], actual_listeners = [];
var test_event_function = function(i) {
return this.step_func(function(evt) {
actual_targets.push(evt.currentTarget);
actual_listeners.push(i);
if (evt.eventPhase != evt.BUBBLING_PHASE && evt.currentTarget.foo != 1) {
evt.currentTarget.removeEventListener(event_type, event_handlers[0], true);
evt.currentTarget.addEventListener(event_type, event_handlers[2], true);
evt.currentTarget.foo = 1;
}
if (evt.eventPhase != evt.CAPTURING_PHASE && evt.currentTarget.foo != 3) {
evt.currentTarget.removeEventListener(event_type, event_handlers[0], false);
evt.currentTarget.addEventListener(event_type, event_handlers[3], false);
evt.currentTarget.foo = 3;
}
});
}.bind(this);
var event_handlers = [
test_event_function(0),
test_event_function(1),
test_event_function(2),
test_event_function(3),
];
for (var i = 0; i < targets.length; ++i) {
targets[i].addEventListener(event_type, event_handlers[0], true);
targets[i].addEventListener(event_type, event_handlers[1], false);
}
var evt = document.createEvent("Event");
evt.initEvent(event_type, true, true);
target.dispatchEvent(evt);
assert_array_equals(actual_targets, expected_targets, "actual_targets");
assert_array_equals(actual_listeners, expected_listeners, "actual_listeners");
this.done();
});
</script>

View file

@ -0,0 +1,70 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>EventTarget.addEventListener: capture argument omitted</title>
<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener">
<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<table id="table" border="1" style="display: none">
<tbody id="table-body">
<tr id="table-row">
<td id="table-cell">Shady Grove</td>
<td>Aeolian</td>
</tr>
<tr id="parent">
<td id="target">Over the river, Charlie</td>
<td>Dorian</td>
</tr>
</tbody>
</table>
<script>
test(function() {
var event_type = "foo";
var target = document.getElementById("target");
var targets = [
target,
document.getElementById("parent"),
document.getElementById("table-body"),
document.getElementById("table"),
document.body,
document.documentElement,
document,
window
];
var phases = [
Event.AT_TARGET,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE
];
var actual_targets = [], actual_phases = [];
var test_event = function(evt) {
actual_targets.push(evt.currentTarget);
actual_phases.push(evt.eventPhase);
}
for (var i = 0; i < targets.length; i++) {
targets[i].addEventListener(event_type, test_event);
}
var evt = document.createEvent("Event");
evt.initEvent(event_type, true, true);
target.dispatchEvent(evt);
for (var i = 0; i < targets.length; i++) {
targets[i].removeEventListener(event_type, test_event);
}
target.dispatchEvent(evt);
assert_array_equals(actual_targets, targets, "targets");
assert_array_equals(actual_phases, phases, "phases");
}, "EventTarget.addEventListener with the capture argument omitted");
</script>

View file

@ -0,0 +1,28 @@
<!DOCTYPE html>
<meta charset=urf-8>
<title>EventTarget#dispatchEvent(): redispatching a native event</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
async_test(function() {
var event;
document.addEventListener("DOMContentLoaded", this.step_func(function(e) {
assert_true(e.isTrusted, "Should be trusted when first handled");
event = e;
}), true);
window.onload = this.step_func_done(function() {
var received = 0;
var target = document.createElement("span");
target.addEventListener("DOMContentLoaded", this.step_func(function(e) {
assert_false(e.isTrusted, "Should not be trusted during redispatching");
++received;
}), true);
assert_true(event.isTrusted, "Should be trusted before redispatching");
target.dispatchEvent(event);
assert_false(event.isTrusted, "Should not be trusted after redispatching");
assert_equals(received, 1);
});
});
</script>

View file

@ -0,0 +1,66 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title> Dispatch additional events inside an event listener </title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<table id="table" border="1" style="display: none">
<tbody id="table-body">
<tr id="table-row">
<td id="table-cell">Shady Grove</td>
<td>Aeolian</td>
</tr>
<tr id="parent">
<td id="target">Over the river, Charlie</td>
<td>Dorian</td>
</tr>
</tbody>
</table>
<script>
test(function() {
var event_type = "foo";
var target = document.getElementById("target");
var parent = document.getElementById("parent");
var tbody = document.getElementById("table-body");
var table = document.getElementById("table");
var body = document.body;
var html = document.documentElement;
var targets = [window, document, html, body, table, tbody, parent, target];
var expected_targets = [
window, document, html, body, table,
target, parent, tbody,
table, body, html, document, window,
tbody, parent, target];
var actual_targets = [];
var expected_types = [
"foo", "foo", "foo", "foo", "foo",
"bar", "bar", "bar",
"bar", "bar", "bar", "bar", "bar",
"foo", "foo", "foo"
];
var actual_targets = [], actual_types = [];
var test_event = this.step_func(function(evt) {
actual_targets.push(evt.currentTarget);
actual_types.push(evt.type);
if (table == evt.currentTarget && event_type == evt.type) {
var e = document.createEvent("Event");
e.initEvent("bar", true, true);
target.dispatchEvent(e);
}
});
for (var i = 0; i < targets.length; ++i) {
targets[i].addEventListener(event_type, test_event, true);
targets[i].addEventListener("bar", test_event, false);
}
var evt = document.createEvent("Event");
evt.initEvent(event_type, false, true);
target.dispatchEvent(evt);
assert_array_equals(actual_targets, expected_targets, "actual_targets");
assert_array_equals(actual_types, expected_types, "actual_types");
});
</script>

View file

@ -0,0 +1,73 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title> Determined event propagation path - target moved </title>
<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<table id="table" border="1" style="display: none">
<tbody id="table-body">
<tr id="table-row">
<td id="table-cell">Shady Grove</td>
<td>Aeolian</td>
</tr>
<tr id="parent">
<td id="target">Over the river, Charlie</td>
<td>Dorian</td>
</tr>
</tbody>
</table>
<script>
test(function() {
var event_type = "foo";
var target = document.getElementById("target");
var parent = document.getElementById("parent");
var tbody = document.getElementById("table-body");
var table = document.getElementById("table");
var body = document.body;
var html = document.documentElement;
var targets = [window, document, html, body, table, tbody, parent, target];
var expected_targets = targets.concat([target, parent, tbody, table, body, html, document, window]);
var phases = [
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.AT_TARGET,
Event.AT_TARGET,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
];
var actual_targets = [], actual_phases = [];
var test_event = this.step_func(function(evt) {
if (parent === target.parentNode) {
var table_row = document.getElementById("table-row");
table_row.appendChild(parent.removeChild(target));
}
actual_targets.push(evt.currentTarget);
actual_phases.push(evt.eventPhase);
});
for (var i = 0; i < targets.length; i++) {
targets[i].addEventListener(event_type, test_event, true);
targets[i].addEventListener(event_type, test_event, false);
}
var evt = document.createEvent("Event");
evt.initEvent(event_type, true, true);
target.dispatchEvent(evt);
assert_array_equals(actual_targets, expected_targets, "targets");
assert_array_equals(actual_phases, phases, "phases");
}, "Event propagation path when an element in it is moved within the DOM");
</script>

View file

@ -0,0 +1,72 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>Determined event propagation path - target removed</title>
<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<table id="table" border="1" style="display: none">
<tbody id="table-body">
<tr id="table-row">
<td id="table-cell">Shady Grove</td>
<td>Aeolian</td>
</tr>
<tr id="parent">
<td id="target">Over the river, Charlie</td>
<td>Dorian</td>
</tr>
</tbody>
</table>
<script>
test(function() {
var event_type = "foo";
var target = document.getElementById("target");
var parent = document.getElementById("parent");
var tbody = document.getElementById("table-body");
var table = document.getElementById("table");
var body = document.body;
var html = document.documentElement;
var targets = [window, document, html, body, table, tbody, parent, target];
var expected_targets = targets.concat([target, parent, tbody, table, body, html, document, window]);
var phases = [
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.CAPTURING_PHASE,
Event.AT_TARGET,
Event.AT_TARGET,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
Event.BUBBLING_PHASE,
];
var actual_targets = [], actual_phases = [];
var test_event = this.step_func(function(evt) {
if (parent === target.parentNode) {
parent.removeChild(target);
}
actual_targets.push(evt.currentTarget);
actual_phases.push(evt.eventPhase);
});
for (var i = 0; i < targets.length; i++) {
targets[i].addEventListener(event_type, test_event, true);
targets[i].addEventListener(event_type, test_event, false);
}
var evt = document.createEvent("Event");
evt.initEvent(event_type, true, true);
target.dispatchEvent(evt);
assert_array_equals(actual_targets, expected_targets, "targets");
assert_array_equals(actual_phases, phases, "phases");
}, "Event propagation path when an element in it is removed from the DOM");
</script>

View file

@ -0,0 +1,121 @@
<!DOCTYPE html>
<title>Event.initEvent</title>
<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
var booleans = [true, false];
booleans.forEach(function(bubbles) {
booleans.forEach(function(cancelable) {
test(function() {
var e = document.createEvent("Event")
e.initEvent("type", bubbles, cancelable)
// Step 3.
// Can't test the stop propagation flag and stop immediate propagation flag.
assert_equals(e.defaultPrevented, false, "defaultPrevented")
// Step 4.
assert_equals(e.isTrusted, false, "isTrusted")
// Step 5.
assert_equals(e.target, null, "target")
// Step 6.
assert_equals(e.type, "type", "type")
// Step 7.
assert_equals(e.bubbles, bubbles, "bubbles")
// Step 8.
assert_equals(e.cancelable, cancelable, "cancelable")
}, "Properties of initEvent(type, " + bubbles + ", " + cancelable + ")")
})
})
test(function() {
var e = document.createEvent("Event")
e.initEvent("type 1", true, false)
assert_equals(e.type, "type 1", "type (first init)")
assert_equals(e.bubbles, true, "bubbles (first init)")
assert_equals(e.cancelable, false, "cancelable (first init)")
e.initEvent("type 2", false, true)
assert_equals(e.type, "type 2", "type (second init)")
assert_equals(e.bubbles, false, "bubbles (second init)")
assert_equals(e.cancelable, true, "cancelable (second init)")
}, "Calling initEvent multiple times (getting type).")
test(function() {
// https://bugzilla.mozilla.org/show_bug.cgi?id=998809
var e = document.createEvent("Event")
e.initEvent("type 1", true, false)
assert_equals(e.bubbles, true, "bubbles (first init)")
assert_equals(e.cancelable, false, "cancelable (first init)")
e.initEvent("type 2", false, true)
assert_equals(e.type, "type 2", "type (second init)")
assert_equals(e.bubbles, false, "bubbles (second init)")
assert_equals(e.cancelable, true, "cancelable (second init)")
}, "Calling initEvent multiple times (not getting type).")
// Step 2.
async_test(function() {
// https://www.w3.org/Bugs/Public/show_bug.cgi?id=17715
var e = document.createEvent("Event")
e.initEvent("type", false, false)
assert_equals(e.type, "type", "type (first init)")
assert_equals(e.bubbles, false, "bubbles (first init)")
assert_equals(e.cancelable, false, "cancelable (first init)")
var target = document.createElement("div")
target.addEventListener("type", this.step_func(function() {
e.initEvent("fail", true, true)
assert_equals(e.type, "type", "type (second init)")
assert_equals(e.bubbles, false, "bubbles (second init)")
assert_equals(e.cancelable, false, "cancelable (second init)")
}), false)
assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
this.done()
}, "Calling initEvent must not have an effect during dispatching.")
async_test(function() {
var e = document.createEvent("Event")
e.initEvent("type", false, false)
e.stopPropagation()
var target = document.createElement("div")
target.addEventListener("type", this.step_func(function() {
assert_unreached("")
}), false)
assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
e.initEvent("type", false, false)
var called = false
var target = document.createElement("div")
target.addEventListener("type", this.step_func(function() {
called = true
}), false)
assert_false(called)
assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
assert_true(called)
this.done()
}, "Calling initEvent must unset the stop propagation flag.")
async_test(function() {
var e = document.createEvent("Event")
e.initEvent("type", false, false)
var target = document.createElement("div")
target.addEventListener("type", this.step_func(function() {
e.initEvent("type2", true, true);
assert_equals(e.type, "type", "initEvent type setter should short-circuit");
assert_false(e.bubbles, "initEvent bubbles setter should short-circuit");
assert_false(e.cancelable, "initEvent cancelable setter should short-circuit");
}), false)
assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
this.done()
}, "Calling initEvent during propagation.")
</script>

View file

@ -0,0 +1,38 @@
<!doctype html>
<title>Event propagation tests</title>
<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
<div id=log></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
"use strict";
function testPropagationFlag(ev, expected, desc) {
test(function() {
var called = false;
var callback = function() { called = true };
document.head.addEventListener("foo", callback);
document.head.dispatchEvent(ev);
// Gecko resets the flags after dispatching; it will happily dispatch
// the event the second time around.
document.head.dispatchEvent(ev);
assert_equals(called, expected, "Propagation flag");
document.head.removeEventListener("foo", callback);
}, desc);
}
var ev = document.createEvent("Event");
ev.initEvent("foo", true, false);
testPropagationFlag(ev, true, "Newly-created Event");
ev.stopPropagation();
testPropagationFlag(ev, false, "After stopPropagation()");
ev.initEvent("foo", true, false);
testPropagationFlag(ev, true, "Reinitialized after stopPropagation()");
var ev = document.createEvent("Event");
ev.initEvent("foo", true, false);
ev.stopImmediatePropagation();
testPropagationFlag(ev, false, "After stopImmediatePropagation()");
ev.initEvent("foo", true, false);
testPropagationFlag(ev, true, "Reinitialized after stopImmediatePropagation()");
</script>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<title>Event.type set to the empty string</title>
<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-type">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
function do_test(t, e) {
assert_equals(e.type, "", "type");
assert_equals(e.bubbles, false, "bubbles");
assert_equals(e.cancelable, false, "cancelable");
var target = document.createElement("div");
var handled = false;
target.addEventListener("", t.step_func(function(e) {
handled = true;
}));
assert_true(target.dispatchEvent(e));
assert_true(handled);
}
async_test(function() {
var e = document.createEvent("Event");
e.initEvent("", false, false);
do_test(this, e);
this.done();
}, "initEvent");
async_test(function() {
var e = new Event("");
do_test(this, e);
this.done();
}, "Constructor");
</script>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<title>Event.type</title>
<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-type">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
var e = document.createEvent("Event")
assert_equals(e.type, "");
}, "Event.type should initially be the empty string");
test(function() {
var e = document.createEvent("Event")
e.initEvent("foo", false, false)
assert_equals(e.type, "foo")
}, "Event.type should be initialized by initEvent");
test(function() {
var e = new Event("bar")
assert_equals(e.type, "bar")
}, "Event.type should be initialized by the constructor");
</script>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>EventTarget.addEventListener</title>
<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
// Step 1.
test(function() {
assert_equals(document.addEventListener("x", null, false), undefined);
assert_equals(document.addEventListener("x", null, true), undefined);
assert_equals(document.addEventListener("x", null), undefined);
}, "Adding a null event listener should succeed");
</script>

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>EventTarget.dispatchEvent: return value</title>
<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-preventdefault">
<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-defaultprevented">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<table id="table" border="1" style="display: none">
<tbody id="table-body">
<tr id="table-row">
<td id="table-cell">Shady Grove</td>
<td>Aeolian</td>
</tr>
<tr id="parent">
<td id="target">Over the river, Charlie</td>
<td>Dorian</td>
</tr>
</tbody>
</table>
<script>
test(function() {
var event_type = "foo";
var target = document.getElementById("target");
var parent = document.getElementById("parent");
var default_prevented;
parent.addEventListener(event_type, function(e) {}, true);
target.addEventListener(event_type, function(e) {
evt.preventDefault();
default_prevented = evt.defaultPrevented;
}, true);
target.addEventListener(event_type, function(e) {}, true);
var evt = document.createEvent("Event");
evt.initEvent(event_type, true, true);
assert_true(parent.dispatchEvent(evt));
assert_false(target.dispatchEvent(evt));
assert_true(default_prevented);
}, "Return value of EventTarget.dispatchEvent.");
</script>

View file

@ -0,0 +1,104 @@
<!DOCTYPE html>
<meta charset=utf-8>
<title>EventTarget.dispatchEvent</title>
<link rel="author" title="Olli Pettay" href="mailto:Olli.Pettay@gmail.com">
<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/dom/nodes/Document-createEvent.js"></script>
<div id="log"></div>
<script>
setup({
"allow_uncaught_exception": true,
})
test(function() {
assert_throws(new TypeError(), function() { document.dispatchEvent(null) })
}, "Calling dispatchEvent(null).")
aliases.forEach(function(alias) {
test(function() {
var e = document.createEvent(alias[0])
assert_equals(e.type, "", "Event type should be empty string before initialization")
assert_throws("InvalidStateError", function() { document.dispatchEvent(e) })
}, "If the event's initialized flag is not set, an InvalidStateError must be thrown (" + alias [0] + ").")
})
var dispatch_dispatch = async_test("If the event's dispatch flag is set, an InvalidStateError must be thrown.")
dispatch_dispatch.step(function() {
var e = document.createEvent("Event")
e.initEvent("type", false, false)
var target = document.createElement("div")
target.addEventListener("type", dispatch_dispatch.step_func(function() {
assert_throws("InvalidStateError", function() {
target.dispatchEvent(e)
})
assert_throws("InvalidStateError", function() {
document.dispatchEvent(e)
})
}), false)
assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
dispatch_dispatch.done()
})
test(function() {
// https://www.w3.org/Bugs/Public/show_bug.cgi?id=17713
// https://www.w3.org/Bugs/Public/show_bug.cgi?id=17714
var e = document.createEvent("Event")
e.initEvent("type", false, false)
var called = []
var target = document.createElement("div")
target.addEventListener("type", function() {
called.push("First")
throw new Error()
}, false)
target.addEventListener("type", function() {
called.push("Second")
}, false)
assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
assert_array_equals(called, ["First", "Second"],
"Should have continued to call other event listeners")
}, "Exceptions from event listeners must not be propagated.")
async_test(function() {
var results = []
var outerb = document.createElement("b")
var middleb = outerb.appendChild(document.createElement("b"))
var innerb = middleb.appendChild(document.createElement("b"))
outerb.addEventListener("x", this.step_func(function() {
middleb.addEventListener("x", this.step_func(function() {
results.push("middle")
}), true)
results.push("outer")
}), true)
innerb.dispatchEvent(new Event("x"))
assert_array_equals(results, ["outer", "middle"])
this.done()
}, "Event listeners added during dispatch should be called");
async_test(function() {
var results = []
var b = document.createElement("b")
b.addEventListener("x", this.step_func(function() {
results.push(1)
}), true)
b.addEventListener("x", this.step_func(function() {
results.push(2)
}), false)
b.addEventListener("x", this.step_func(function() {
results.push(3)
}), true)
b.dispatchEvent(new Event("x"))
assert_array_equals(results, [1, 2, 3])
this.done()
}, "Event listeners should be called in order of addition")
</script>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>EventTarget.removeEventListener</title>
<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
// Step 1.
test(function() {
assert_equals(document.removeEventListener("x", null, false), undefined);
assert_equals(document.removeEventListener("x", null, true), undefined);
assert_equals(document.removeEventListener("x", null), undefined);
}, "removing a null event listener should succeed");
</script>

View file

@ -0,0 +1,25 @@
<!doctype html>
<title>ProgressEvent constructor</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
test(function() {
var ev = new ProgressEvent("test")
assert_equals(ev.type, "test")
assert_equals(ev.target, null)
assert_equals(ev.currentTarget, null)
assert_equals(ev.eventPhase, Event.NONE)
assert_equals(ev.bubbles, false)
assert_equals(ev.cancelable, false)
assert_equals(ev.defaultPrevented, false)
assert_equals(ev.isTrusted, false)
assert_true(ev.timeStamp > 0)
assert_true("initEvent" in ev)
}, "Default event values.")
test(function() {
assert_throws("NotSupportedError", function() {
document.createEvent("ProgressEvent")
})
}, "document.createEvent() should not work with ProgressEvent.")
</script>