<head>
<style>
#a { content: url(c); }
#b { content: url( d); }
#c { content: url(e ); }
#d { content: url( f ); }
#f { content: url('c'); }
#g { content: url(' d'); }
#h { content: url('e '); }
#i { content: url(' f '); }
#j { content: url("url(g)"); }
#l { content: url("c"); }
#m { content: url(" d"); }
#n { content: url("e "); }
#o { content: url(" f "); }
#p { content: url("url(g)"); }
#q { cursor: url("url(q)"), default; }
#r { list-style-image: url("url(r)"); }
#s { background-image: url("url(s)"); }
#t { -webkit-mask-image: url("url(t)"); }
#u { -webkit-border-image: url("url(u)") 1 2 3 4 fill stretch round; }
#v { -webkit-mask-box-image: url("url(v)") 1 2 3 4 fill stretch round; }
#w { content: url("w\0d\
w"); /* URL string contains twice newline */ }
#x { content: url(" x x	x "); } /* URL string contains space and tab */
#y { content: url( y\20y\9y ); } /* URL string contains space and tab */
</style>

<script>

// Some ideas for additional things to test in the future:
//   1) Actual control characters in the <style> element.
//   2) URL with only space characters in it.
//   3) Different CSS space characters, and spaces that are not allowed in CSS.
//   4) Different CSS space characters, and spaces that are not allowed in CSS.
//   5) The src property inside font-face.
//   6) Quoted values that are themselves inside quotes (two levels of quotes).

function runTest()
{
    if (window.testRunner)
        testRunner.dumpAsText();

    var rules = document.styleSheets[0].cssRules;
    var text = "";
    for (var i = 0; i < rules.length; i++) {
        var itemText = rules.item(i).cssText;

        // Work around bug where WebKit completes the URLs in the CSS DOM.
        // The completion of the URL should be when they are used, not in the DOM.
        itemText = itemText.replace(/file:.*LayoutTests\/fast\/css\//, "");

        text += itemText;
        text += "\n";
    }

    document.getElementById("result").appendChild(document.createTextNode(text));

    if (document.getElementById("result").firstChild.data === document.getElementById("expected").firstChild.data)
        document.getElementById("message").firstChild.data = "SUCCESS";
    else
        document.getElementById("message").firstChild.data = "FAILURE";
}

</script>

</head>

<body onload="runTest()">

<p>Test parsing of CSS URI tokens. Older versions of WebKit did some double processing of these, hence this test would have failed.</p>

<p id="message">TEST DID NOT COMPLETE</p>

<p>Rules from the stylesheet:</p>

<pre id="result"></pre>

<p>Expected result:</p>

<pre id="expected">#a { content: url("c"); }
#b { content: url("d"); }
#c { content: url("e"); }
#d { content: url("f"); }
#f { content: url("c"); }
#g { content: url("d"); }
#h { content: url("e"); }
#i { content: url("f"); }
#j { content: url("url(g)"); }
#l { content: url("c"); }
#m { content: url("d"); }
#n { content: url("e"); }
#o { content: url("f"); }
#p { content: url("url(g)"); }
#q { cursor: url("url(q)"), default; }
#r { list-style-image: url("url(r)"); }
#s { background-image: url("url(s)"); }
#t { -webkit-mask-image: url("url(t)"); }
#u { -webkit-border-image: url("url(u)") 1 2 3 4 fill stretch round; }
#v { -webkit-mask-box-image: url("url(v)") 1 2 3 4 fill stretch round; }
#w { content: url("ww"); }
#x { content: url("x%20xx"); }
#y { content: url("y%20yy"); }
</pre>

<script>

</script>
</body>
