<pre id="output"></pre>
<script>
function debug(msg)
{
    var output = document.getElementById("output");
    output.appendChild(document.createTextNode(msg + "\n"));
}

function testComputedStyle(property, fullRule)
{
    var div = document.createElement("div");
    document.body.appendChild(div);
    div.setAttribute("style", property + ": " + fullRule);
    var computedValue = div.style[property];
    document.body.removeChild(div);
    return computedValue;
}

function testImageSetRule(description, property, rule, expected)
{
    debug("");
    debug(`${description} : ${rule}`);

    var rule = `image-set(${rule})`;
    if (property == 'cursor')
        rule += ', default';

    if (testComputedStyle(property, rule) == rule)
        debug("Unprefixed: PASS");
    else
        debug("Unprefixed: FAIL");

    if (testComputedStyle(property, "-webkit-" + rule) == rule)
        debug("Prefixed: PASS");
    else
        debug("Prefixed: FAIL");
}

if (window.testRunner)
    window.testRunner.dumpAsText();

testImageSetRule("Single value for background-image",
                "background-image",
                "url(http://www.webkit.org/a) 1x");

testImageSetRule("Multiple values for background-image",
                "background-image",
                "url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x");

testImageSetRule("Multiple values for background-image, out of order",
                "background-image",
                "url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");

testImageSetRule("Duplicate values for background-image",
                "background-image",
                "url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");

testImageSetRule("Fractional values for background-image",
                "background-image",
                "url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x");

testImageSetRule("Single value for cursor",
                "cursor",
                "url(http://www.webkit.org/a) 1x");

testImageSetRule("Multiple values for cursor",
                "cursor",
                "url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x");

testImageSetRule("Multiple values for cursor, out of order",
                "cursor",
                "url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");

testImageSetRule("Duplicate values for cursor",
                "cursor",
                "url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");

testImageSetRule("Fractional values for cursor",
                "cursor",
                "url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x");

testImageSetRule("Single value for list-style-image",
                "list-style-image",
                "url(http://www.webkit.org/a) 1x");

testImageSetRule("Multiple values for list-style-image",
                "list-style-image",
                "url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x");

testImageSetRule("Multiple values for list-style-image, out of order",
                "list-style-image",
                "url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");

testImageSetRule("Duplicate values for list-style-image",
                "list-style-image",
                "url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");

testImageSetRule("Fractional values for list-style-image",
                "list-style-image",
                "url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x");

testImageSetRule("Single value for content",
                "content",
                "url(http://www.webkit.org/a) 1x");

testImageSetRule("Multiple values for content",
                "content",
                "url(http://www.webkit.org/a) 1x, url(http://www.webkit.org/b) 2x");

testImageSetRule("Multiple values for content, out of order",
                "content",
                "url(http://www.webkit.org/c) 3x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");

testImageSetRule("Duplicate values for content",
                "content",
                "url(http://www.webkit.org/c) 1x, url(http://www.webkit.org/b) 2x, url(http://www.webkit.org/a) 1x");

testImageSetRule("Fractional values for content",
                "content",
                "url(http://www.webkit.org/c) 0.2x, url(http://www.webkit.org/b) 2.3x, url(http://www.webkit.org/a) 12.3456x");


</script>
