| <html> |
| <head id="head"> |
| <script src="../js/resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <script> |
| |
| description("This tests setting and re-serialization of some CSS selectors."); |
| |
| var bogusSelector = "_foo"; |
| |
| function setThenReadSelectorText(selector) |
| { |
| var styleElement = document.getElementById("style"); |
| var head = document.getElementById("head"); |
| if (styleElement) |
| head.removeChild(styleElement); |
| |
| styleElement = document.createElement("style"); |
| styleElement.id = "style"; |
| var head = document.getElementById("head"); |
| head.appendChild(styleElement); |
| |
| // First, create a rule with a bogus selector. |
| styleElement.appendChild(document.createTextNode(bogusSelector + " { }")); |
| // Now, set the desired selector text. |
| styleElement.sheet.cssRules[0].selectorText = selector; |
| return styleElement.sheet.cssRules[0].selectorText; |
| } |
| |
| function testSelectorRoundTrip(selector, expectFailure) |
| { |
| shouldBe("setThenReadSelectorText('" + selector + "')", "'" + (expectFailure ? bogusSelector : selector) + "'"); |
| } |
| |
| testSelectorRoundTrip('', true); |
| testSelectorRoundTrip('123', true); |
| testSelectorRoundTrip('-', true); |
| testSelectorRoundTrip('$', true); |
| testSelectorRoundTrip(':', true); |
| testSelectorRoundTrip('.', true); |
| testSelectorRoundTrip('#', true); |
| testSelectorRoundTrip('[]', true); |
| testSelectorRoundTrip('()', true); |
| |
| debug(''); |
| |
| testSelectorRoundTrip('*'); |
| testSelectorRoundTrip('a'); |
| testSelectorRoundTrip('#a'); |
| testSelectorRoundTrip('.a'); |
| testSelectorRoundTrip(':active'); |
| testSelectorRoundTrip('[a]'); |
| testSelectorRoundTrip('[a="b"]'); |
| testSelectorRoundTrip('[a~="b"]'); |
| testSelectorRoundTrip('[a|="b"]'); |
| testSelectorRoundTrip('[a^="b"]'); |
| testSelectorRoundTrip('[a$="b"]'); |
| testSelectorRoundTrip('[a*="b"]'); |
| |
| debug(''); |
| |
| testSelectorRoundTrip('*|a'); |
| testSelectorRoundTrip('n|a'); |
| testSelectorRoundTrip('*|*'); |
| testSelectorRoundTrip('n|*'); |
| testSelectorRoundTrip('[*|a]'); |
| testSelectorRoundTrip('[n|a]'); |
| |
| debug(''); |
| |
| testSelectorRoundTrip('a:active'); |
| testSelectorRoundTrip('a b'); |
| testSelectorRoundTrip('a + b'); |
| testSelectorRoundTrip('a ~ b'); |
| testSelectorRoundTrip('a > b'); |
| |
| debug(''); |
| |
| testSelectorRoundTrip(":active"); |
| testSelectorRoundTrip(":checked"); |
| testSelectorRoundTrip(":disabled"); |
| testSelectorRoundTrip(":empty"); |
| testSelectorRoundTrip(":enabled"); |
| testSelectorRoundTrip(":first-child"); |
| testSelectorRoundTrip(":first-of-type"); |
| testSelectorRoundTrip(":focus"); |
| testSelectorRoundTrip(":hover"); |
| testSelectorRoundTrip(":indeterminate"); |
| testSelectorRoundTrip(":link"); |
| testSelectorRoundTrip(":root"); |
| testSelectorRoundTrip(":target"); |
| testSelectorRoundTrip(":visited"); |
| |
| debug(''); |
| |
| testSelectorRoundTrip(":lang(a)"); |
| testSelectorRoundTrip(":not(a)"); |
| testSelectorRoundTrip(":-webkit-any(a,b,p)"); |
| |
| debug(''); |
| |
| testSelectorRoundTrip("::after"); |
| testSelectorRoundTrip("::before"); |
| testSelectorRoundTrip("::first-letter"); |
| testSelectorRoundTrip("::first-line"); |
| testSelectorRoundTrip("::selection"); |
| |
| debug(''); |
| |
| testSelectorRoundTrip(":-webkit-any-link"); |
| testSelectorRoundTrip(":-webkit-autofill"); |
| testSelectorRoundTrip(":-webkit-drag"); |
| |
| debug(''); |
| |
| shouldBe("setThenReadSelectorText('::-webkit-file-upload-button')", "'*::-webkit-file-upload-button'"); |
| shouldBe("setThenReadSelectorText('::-webkit-search-cancel-button')", "'*::-webkit-search-cancel-button'"); |
| shouldBe("setThenReadSelectorText('::-webkit-search-decoration')", "'*::-webkit-search-decoration'"); |
| shouldBe("setThenReadSelectorText('::-webkit-search-results-button')", "'*::-webkit-search-results-button'"); |
| shouldBe("setThenReadSelectorText('::-webkit-search-results-decoration')", "'*::-webkit-search-results-decoration'"); |
| shouldBe("setThenReadSelectorText('::-webkit-slider-thumb')", "'*::-webkit-slider-thumb'"); |
| |
| debug(''); |
| |
| testSelectorRoundTrip("a::-webkit-slider-thumb"); |
| shouldBe("setThenReadSelectorText('a ::-webkit-slider-thumb')", "'a *::-webkit-slider-thumb'"); |
| testSelectorRoundTrip("[a]::-webkit-slider-thumb"); |
| shouldBe("setThenReadSelectorText('[a] ::-webkit-slider-thumb')", "'[a] *::-webkit-slider-thumb'"); |
| testSelectorRoundTrip(".a::-webkit-slider-thumb"); |
| shouldBe("setThenReadSelectorText('.a ::-webkit-slider-thumb')", "'.a *::-webkit-slider-thumb'"); |
| testSelectorRoundTrip("#a::-webkit-slider-thumb"); |
| shouldBe("setThenReadSelectorText('#a ::-webkit-slider-thumb')", "'#a *::-webkit-slider-thumb'"); |
| shouldBe("setThenReadSelectorText('* ::-webkit-slider-thumb')", "'* *::-webkit-slider-thumb'"); |
| |
| debug(''); |
| |
| testSelectorRoundTrip("a[b]::-webkit-slider-thumb"); |
| testSelectorRoundTrip("a.b::-webkit-slider-thumb"); |
| testSelectorRoundTrip("a#b::-webkit-slider-thumb"); |
| testSelectorRoundTrip("a[b].c#d::-webkit-slider-thumb"); |
| |
| debug(''); |
| |
| testSelectorRoundTrip('input:not([type="file"]):focus'); |
| testSelectorRoundTrip(':-webkit-any([type="file"])'); |
| testSelectorRoundTrip(':-webkit-any(:hover)'); |
| testSelectorRoundTrip('input:-webkit-any([type="file"],:hover,:focus):enabled'); |
| testSelectorRoundTrip(':-webkit-any(input[type="file"],a:hover,button:focus)'); |
| testSelectorRoundTrip(':-webkit-any(.class1.class2.class3)'); |
| testSelectorRoundTrip(':-webkit-any(.class1:hover)'); |
| testSelectorRoundTrip(':-webkit-any(a.class1.class2.class3:hover)'); |
| |
| debug(''); |
| |
| shouldBe("setThenReadSelectorText('*:active')", "':active'"); |
| shouldBe("setThenReadSelectorText('|a')", "'a'"); |
| |
| debug(''); |
| |
| shouldBe("setThenReadSelectorText('input[type=file]:focus')", "'input[type=\"file\"]:focus'"); |
| |
| debug(''); |
| |
| shouldBe("setThenReadSelectorText('a+b')", "'a + b'"); |
| shouldBe("setThenReadSelectorText('a~b')", "'a ~ b'"); |
| shouldBe("setThenReadSelectorText('a>b')", "'a > b'"); |
| |
| debug(''); |
| |
| shouldBe("setThenReadSelectorText(':after')", "'::after'"); |
| shouldBe("setThenReadSelectorText(':before')", "'::before'"); |
| shouldBe("setThenReadSelectorText(':first-letter')", "'::first-letter'"); |
| shouldBe("setThenReadSelectorText(':first-line')", "'::first-line'"); |
| shouldBe("setThenReadSelectorText(':-webkit-any( a.class1 , #id,[attr] )')","':-webkit-any(a.class1,#id,[attr])'"); |
| |
| debug(''); |
| |
| </script> |
| <script src="../js/resources/js-test-post.js"></script> |
| </body> |
| </html> |