Series of tests to validate behavior of getting/setting link.disabled and link.sheet.disabled.
Test for bug 61400: REGRESSION(84329): Stylesheets on some pages do not load

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


notsheet
PASS link.sheet is null
FAIL link.disabled should be false. Was true.
sheet
PASS link.sheet is non-null.
FAIL link.disabled should be true. Was false.
PASS link.sheet.disabled is true
PASS getComputedStyle(testElement).textDecoration is "none solid rgb(0, 0, 0)"
PASS link.disabled is false
FAIL link.sheet.disabled should be false. Was true.
FAIL getComputedStyle(testElement).textDecoration should be line-through. Was none solid rgb(0, 0, 0).
altsheet
FAIL link.disabled should be true. Was false.
PASS link.sheet is non-null.
FAIL getComputedStyle(testElement).backgroundColor should be rgb(0, 128, 0). Was rgba(0, 0, 0, 0).
PASS getComputedStyle(testElement).backgroundColor is originalBG
PASS successfullyParsed is true

TEST COMPLETE

