Test that @supports doesn't break 'not' pseudo class selector.

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


PASS CSSRule.SUPPORTS_RULE is defined.
rules = document.styleSheets[1].cssRules
PASS rules.length is 2
PASS rules[0].type is CSSRule.SUPPORTS_RULE
PASS rules[0].cssRules.length is 1
PASS rules[0].cssRules[0].type is CSSRule.STYLE_RULE
PASS rules[0].cssRules[0].style.color is "green"
PASS rules[1].type is CSSRule.STYLE_RULE
PASS rules[1].style.color is "green"
rules = document.styleSheets[2].cssRules
PASS rules.length is 2
PASS rules[1].type is CSSRule.STYLE_RULE
PASS rules[1].style.color is "green"
rules = document.styleSheets[3].cssRules
PASS rules.length is 1
PASS rules[0].type is CSSRule.STYLE_RULE
PASS rules[0].style.color is "green"
Checks all elements are green.
PASS getComputedStyle(result, null).color is "rgb(0, 128, 0)"
PASS getComputedStyle(result, null).color is "rgb(0, 128, 0)"
PASS getComputedStyle(result, null).color is "rgb(0, 128, 0)"
PASS getComputedStyle(result, null).color is "rgb(0, 128, 0)"
PASS getComputedStyle(result, null).color is "rgb(0, 128, 0)"
PASS getComputedStyle(result, null).color is "rgb(0, 128, 0)"
PASS successfullyParsed is true

TEST COMPLETE
This should be green if not() pseudo class selector works inside @supports rule.
This should be green if not() pseudo class selector works after/outside @supports rule.
This should be green if not() pseudo class selector DOES NOT work inside @supports rule without condition.
This should be green if not() pseudo class selector works after/outside @supports rule without condition.
This should be green if not() pseudo class selector DOES NOT work after/outside @supports rule without rule.
This should be green if not() pseudo class selector works after/outside @supports rule without condition and rule.
