summaryrefslogtreecommitdiffstats
path: root/dom/base/test/test_bug493881.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base/test/test_bug493881.js')
-rw-r--r--dom/base/test/test_bug493881.js100
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);
+});