<html>
<head id="head">
<script src="../../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="../../resources/js-test-post.js"></script>
</body>
</html>
