| <!doctype html> | |
| <meta charset=utf-8> | |
| <title>Test handling of attributes that should not be mapped into style, but | |
| incorrectly were in some browsers</title> | |
| <script src=/resources/testharness.js></script> | |
| <script src=/resources/testharnessreport.js></script> | |
| <body> | |
| <div id="container" style="display: none"></div> | |
| <iframe></iframe> | |
| <script> | |
| /* | |
| * We wand to test both quirks and standards mode. We can use the fact that | |
| * our document is in standards mode and the about:blank iframe we have is in | |
| * quirks mode. | |
| */ | |
| test(() => { | |
| assert_equals(document.compatMode, "CSS1Compat") | |
| }, "We should be in standards mode"); | |
| const container = document.getElementById("container"); | |
| const frameDoc = document.querySelector("iframe").contentDocument; | |
| test(() => { | |
| assert_equals(frameDoc.compatMode, "BackCompat") | |
| }, "Subframe should be in quirks mode"); | |
| const frameContainer = frameDoc.createElement("div"); | |
| frameContainer.style.display = "none"; | |
| frameDoc.body.appendChild(frameContainer); | |
| function newElem(name) { | |
| return (parent) => | |
| parent.appendChild(parent.ownerDocument.createElement(name)); | |
| } | |
| /* | |
| * Array of tests. Each test consists of the following information: | |
| * | |
| * 1) An element creation function, which takes a parent element as an | |
| * argument. | |
| * 2) The name of the attribute to set | |
| * 3) The name of the CSS property to get. | |
| */ | |
| const tests = [ | |
| [ newElem("table"), "hspace", "marginLeft" ], | |
| [ newElem("table"), "hspace", "marginRight" ], | |
| [ newElem("table"), "vspace", "marginTop" ], | |
| [ newElem("table"), "vspace", "marginBottom" ], | |
| [ newElem("embed"), "border", "borderTopWidth" ], | |
| [ newElem("embed"), "border", "borderRightWidth" ], | |
| [ newElem("embed"), "border", "borderBottomWidth" ], | |
| [ newElem("embed"), "border", "borderLeftWidth" ], | |
| [ newElem("iframe"), "border", "borderTopWidth" ], | |
| [ newElem("iframe"), "border", "borderRightWidth" ], | |
| [ newElem("iframe"), "border", "borderBottomWidth" ], | |
| [ newElem("iframe"), "border", "borderLeftWidth" ], | |
| [ newElem("iframe"), "hspace", "marginLeft" ], | |
| [ newElem("iframe"), "hspace", "marginRight" ], | |
| [ newElem("iframe"), "vspace", "marginTop" ], | |
| [ newElem("iframe"), "vspace", "marginBottom" ], | |
| [ newElem("marquee"), "border", "borderTopWidth" ], | |
| [ newElem("marquee"), "border", "borderRightWidth" ], | |
| [ newElem("marquee"), "border", "borderBottomWidth" ], | |
| [ newElem("marquee"), "border", "borderLeftWidth" ], | |
| // Non-image input | |
| [ newElem("input"), "border", "borderTopWidth" ], | |
| [ newElem("input"), "border", "borderRightWidth" ], | |
| [ newElem("input"), "border", "borderBottomWidth" ], | |
| [ newElem("input"), "border", "borderLeftWidth" ], | |
| [ newElem("input"), "width", "width" ], | |
| [ newElem("input"), "height", "height" ], | |
| [ newElem("input"), "hspace", "marginLeft" ], | |
| [ newElem("input"), "hspace", "marginRight" ], | |
| [ newElem("input"), "vspace", "marginTop" ], | |
| [ newElem("input"), "vspace", "marginBottom" ], | |
| ]; | |
| function style(element) { | |
| return element.ownerDocument.defaultView.getComputedStyle(element); | |
| } | |
| for (let [ctor, attr, prop] of tests) { | |
| for (let parent of [container, frameContainer]) { | |
| let elem = ctor(parent); | |
| test(function() { | |
| let default_elem = ctor(parent); | |
| this.add_cleanup(() => { | |
| elem.remove(); | |
| default_elem.remove(); | |
| }); | |
| elem.setAttribute(attr, "200"); | |
| assert_equals(elem.getAttribute(attr), "200"); | |
| assert_equals(style(elem)[prop], style(default_elem)[prop]); | |
| }, `<${elem.localName} ${attr}> should not be mapped to style ${prop} in ${parent.ownerDocument.compatMode} mode`); | |
| } | |
| } | |
| </script> |