Blame dom/base/test/test_bug493881.js

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