mirror of
https://github.com/servo/servo.git
synced 2025-06-24 09:04:33 +01:00
153 lines
3.9 KiB
HTML
153 lines
3.9 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset="utf-8">
|
|
<title>Event constructors</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<div id="log"></div>
|
|
<script>
|
|
function assert_props(iface, event, defaults) {
|
|
assert_true(event instanceof self[iface]);
|
|
expected[iface].properties.forEach(function(p) {
|
|
var property = p[0], value = p[defaults ? 1 : 2];
|
|
assert_true(property in event,
|
|
"Event " + format_value(event) + " should have a " +
|
|
property + " property");
|
|
assert_equals(event[property], value,
|
|
"The value of the " + property + " property should be " +
|
|
format_value(value));
|
|
});
|
|
if ("parent" in expected[iface]) {
|
|
assert_props(expected[iface].parent, event, defaults);
|
|
}
|
|
}
|
|
|
|
var EventModifierInit = [
|
|
["ctrlKey", false, true],
|
|
["shiftKey", false, true],
|
|
["altKey", false, true],
|
|
["metaKey", false, true],
|
|
];
|
|
var expected = {
|
|
"Event": {
|
|
"properties": [
|
|
["bubbles", false, true],
|
|
["cancelable", false, true],
|
|
],
|
|
},
|
|
|
|
"UIEvent": {
|
|
"parent": "Event",
|
|
"properties": [
|
|
["view", null, window],
|
|
["detail", 0, 7],
|
|
],
|
|
},
|
|
|
|
"FocusEvent": {
|
|
"parent": "UIEvent",
|
|
"properties": [
|
|
["relatedTarget", null, document],
|
|
],
|
|
},
|
|
|
|
"MouseEvent": {
|
|
"parent": "UIEvent",
|
|
"properties": EventModifierInit.concat([
|
|
["screenX", 0, 40],
|
|
["screenY", 0, 40],
|
|
["clientX", 0, 40],
|
|
["clientY", 0, 40],
|
|
["button", 0, 40],
|
|
["buttons", 0, 40],
|
|
["relatedTarget", null, document],
|
|
]),
|
|
},
|
|
|
|
"WheelEvent": {
|
|
"parent": "MouseEvent",
|
|
"properties": [
|
|
["deltaX", 0.0, 3.1],
|
|
["deltaY", 0.0, 3.1],
|
|
["deltaZ", 0.0, 3.1],
|
|
["deltaMode", 0, 40],
|
|
],
|
|
},
|
|
|
|
"KeyboardEvent": {
|
|
"parent": "UIEvent",
|
|
"properties": EventModifierInit.concat([
|
|
["key", "", "string"],
|
|
["code", "", "string"],
|
|
["location", 0, 7],
|
|
["repeat", false, true],
|
|
["isComposing", false, true],
|
|
["charCode", 0, 7],
|
|
["keyCode", 0, 7],
|
|
["which", 0, 7],
|
|
]),
|
|
},
|
|
|
|
"CompositionEvent": {
|
|
"parent": "UIEvent",
|
|
"properties": [
|
|
["data", "", "string"],
|
|
],
|
|
},
|
|
};
|
|
|
|
Object.keys(expected).forEach(function(iface) {
|
|
test(function() {
|
|
var event = new self[iface]("type");
|
|
assert_props(iface, event, true);
|
|
}, iface + " constructor (no argument)");
|
|
|
|
test(function() {
|
|
var event = new self[iface]("type", undefined);
|
|
assert_props(iface, event, true);
|
|
}, iface + " constructor (undefined argument)");
|
|
|
|
test(function() {
|
|
var event = new self[iface]("type", null);
|
|
assert_props(iface, event, true);
|
|
}, iface + " constructor (null argument)");
|
|
|
|
test(function() {
|
|
var event = new self[iface]("type", {});
|
|
assert_props(iface, event, true);
|
|
}, iface + " constructor (empty argument)");
|
|
|
|
test(function() {
|
|
var dictionary = {};
|
|
expected[iface].properties.forEach(function(p) {
|
|
var property = p[0], value = p[1];
|
|
dictionary[property] = value;
|
|
});
|
|
var event = new self[iface]("type", dictionary);
|
|
assert_props(iface, event, true);
|
|
}, iface + " constructor (argument with default values)");
|
|
|
|
test(function() {
|
|
function fill_in(iface, dictionary) {
|
|
if ("parent" in expected[iface]) {
|
|
fill_in(expected[iface].parent, dictionary)
|
|
}
|
|
expected[iface].properties.forEach(function(p) {
|
|
var property = p[0], value = p[2];
|
|
dictionary[property] = value;
|
|
});
|
|
}
|
|
|
|
var dictionary = {};
|
|
fill_in(iface, dictionary);
|
|
|
|
var event = new self[iface]("type", dictionary);
|
|
assert_props(iface, event, false);
|
|
}, iface + " constructor (argument with non-default values)");
|
|
});
|
|
|
|
test(function () {
|
|
assert_throws(new TypeError(), function() {
|
|
new UIEvent("x", { view: 7 })
|
|
});
|
|
}, "UIEvent constructor (view argument with wrong type)")
|
|
</script>
|