diff options
Diffstat (limited to '')
-rw-r--r-- | dom/base/test/test_bug493881.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/dom/base/test/test_bug493881.js b/dom/base/test/test_bug493881.js new file mode 100644 index 0000000000..faee306c68 --- /dev/null +++ b/dom/base/test/test_bug493881.js @@ -0,0 +1,100 @@ +/** + * Test for Bug 493881: Changes to legacy HTML color properties before the BODY is loaded + * should be ignored. Additionally, after BODY loads, setting any of these properties to undefined + * should cause them to be returned as the string "undefined". + */ + +SimpleTest.waitForExplicitFinish(); + +var legacyProps = [ + "fgColor", + "bgColor", + "linkColor", + "vlinkColor", + "alinkColor", +]; +var testColors = ["blue", "silver", "green", "orange", "red"]; +var rgbTestColors = [ + "rgb(255, 0, 0)", + "rgb(192, 192, 192)", + "rgb(0, 128, 0)", + "rgb(255, 165, 0)", + "rgb(255, 0, 0)", +]; +var idPropList = [ + { id: "plaintext", prop: "color" }, + { id: "body", prop: "background-color" }, + { id: "nonvisitedlink", prop: "color" }, + { id: "visitedlink", prop: "color" }, +]; +var initialValues = []; + +function setAndTestProperty(prop, color) { + var initial = document[prop]; + document[prop] = color; + is(document[prop], initial, "document[" + prop + "] not ignored before body"); + return initial; +} + +/** + * Attempt to set legacy color properties before BODY exists, and verify that such + * attempts are ignored. + */ +for (let i = 0; i < legacyProps.length; i++) { + initialValues[i] = setAndTestProperty(legacyProps[i], testColors[i]); +} + +/** + * After BODY loads, run some more tests. + */ +addLoadEvent(function () { + // Verify that the legacy color properties still have their original values. + for (let i = 0; i < legacyProps.length; i++) { + is( + document[legacyProps[i]], + initialValues[i], + "document[" + legacyProps[i] + "] altered after body load" + ); + } + + // Verify that legacy color properties applied before BODY are really ignored when rendering. + // Save current computed style colors for later use. + for (let i = 0; i < idPropList.length; i++) { + var style = window.getComputedStyle( + document.getElementById(idPropList[i].id) + ); + var color = style.getPropertyValue(idPropList[i].prop); + idPropList[i].initialComputedColor = color; + isnot(color, rgbTestColors[i], "element rendered using before-body style"); + } + // XXX: Can't get links to visually activate via script events, so can't verify + // that the alinkColor property was not applied. + + // Verify that setting legacy color props to undefined after BODY loads will cause them + // to be read as the string "undefined". + for (let i = 0; i < legacyProps.length; i++) { + document[legacyProps[i]] = undefined; + is( + document[legacyProps[i]], + "undefined", + "Unexpected value of " + legacyProps[i] + " after setting to undefined" + ); + } + + // Verify that setting legacy color props to undefined led to result + // of parsing undefined as a color. + for (let i = 0; i < idPropList.length; i++) { + var style = window.getComputedStyle( + document.getElementById(idPropList[i].id) + ); + var color = style.getPropertyValue(idPropList[i].prop); + is( + color, + "rgb(0, 239, 14)", + "element's style should get result of parsing undefined as a color" + ); + } + + // Mark the test as finished. + setTimeout(SimpleTest.finish, 0); +}); |