<!DOCTYPE html>
<html>
<head>
    <style>
        #backgroundPositionZeroSingle { background-position: 0; }
        #backgroundPositionZeroPair { background-position: 0 0; }
        #backgroundPositionSingle { background-position: 15px; }
        #backgroundPositionPair { background-position: 10px 20px; }
    </style>
    <script type="text/javascript">
        function log(msg)
        {
            document.getElementById('console').appendChild(document.createTextNode(msg + '\n'));
        }

        function subTest(ob, prop)
        {
            log('  ' + prop);
            log('    getPropertyValue:    ' + document.defaultView.getComputedStyle(ob, null).getPropertyValue(prop));
            log('    getPropertyCSSValue: ' + document.defaultView.getComputedStyle(ob, null).getPropertyCSSValue(prop));
        }

        function test(id, single, pair)
        {
            log('background-position: ' + single + ';');
            var ob = document.getElementById(id + 'Single');
            subTest(ob, 'background-position');
            subTest(ob, 'background-position-x');
            subTest(ob, 'background-position-y');

            log('background-position: ' + pair + ';');
            ob = document.getElementById(id + 'Pair');
            subTest(ob, 'background-position');
            subTest(ob, 'background-position-x');
            subTest(ob, 'background-position-y');
        }

        function runTests()
        {
            if (window.layoutTestController)
                layoutTestController.dumpAsText();

            test('backgroundPositionZero', '0', '0 0');

            log('');

            test('backgroundPosition', '15px', '10px 20px');

            log('');

            log('No background-position set');
            var ob = document.getElementById('testBackgroundPositionInit');
            subTest(ob, 'background-position');
            subTest(ob, 'background-position-x');
            subTest(ob, 'background-position-y');
        }
    </script>
</head>
<body onload="runTests();">
    <p>Test calling getPropertyValue on computed styles for background-position properties.</p>
    <pre id="console"></pre>

    <div id="backgroundPositionZeroSingle"></div>
    <div id="backgroundPositionZeroPair"></div>
    <div id="backgroundPositionSingle"></div>
    <div id="backgroundPositionPair"></div>

    <div id="testBackgroundPositionInit"></div>
</body>
</html>
