<!DOCTYPE html>
<html>
<head>
    <style>
        div { width: 0; height: 0 }
        #reflectionNone { -webkit-box-reflect: none }
	#reflectionDirection { -webkit-box-reflect: below }
	#reflectionOffset { -webkit-box-reflect: right 50% }
        #reflectionMask { -webkit-box-reflect: below 5px -webkit-gradient(linear, 0 0, 0 0) 25 25 25 25 stretch stretch; }
    </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, val)
        {
            log('-webkit-box-reflect: ' + val + ';');
            var ob = document.getElementById(id);
            subTest(ob, '-webkit-box-reflect');
        }

        function runTests()
        {
            if (window.testRunner)
                testRunner.dumpAsText();
            test('reflectionNone', 'none');
            log('');
            test('reflectionDirection', 'below');
            log('');
            test('reflectionOffset', 'right 50%');
            log('');
            test('reflectionMask', 'below 5px -webkit-gradient(linear, 0 0, 0 0) 25 25 25 25 stretch stretch');
        }
    </script>
</head>
<body onload="runTests();">
    <p>Test calling getPropertyValue on computed styles for -webkit-border-image property.</p>
    <pre id="console"></pre>

    <div id="reflectionNone"></div>
    <div id="reflectionDirection"></div>
    <div id="reflectionOffset"></div>
    <div id="reflectionMask"></div>

</body>
</html>
