| Index: LayoutTests/fast/dom/global-event-handlers.html
|
| diff --git a/LayoutTests/fast/dom/global-event-handlers.html b/LayoutTests/fast/dom/global-event-handlers.html
|
| index 9432fad8ebc0538c54dbfe6e23c90cc0fc222756..117eb7338d9f6fb2fe297d7780c1ae8bf5ce72a2 100644
|
| --- a/LayoutTests/fast/dom/global-event-handlers.html
|
| +++ b/LayoutTests/fast/dom/global-event-handlers.html
|
| @@ -65,46 +65,81 @@ var attributes = [
|
| "onvolumechange",
|
| "onwaiting"
|
| ];
|
| -function testSet(object, attribute, name) {
|
| - function nop() {}
|
| +function getObject(interface) {
|
| + switch(interface) {
|
| + case "Element":
|
| + var e = document.createElementNS("http://example.com/", "example");
|
| + assert_true(e instanceof Element);
|
| + assert_false(e instanceof HTMLElement);
|
| + assert_false(e instanceof SVGElement);
|
| + return e;
|
| + case "HTMLElement":
|
| + var e = document.createElement("html");
|
| + assert_true(e instanceof HTMLElement);
|
| + return e;
|
| + case "SVGElement":
|
| + var e = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
| + assert_true(e instanceof SVGElement);
|
| + return e;
|
| + case "Document":
|
| + assert_true(document instanceof Document);
|
| + return document;
|
| + case "Window":
|
| + assert_true(window instanceof Window);
|
| + return window;
|
| + }
|
| + assert_unreached();
|
| +}
|
| +function testSet(interface, attribute) {
|
| test(function() {
|
| + var object = getObject(interface);
|
| + function nop() {}
|
| assert_equals(object[attribute], null, "Initially null");
|
| object[attribute] = nop;
|
| assert_equals(object[attribute], nop, "Return same function");
|
| document[attribute] = "";
|
| assert_equals(document[attribute], null, "Return null after setting string");
|
| - }, "Set " + name + "." + attribute);
|
| -}
|
| -function testEnumerate(object, name) {
|
| - // Object.propertyIsEnumerable cannot be used because it doesn't
|
| - // work with properties inherited through the prototype chain.
|
| - test(function() {
|
| - var seen = {};
|
| - attributes.forEach(function(attribute) {
|
| - seen[attribute] = false;
|
| - });
|
| - for (var attribute in object) {
|
| - seen[attribute] = true;
|
| - }
|
| - attributes.forEach(function(attribute) {
|
| - assert_true(seen[attribute], "Found " + attribute);
|
| - });
|
| - }, "Enumerate " + name + ".on*");
|
| + }, "Set " + interface + "." + attribute);
|
| }
|
| -attributes.forEach(function(attribute) {
|
| - testSet(document.createElement('div'), attribute, "element");
|
| - test(function() {
|
| - var element = document.createElement('div');
|
| +function testReflect(interface, attribute) {
|
| + test(function() {
|
| + var element = getObject(interface);
|
| assert_equals(element.getAttribute(attribute), null, "Initially null");
|
| element.setAttribute(attribute, "return");
|
| assert_equals(element.getAttribute(attribute), "return", "Return same string");
|
| assert_equals(typeof element[attribute], "function", "Convert to function");
|
| - }, "Reflect element." + attribute);
|
| - testSet(document, attribute, "document");
|
| - testSet(window, attribute, "window");
|
| + }, "Reflect " + interface + "." + attribute);
|
| +}
|
| +// Object.propertyIsEnumerable cannot be used because it doesn't
|
| +// work with properties inherited through the prototype chain.
|
| +var enumerable = {
|
| + "Element": {},
|
| + "HTMLElement": {},
|
| + "SVGElement": {},
|
| + "Document": {},
|
| + "Window": {}
|
| +};
|
| +Object.keys(enumerable).forEach(function(interface) {
|
| + for (var attribute in getObject(interface)) {
|
| + enumerable[interface][attribute] = true;
|
| + }
|
| +});
|
| +function testEnumerate(interface, attribute) {
|
| + test(function() {
|
| + assert_true(enumerable[interface][attribute]);
|
| + }, "Enumerate " + interface + "." + attribute);
|
| +}
|
| +attributes.forEach(function(attribute) {
|
| + test(function() {
|
| + assert_false(attribute in getObject("Element"));
|
| + }, "No Element." + attribute);
|
| + testSet("HTMLElement", attribute);
|
| + testEnumerate("HTMLElement", attribute);
|
| + testReflect("HTMLElement", attribute);
|
| + testSet("Document", attribute);
|
| + testEnumerate("Document", attribute);
|
| + testSet("Window", attribute);
|
| + testEnumerate("Window", attribute);
|
| });
|
| -testEnumerate(document.createElement('div'), "element");
|
| -testEnumerate(document, "document");
|
| -testEnumerate(window, "window");
|
| </script>
|
| <div id="log"></div>
|
|
|