| <!DOCTYPE HTML> | 
 | <html> | 
 | <head> | 
 | <script src="../resources/js-test-pre.js"></script> | 
 | </head> | 
 | <body> | 
 | <script> | 
 |     description("Test window.CSS.supports()"); | 
 |  | 
 |     shouldBeTrue('CSS.supports("display: none")'); | 
 |     shouldBeTrue('CSS.supports("(display: none)")'); | 
 |     shouldBeTrue('CSS.supports("  display: none ")'); | 
 |     shouldBeFalse('CSS.supports("(display: deadbeef)")'); | 
 |  | 
 |     shouldBeFalse('CSS.supports("display: deadbeef")'); | 
 |     shouldBeTrue('CSS.supports("(display: none) and ((display: block) or (display: inline))")'); | 
 |     shouldBeTrue('CSS.supports("(not (display: deadbeef)) and (display: block)")'); | 
 |     shouldBeTrue('CSS.supports("top: -webkit-calc(80% - 20px)")'); | 
 |     shouldBeTrue('CSS.supports("background-color: rgb(0, 128, 0)")'); | 
 |     shouldBeTrue('CSS.supports("background: url(\'/blah\')")'); | 
 |     shouldBeFalse('CSS.supports("background: invalid(\'/blah\')")'); | 
 |     shouldBeFalse('CSS.supports("display: none;")'); | 
 |     shouldBeFalse('CSS.supports("display: none; garbage")'); | 
 |     shouldBeFalse('CSS.supports("  display: none ; garbage ")'); | 
 |  | 
 |     // Negation | 
 |     shouldBeTrue('CSS.supports("not (display: deadbeef)")'); | 
 |     shouldBeFalse('CSS.supports("not (display: none)")'); | 
 |     shouldBeTrue('CSS.supports("not (not (display: none))")'); | 
 |     shouldBeFalse('CSS.supports("not (not (not (display: none)))")'); | 
 |  | 
 |     // Conjunction. | 
 |     shouldBeTrue('CSS.supports("(display: none) and (display: block)")'); | 
 |     shouldBeTrue('CSS.supports("(display: none) and (display: block) and (display: inline)")'); | 
 |     shouldBeFalse('CSS.supports("(display: none) and (display: block) and (display: deadbeef) and (display: inline)")'); | 
 |  | 
 |     // Disjunction. | 
 |     shouldBeTrue('CSS.supports("(display: none) or (display: inline)")'); | 
 |     shouldBeTrue('CSS.supports("(display: none) or (display: block) or (display: inline)")'); | 
 |     shouldBeTrue('CSS.supports("(display: none) or (display: deadbeef) or (display: inline)")'); | 
 |     shouldBeFalse('CSS.supports("(display: ohhai) or (display: deadbeef) or (display: rainbows)")'); | 
 |  | 
 |     // Bad syntax. Can't mix operators without a layer of parentheses.. | 
 |     shouldBeFalse('CSS.supports("(display: none) and (display: block) or (display: inline)")'); | 
 |     shouldBeFalse('CSS.supports("not (display: deadbeef) and (display: block)")'); | 
 |  | 
 |     // Mix 'n match. | 
 |     shouldBeTrue('CSS.supports("(not (border: 1px 1px 1px 1px 1px solid #000)) and (display: block)")'); | 
 |     shouldBeTrue('CSS.supports("(display: block !important) and ((display: inline) or (display: deadbeef))")'); | 
 |     shouldBeTrue('CSS.supports("not ((not (display: block)) or ((display: none) and (deadbeef: 1px)))")'); | 
 |  | 
 |     // Whitespace/Syntax. | 
 |     shouldBeTrue('CSS.supports("not( display: deadbeef)")'); | 
 |     shouldBeTrue('CSS.supports("(display: none)and (   -webkit-transition: all 1s )")'); | 
 |     shouldBeTrue('CSS.supports("(display: none)or(-webkit-transition: all 1s)")'); | 
 |     shouldBeTrue('CSS.supports("(display: none) or(-webkit-transition: all 1s    )")'); | 
 |     shouldBeTrue('CSS.supports("(((((((display: none)))))))")'); | 
 |     shouldBeFalse('CSS.supports("(!important)")'); | 
 |     shouldBeFalse('CSS.supports("!important")'); | 
 |     shouldBeFalse('CSS.supports("not not not not (display: none)")'); | 
 |  | 
 |     // Functions. | 
 |     shouldBeTrue('CSS.supports("(top: -webkit-calc(80% - 20px))")'); | 
 |     shouldBeTrue('CSS.supports("(background-color: rgb(0, 128, 0))")'); | 
 |     shouldBeTrue('CSS.supports("(background: url(\'/blah\'))")'); | 
 |     shouldBeTrue('CSS.supports("((top: -webkit-calc(80% - 20px)) and (not (background-color: rgb(0, 128, 0)))) or (background: url(\'/blah\'))")'); | 
 |     shouldBeFalse('CSS.supports("(background: invalid(\'/blah\'))")'); | 
 |  | 
 |     // Property/value variant. | 
 |     shouldBeTrue('CSS.supports("top", "20%")'); | 
 |     shouldBeTrue('CSS.supports("top", " 20px   ")'); | 
 |     shouldBeFalse('CSS.supports("top", "20")'); | 
 |     shouldBeFalse('CSS.supports("dis\\nplay", "none")'); | 
 |     shouldBeFalse('CSS.supports("display", "rainbow")'); | 
 |     shouldBeFalse('CSS.supports("display", "url(rainbow.png)")'); | 
 |     shouldBeTrue('CSS.supports(" background   ", "url(rainbow.png)")'); | 
 |     shouldBeFalse('CSS.supports("background", "invalid(rainbow.png)")'); | 
 |     shouldBeTrue('CSS.supports("background-color", "#000")'); | 
 |     shouldBeTrue('CSS.supports("background-color", "rgba(0,0,0,0)")'); | 
 |     shouldBeTrue('CSS.supports("background-color", "inherit")'); | 
 |  | 
 |     shouldBeTrue('CSS.supports("display", "none !important")'); | 
 |     shouldBeTrue('CSS.supports("display", "none!important")'); | 
 |     shouldBeFalse('CSS.supports("display", "!important none")'); | 
 |     shouldBeFalse('CSS.supports("display", "none !important ! important ")'); | 
 |     shouldBeTrue('CSS.supports("display", "none ! important")'); | 
 |     shouldBeTrue('CSS.supports("display", "none ! \timportant")'); | 
 |     shouldBeTrue('CSS.supports("display", "none ! \\nimportant")'); | 
 |  | 
 |     shouldBeFalse('CSS.supports("", "")'); | 
 |     shouldBeFalse('CSS.supports(true, "")'); | 
 |     shouldBeFalse('CSS.supports([], "none")'); | 
 |     shouldBeFalse('CSS.supports("display", "")'); | 
 |     shouldBeFalse('CSS.supports("display:", "none")'); | 
 |     shouldBeTrue('CSS.supports("z-index", 1)'); | 
 |     shouldBeFalse('CSS.supports("content", [])'); | 
 |     shouldBeFalse('CSS.supports("content", "!important")'); | 
 |     shouldBeFalse('CSS.supports("(display: none)", undefined)'); | 
 | </script> | 
 | <script src="../resources/js-test-post.js"></script> | 
 | </body> | 
 | </html> |