aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition.html
blob: 2e7d0bb1bf75d3f9bc14d7d7f6a64f5757136ea3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>CSS Transitions Test: behavior when transition parameters change while transitioning</title>
        <meta name="assert" content="Test checks that all transitions run properly when property or duration is changed mid-run">
        <link rel="help" title="3. Starting of transitions" href="http://www.w3.org/TR/css3-transitions/#starting">
        <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>
        <script src="./support/runParallelAsyncHarness.js" type="text/javascript"></script>
        <script src="./support/generalParallelTest.js" type="text/javascript"></script>

        <style type="text/css">
            #offscreen {
                position: absolute;
                top: -100000px;
                left: -100000px;
                width: 100000px;
                height: 100000px;
            }
        </style>
    </head>
    <body>
        <!-- required by testharnessreport.js -->
        <div id="log"></div>
        <!-- elements used for testing -->
        <div id="fixture" class="fixture">
            <div class="container">
                <div class="transition">Text sample</div>
            </div>
        </div>
        <div id="offscreen"></div>

        <!--
            SEE ./support/README.md for an abstract explanation of the test procedure
            http://test.csswg.org/source/contributors/rodneyrehm/submitted/css3-transitions/README.md
        -->

        <script>
            // this test takes its time, give it a minute to run
            var timeout = 60000;
            setup({timeout: timeout});

            var tests = [
                {
                    name: "changing transition-duration",
                    property: 'padding-left',
                    transitions: 'padding-left .5s linear 0s',
                    from: {'padding-left': '1px'},
                    to: {'padding-left': '10px'},
                    then: {
                        'transition-duration': '0.1s'
                    },
                    expect: [
                        'padding-left:0.5s'
                    ]
                },
                {
                    name: "changing transition-property",
                    property: 'padding-left',
                    transitions: 'padding-left .5s linear 0s',
                    from: {'padding-left': '1px'},
                    to: {'padding-left': '10px'},
                    then: {
                        'transition-property': 'margin-left'
                    },
                    expect: [
                        ''
                    ]
                }
            ];

            // general transition-duration
            var duration = '0.5s';

            runParallelAsyncHarness({
                // array of test data
                tests: tests,
                // the number of tests to run in parallel
                testsPerSlice: 50,
                // milliseconds to wait before calling teardown and ending test
                duration: parseFloat(duration) * 1000,
                // the global suite timeout
                timeout: timeout,
                // prepare individual test
                setup: function(data, options) {
                    var styles = {
                        '.fixture': {},

                        '.container': {},
                        '.container.to': {},
                        '.container.how': {},

                        '.transition': data.from,
                        '.transition.to' : data.to,
                        '.transition.how' : {transition: data.transitions},
                        '.transition.then' : data.then
                    };

                    generalParallelTest.setup(data, options);
                    generalParallelTest.addStyles(data, options, styles);
                },
                // cleanup after individual test
                teardown: generalParallelTest.teardown,
                // invoked prior to running a slice of tests
                sliceStart: generalParallelTest.sliceStart,
                // invoked after running a slice of tests
                sliceDone: generalParallelTest.sliceDone,
                // test cases, make them as granular as possible
                cases: {
                    // test property values while transitioning
                    // values.start kicks off a transition
                    'values': {
                        // run actual test, assertions can be used here!
                        start: function(test, data, options) {
                            // identify initial and target values
                            generalParallelTest.getStyle(data);
                            // kick off the transition
                            generalParallelTest.startTransition(data);

                            setTimeout(function() {
                                data.transition.node.classList.add('then');

                                for (var property in data.then) {
                                    var current = data.transition.computedStyle(property);
                                    assert_equals(current, data.then[property], 'value of ' + property + ' changed');
                                }

                            }, 50);
                        },
                        done: function(test, data, options) {
                            // make sure we got the event for the tested property only
                            test.step(generalParallelTest.assertExpectedEventsFunc(data, 'transition', data.expect));
                        }
                    }
                },
                // called once all tests are done
                done: generalParallelTest.done
            });
        </script>
    </body>
</html>