<!DOCTYPE HTML>
<script src="../../resources/js-test-pre.js"></script>
<style>
:-webkit-any(h1),
:-webkit-any( #div1, b ),
:-webkit-any(.foo, #bar),
:-webkit-any(i,p,:link,span:focus) {
    background-color: blue;
}

#test-last-child :-webkit-any(:last-child),
:-webkit-any(:link:focus),
#container-div :-webkit-any(:link, :not(a)),
h1:-webkit-any(.h1class, #bar) {
    background-color: green;
}

/* Only simple selectors should work. */
:-webkit-any() {
    background-color: red;
}

:-webkit-any(s,:nonexistentpseudo) {
    background-color: blue;
}

div~q {
    background-color: red;
}
:-webkit-any(div ~ q) {
    background-color: red;
}
:-webkit-any(div~q) {
    background-color: blue;
}

q+q {
    background-color: red;
}
:-webkit-any(q+q) {
    background-color: blue;
}

q>span {
    background-color: red;
}
:-webkit-any(q>span) {
    background-color: blue;
}

div span {
    background-color: blue;
}
:-webkit-any(div span) {
    background-color: red;
}
:-webkit-any( div span ) {
    background-color: blue;
}
</style>
This page tests :-webkit-any. This window needs to be focused for the :focus tests to pass.<br>
<h1>h1</h1>
<h1 class="h1class">h1</h1>
<div id="div1">div</div>
<div>foo</div>
<b>b</b>
<i>i</i>
<p>p</p>
<a href="http://webkit.org">a</a>
<span id="span1">span<span>
<li class="foo">li</li>
<u id="bar">u</u>
<s>s</s>
<div id="container-div"><input type='text'><a href='http://www.example.com/'></a><div></div><a name='foo'></div>
<div><span>div span</span></div>
<q>div~q</q>
<q>q+q</q>
<q><span>q>span</span></q>
<div id="test-last-child"><p>first</p><p>last</p></div>
<pre id="console"></pre>

<script>
if (window.testRunner)
    testRunner.dumpAsText();

function assertColor(selectorOrElement, rbgColor)
{
    debug("");

    if (typeof selectorOrElement == "string") {
        debug(selectorOrElement);
        element = document.querySelector(selectorOrElement);
    } else {
        debug("Element: " + element.nodeName);
        element = selectorOrElement;
    }

    shouldBe("document.defaultView.getComputedStyle(element, null).getPropertyValue('background-color')", rbgColor);
}

function assertBlue(selectorOrElement)
{
    assertColor(selectorOrElement, "'rgb(0, 0, 255)'")
}

function assertWhite(selectorOrElement)
{
    assertColor(selectorOrElement, "'rgba(0, 0, 0, 0)'")
}

function assertGreen(selectorOrElement)
{
    assertColor(selectorOrElement, "'rgb(0, 128, 0)'")
}

function focus(selector)
{
    var element = document.querySelector(selector);
    element.tabIndex = -1;
    element.focus();
}

assertBlue("h1");
assertBlue("#div1");

// Ensure the div with ID after the first div does not share a RenderStyle with the first div.
assertWhite(document.querySelectorAll("div")[1]);

assertBlue("b");
assertBlue("i");
assertBlue("p");

assertWhite("#span1");
focus("#span1");
assertBlue("span:focus");

assertBlue("a");
focus("a");
assertGreen("a:focus");

assertBlue(".foo");
assertBlue("#bar");

assertGreen("h1.h1class");

debug("");
shouldBe("document.querySelectorAll('#container-div :-webkit-any([href],input[type],input[name])').length", "2");
shouldBe("document.querySelectorAll('#container-div :-webkit-any(div,a):-webkit-any([type],[href],[name])').length", "2");
shouldBe("document.querySelectorAll('#container-div :-webkit-any(:link, :not(a))').length", "3");
assertGreen("#container-div input");
assertGreen("#container-div a[href]");
assertGreen("#container-div div");
assertWhite("#container-div a[name]");

assertBlue("s");
assertBlue("div span");
assertBlue("div ~ q");
assertBlue("q+q");
assertBlue("q>span");

assertBlue("#test-last-child :first-child");
assertGreen("#test-last-child :last-child");
</script>
