<!DOCTYPE html>
<html>
<head>
    <style>
        #spacingPair { border-spacing: 10px 20px; }
        #spacingSingle { border-spacing: 10px; }
        #zeroSpacingPair { border-spacing: 0px 0px; }
        #zeroSpacingSingle { border-spacing: 0px; }
    </style>
    <script type="text/javascript">
        function log(msg)
        {
            document.getElementById('console').appendChild(document.createTextNode(msg + '\n'));
        }

        function test(id, prop)
        {
            var ob = document.getElementById(id + 'Pair');
            log('getPropertyValue(' + prop + '): ' + document.defaultView.getComputedStyle(ob, null).getPropertyValue(prop));
            log('getPropertyCSSValue(' + prop + '): ' + document.defaultView.getComputedStyle(ob, null).getPropertyCSSValue(prop));
            ob = document.getElementById(id + 'Single');
            log('getPropertyValue(' + prop + '): ' + document.defaultView.getComputedStyle(ob, null).getPropertyValue(prop));
            log('getPropertyCSSValue(' + prop + '): ' + document.defaultView.getComputedStyle(ob, null).getPropertyCSSValue(prop));
        }

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

            test('spacing', 'border-spacing');
            
            log('');

            log('Test getting border-spacing of 0.')
            test('zeroSpacing', 'border-spacing');

            log('');

            log('Test getting initial value of the background size.')
            var ob = document.getElementById('spacingInit');
            log('getPropertyValue(border-spacing): ' + document.defaultView.getComputedStyle(ob, null).getPropertyValue('border-spacing'));
            log('getPropertyCSSValue(border-spacing): ' + document.defaultView.getComputedStyle(ob, null).getPropertyCSSValue('border-spacing'));
        }
    </script>
</head>
<body onload="runTests();">
    <p>Test calling getPropertyValue on computed styles for -webkit-backround-size properties.</p>
    <pre id="console"></pre>

    <div id="spacingPair"></div>
    <div id="spacingSingle"></div>
    <div id="zeroSpacingPair"></div>
    <div id="zeroSpacingSingle"></div>
    <div id="spacingInit"></div>
</body>
</html>
