<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("Test the parsing of the cursor property.");

function makeCursorRule(rule)
{
    return "cursor: " + rule + ";";
}

function testCursorRule(rule)
{
    var cssText = makeCursorRule(rule);
    shouldBeEqualToString('roundtripCssRule("' + cssText + '")', cssText);
}

function testInvalidCursorRule(rule)
{
    shouldBeEqualToString('roundtripCssRule("' + makeCursorRule(rule) + '")', '');
}

function roundtripCssRule(cssText)
{
    var div = document.createElement("div");
    div.setAttribute("style", cssText);
    document.body.appendChild(div);
    var result = div.style.cssText;
    document.body.removeChild(div);
    return result;
}

// Note that any absolute URL will suffice for these tests (can't use relative URLs
// since they'll be converted to absolute form in the output).  I chose file URLs just
// to avoid triggering any network activity.

debug('Test a bunch of cursor rules which should round-trip exactly.');

testCursorRule('auto');
testCursorRule('default');
testCursorRule('none');
testCursorRule('context-menu');
testCursorRule('help');
testCursorRule('pointer');
testCursorRule('progress');
testCursorRule('wait');
testCursorRule('cell');
testCursorRule('crosshair');
testCursorRule('text');
testCursorRule('vertical-text');
testCursorRule('alias');
testCursorRule('copy');
testCursorRule('move');
testCursorRule('no-drop');
testCursorRule('not-allowed');
testCursorRule('grab');
testCursorRule('grabbing');
testCursorRule('e-resize');
testCursorRule('n-resize');
testCursorRule('ne-resize');
testCursorRule('nw-resize');
testCursorRule('s-resize');
testCursorRule('se-resize');
testCursorRule('sw-resize');
testCursorRule('w-resize');
testCursorRule('ew-resize');
testCursorRule('ns-resize');
testCursorRule('nesw-resize');
testCursorRule('nwse-resize');
testCursorRule('col-resize');
testCursorRule('row-resize');
testCursorRule('all-scroll');
testCursorRule('zoom-in');
testCursorRule('zoom-out');
testCursorRule('-webkit-grab');
testCursorRule('-webkit-grabbing');
testCursorRule('-webkit-zoom-in');
testCursorRule('-webkit-zoom-out');

testCursorRule('url(file:///foo.png), crosshair');
testCursorRule('url(file:///foo.png), url(file:///foo2.png), pointer');
testCursorRule('url(file:///foo.png) 12 3, pointer');
testCursorRule('url(file:///foo.png) 0 0, pointer');
testCursorRule('url(file:///foo.png) 12 3, url(file:///foo2.png), url(file:///foo3.png) 6 7, crosshair');
testCursorRule('url(file:///foo.png) -2 3, pointer');
testCursorRule('url(file:///foo.png) 2 -3, pointer');
testCursorRule('url(file:///foo.png) -1 -1, pointer');

debug('');
debug('Test a bunch of invalid cursor rules which shouldn\'t parse at all.');
testInvalidCursorRule('nonexistent');
testInvalidCursorRule('ltr');
testInvalidCursorRule('inline');
testInvalidCursorRule('url(file:///foo.png), url(file:///foo2.png)');
testInvalidCursorRule('url(file:///foo.png) 12');
testInvalidCursorRule('url(file:///foo.png) 12 3 5');
testInvalidCursorRule('url(file:///foo.png) x y');
testInvalidCursorRule('url(file:///foo.png) auto');

successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
