| <!DOCTYPE HTML><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] --> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| <style> |
| .test { |
| content: "UNTOUCHED"; |
| } |
| |
| @supports (display: none) { |
| #t0 { content: "APPLIED" } |
| } |
| |
| @supports (display: deadbeef) { |
| #t1 { content: "FAIL" } |
| } |
| |
| /* Negation */ |
| @supports not (display: deadbeef) { |
| #t2 { content: "APPLIED" } |
| } |
| |
| @supports not (display: none) { |
| #t3 { content: "FAIL" } |
| } |
| |
| @supports not (not (display: none)) { |
| #t4 { content: "APPLIED" } |
| } |
| |
| @supports not (not (not (display: none))) { |
| #t5 { content: "FAIL" } |
| } |
| |
| /* Conjunction */ |
| @supports (display: none) and (display: block) { |
| #t6 { content: "APPLIED" } |
| } |
| |
| @supports (display: none) and (display: block) and (display: inline) { |
| #t7 { content: "APPLIED" } |
| } |
| |
| @supports (display: none) and (display: block) and (display: deadbeef) and (display: inline) { |
| #t8 { content: "FAIL" } |
| } |
| |
| /* Disjunction */ |
| @supports (display: none) or (display: inline) { |
| #t9 { content: "APPLIED" } |
| } |
| |
| @supports (display: none) or (display: block) or (display: inline) { |
| #t10 { content: "APPLIED" } |
| } |
| |
| @supports (display: none) or (display: deadbeef) or (display: inline) { |
| #t11 { content: "APPLIED" } |
| } |
| |
| @supports (display: ohhai) or (display: deadbeef) or (display: rainbows) { |
| #t12 { content: "FAIL" } |
| } |
| |
| /* Bad syntax. Can't mix operators without a layer of parentheses. */ |
| @supports (display: none) and (display: block) or (display: inline) { |
| #t13 { content: "FAIL" } |
| } |
| |
| @supports not (display: deadbeef) and (display: block) { |
| #t14 { content: "FAIL" } |
| } |
| |
| /* Mix 'n match */ |
| @supports (not (border: 1px 1px 1px 1px 1px solid #000)) and (display: block) { |
| #t15 { content: "APPLIED" } |
| } |
| |
| @supports (display: block !important) and ((display: inline) or (display: deadbeef)){ |
| #t16 { content: "APPLIED" } |
| } |
| |
| @supports not ((not (display: block)) or ((display: none) and (deadbeef: 1px))) { |
| #t17 { content: "APPLIED" } |
| } |
| |
| /* Whitespace/Syntax */ |
| @supports not( display: deadbeef) { |
| #t22 { content: "APPLIED" } |
| } |
| |
| @supports (display: none)and ( -webkit-transition: all 1s ) { |
| #t23 { content: "APPLIED" } |
| } |
| |
| @supports (display: none)or(-webkit-transition: all 1s) { |
| #t24 { content: "APPLIED" } |
| } |
| |
| @supports (display: none) or(-webkit-transition: all 1s ) { |
| #t25 { content: "APPLIED" } |
| } |
| |
| @supports (((((((display: none))))))) { |
| #t26 { content: "APPLIED" } |
| } |
| |
| @supports(((((((display: none))))))) { |
| #t27 { content: "APPLIED" } |
| } |
| |
| @supports (!important) { |
| #t28 { content: "FAIL" } |
| } |
| |
| @supports not not not not (display: none) { |
| #t29 { content: "FAIL" } |
| } |
| |
| /* Functions */ |
| |
| @supports (top: -webkit-calc(80% - 20px)) { |
| #t30 { content: "APPLIED" } |
| } |
| |
| @supports (background-color: rgb(0, 128, 0)) { |
| #t31 { content: "APPLIED" } |
| } |
| |
| @supports (background: url("/blah")) { |
| #t32 { content: "APPLIED" } |
| } |
| |
| @supports ((top: -webkit-calc(80% - 20px)) and (not (background-color: rgb(0, 128, 0)))) or (background: url("/blah")) { |
| #t33 { content: "APPLIED" } |
| } |
| |
| @supports (background: invalid("/blah")) { |
| #t34 { content: "FAIL" } |
| } |
| |
| /* Nesting. */ |
| @supports (display: none) { |
| @supports (display: deadbeef) { |
| #t18 { content: "FAIL" } |
| } |
| @supports (display: inline) { |
| #t19 { content: "APPLIED" } |
| } |
| @supports (display: inline) { |
| } |
| @media all { |
| #t20 { content: "APPLIED" } |
| @supports (display: inline) { |
| #t21 { content: "APPLIED" } |
| } |
| } |
| } |
| |
| @media all { |
| @supports (display: inline) { |
| @media all { |
| @supports (display: none) { |
| #t35 { content: "APPLIED" } |
| } |
| } |
| } |
| } |
| |
| @media not all { |
| @supports (display: none) { |
| #t36 { content: "FAIL" } |
| } |
| } |
| |
| /* Invalid syntax error recovery */ |
| |
| @supports (display: none); |
| @supports (display: none) and ( (display: none) ) { |
| #t37 { content: "APPLIED" } |
| } |
| |
| @supports (display: none)) ; |
| @supports (display: none) { |
| #t38 { content: "APPLIED" } |
| } |
| |
| @supports; |
| @supports (display: none) { |
| #t39 { content: "APPLIED" } |
| } |
| |
| @supports ; |
| @supports (display: none) { |
| #t40 { content: "APPLIED" } |
| } |
| |
| @supports (display: none)) { |
| #t41 { content: "FAIL" } |
| } |
| @supports (display: none) { |
| #t41 { content: "APPLIED" } |
| } |
| |
| @supports (display: )) { |
| #t42 { content: "FAIL" } |
| } |
| @supports (display: none) { |
| #t42 { content: "APPLIED" } |
| } |
| |
| @supports ((display: none) and { |
| #t43 { content: "FAIL" } |
| } |
| @supports (display: none) { |
| #t43 { content: "FAIL" } |
| } |
| ); |
| |
| @supports ((display: none) and ; |
| @supports (display: none) { |
| #t44 { content: "FAIL" } |
| } |
| ); |
| |
| </style> |
| </head> |
| <body> |
| <div id="test_container"></div> |
| |
| <script> |
| description("Test the @supports rule."); |
| var numTests = 45; |
| var untouchedTests = [1, 3, 5, 8, 12, 13, 14, 18, 28, 29, 34, 36, 43, 44]; // Tests whose content shouldn't change from the UNTOUCHED default. |
| |
| var container = document.getElementById("test_container"); |
| for (var i=0; i < numTests; i++) { |
| var div = document.createElement("div"); |
| div.id = "t" + i; |
| div.className = "test"; |
| container.appendChild(div); |
| shouldBeEqualToString("getComputedStyle(document.getElementById('t"+i+"')).content", untouchedTests.indexOf(i) >= 0 ? "UNTOUCHED" : "APPLIED"); |
| } |
| |
| test_container.parentNode.removeChild(test_container); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |