blob: f2f87f6c4b6a9123a3e60ad4f2933512c0f202fe [file] [log] [blame]
<html>
<head id="head">
<script src="../../resources/js-test.js"></script>
</head>
<body>
<script>
description("This tests parsing and re-serialization of some CSS selectors.");
function parseThenSerializeRule(rule)
{
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);
styleElement.appendChild(document.createTextNode("@namespace n url('test');"));
styleElement.appendChild(document.createTextNode(rule));
return styleElement.sheet.cssRules[1].cssText;
}
function testSelectorRoundTrip(selector)
{
shouldBe("parseThenSerializeRule('" + selector + " { }')", "'" + selector + " { }'");
}
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('');
shouldBe("parseThenSerializeRule('*|a { }')", "'a { }'");
testSelectorRoundTrip('n|a');
shouldBe("parseThenSerializeRule('*|* { }')", "'* { }'");
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(":focus-within");
testSelectorRoundTrip(":hover");
testSelectorRoundTrip(":indeterminate");
testSelectorRoundTrip(":link");
testSelectorRoundTrip(":not(:placeholder-shown)");
testSelectorRoundTrip(":placeholder-shown");
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("parseThenSerializeRule('::-webkit-file-upload-button { }')", "'::-webkit-file-upload-button { }'");
shouldBe("parseThenSerializeRule('::-webkit-search-cancel-button { }')", "'::-webkit-search-cancel-button { }'");
shouldBe("parseThenSerializeRule('::-webkit-search-decoration { }')", "'::-webkit-search-decoration { }'");
shouldBe("parseThenSerializeRule('::-webkit-search-results-button { }')", "'::-webkit-search-results-button { }'");
shouldBe("parseThenSerializeRule('::-webkit-search-results-decoration { }')", "'::-webkit-search-results-decoration { }'");
shouldBe("parseThenSerializeRule('::-webkit-slider-thumb { }')", "'::-webkit-slider-thumb { }'");
debug('');
testSelectorRoundTrip("a::-webkit-slider-thumb");
shouldBe("parseThenSerializeRule('a ::-webkit-slider-thumb { }')", "'a ::-webkit-slider-thumb { }'");
testSelectorRoundTrip("[a]::-webkit-slider-thumb");
shouldBe("parseThenSerializeRule('[a] ::-webkit-slider-thumb { }')", "'[a] ::-webkit-slider-thumb { }'");
testSelectorRoundTrip(".a::-webkit-slider-thumb");
shouldBe("parseThenSerializeRule('.a ::-webkit-slider-thumb { }')", "'.a ::-webkit-slider-thumb { }'");
testSelectorRoundTrip("#a::-webkit-slider-thumb");
shouldBe("parseThenSerializeRule('#a ::-webkit-slider-thumb { }')", "'#a ::-webkit-slider-thumb { }'");
shouldBe("parseThenSerializeRule('* ::-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('input:not([type="file"]):focus-within');
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("parseThenSerializeRule('*:active { }')", "':active { }'");
testSelectorRoundTrip("|a");
debug('');
shouldBe("parseThenSerializeRule('input[type=file]:focus { }')", "'input[type=\"file\"]:focus { }'");
shouldBe("parseThenSerializeRule('input[type=file]:focus-within { }')", "'input[type=\"file\"]:focus-within { }'");
debug('');
shouldBe("parseThenSerializeRule('a+b { }')", "'a + b { }'");
shouldBe("parseThenSerializeRule('a~b { }')", "'a ~ b { }'");
shouldBe("parseThenSerializeRule('a>b { }')", "'a > b { }'");
debug('');
shouldBe("parseThenSerializeRule(':after { }')", "'::after { }'");
shouldBe("parseThenSerializeRule(':before { }')", "'::before { }'");
shouldBe("parseThenSerializeRule(':first-letter { }')", "'::first-letter { }'");
shouldBe("parseThenSerializeRule(':first-line { }')", "'::first-line { }'");
shouldBe("parseThenSerializeRule(':-webkit-any( a.class1 , #id,[attr] ) { }')","':-webkit-any(a.class1,#id,[attr]) { }'");
debug('');
</script>
</body>
</html>