<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>CSS Transitions Test: Parsing transition-duration</title>
        <meta name="assert" content="Test checks that transition-duration values are parsed properly">
        <link rel="help" title="2.2. The 'transition-duration' Property" href="http://www.w3.org/TR/css3-transitions/#transition-duration-property">
        <link rel="help" title="CSS Values and Units Module Level 3 - 6.2. Times: the ‘<time>’ type and ‘s’, ‘ms’ units" href="http://www.w3.org/TR/css3-values/#time">
        <link rel="author" title="Rodney Rehm" href="http://rodneyrehm.de/en/">
        <meta name="flags" content="dom">

        <script src="/resources/testharness.js" type="text/javascript"></script>
        <script src="/resources/testharnessreport.js" type="text/javascript"></script>

        <script src="./support/vendorPrefix.js" type="text/javascript"></script>
        <script src="./support/helper.js" type="text/javascript"></script>
    </head>
    <body>
        <!--  required by testharnessreport.js  -->
        <div id="log"></div>
        <!--  elements used for testing  -->
        <div id="container">
            <div id="transition"></div>
        </div>

        <script>
            var transition = document.getElementById('transition');
            // <time> [, <time>]*
            var values = {
                // seconds
                '10.2s': '10.2s',
                '1s': '1s',
                '0.1s': '0.1s',
                '0.01s': '0.01s',
                '0.001s': '0.001s',
                '0.009s': '0.009s',
                '0s': '0s',
                '.0s': '0s',
                '0.0s': '0s',
                '.3s': '0.3s',
                '-5s' : '0s',
                // milliseconds
                '10200ms': '10.2s',
                '1000ms': '1s',
                '100ms': '0.1s',
                '10ms': '0.01s',
                '9ms': '0.009s',
                '1ms': '0.001s',
                '0ms': '0s',
                '-500ms' : '0s',
                // combination
                '1s, 0.1s, 10ms': '1s, 0.1s, 0.01s',
                // invalid
                'foobar': '0s'
            };

            // these tests are supposed to fail and
            // possibly make the engine issue a parser warning
            var invalidTests = {
                '-5s': true,
                '-500ms': true,
                'foobar': true
            };

            for (var key in values) {
                if (Object.prototype.hasOwnProperty.call(values, key)) {
                    test(function() {
                        setStyle('#transition', {
                            'transition-duration': key
                        });
                        var result = computedStyle(transition, 'transition-duration');
                        assert_equals(result, values[key], "Expected computed value");
                    }, "parse '" + key + "'",
                    {
                        // mark tests that fail as such
                        flags: invalidTests[key] ? "invalid" : ""
                    });
                }
            }
        </script>
    </body>
</html>
