| Index: LayoutTests/animations/timing-properties-do-not-update-running-animation.html
|
| diff --git a/LayoutTests/animations/timing-properties-do-not-update-running-animation.html b/LayoutTests/animations/timing-properties-do-not-update-running-animation.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8a624c7e69ebe1e25995eb15c87a2fca6c102282
|
| --- /dev/null
|
| +++ b/LayoutTests/animations/timing-properties-do-not-update-running-animation.html
|
| @@ -0,0 +1,152 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| +<head>
|
| + <style type="text/css">
|
| + #wrapper div {
|
| + height: 30px;
|
| + width: 100px;
|
| + background-color: red;
|
| + margin-bottom: 10px;
|
| + position: relative;
|
| + }
|
| + #wrapper.animated div {
|
| + -webkit-animation: test 100ms forwards;
|
| + animation: test 100ms forwards;
|
| + }
|
| + @-webkit-keyframes test {
|
| + from { left: 100px; }
|
| + to { left: 300px; }
|
| + }
|
| + @keyframes test {
|
| + from { left: 100px; }
|
| + to { left: 300px; }
|
| + }
|
| + #wrapper.updated div#duration {
|
| + /* Test will time out if this is applied. */
|
| + -webkit-animation-duration: 1000s;
|
| + animation-duration: 1000s;
|
| + }
|
| + #wrapper.updated div#iteration-count {
|
| + /* Default is 1 */
|
| + /* Test will time out if this is applied. */
|
| + -webkit-animation-iteration-count: 1000000;
|
| + animation-iteration-count: 1000000;
|
| + }
|
| + #wrapper.updated div#delay {
|
| + /* Default is 0 */
|
| + /* Test will time out if this is applied. */
|
| + -webkit-animation-delay: 1000s;
|
| + animation-delay: 1000s;
|
| + }
|
| + #wrapper.updated div#direction {
|
| + /* Default is normal */
|
| + /* End state will be incorrect if this is applied. */
|
| + -webkit-animation-direction: reverse;
|
| + animation-direction: reverse;
|
| + }
|
| + #wrapper.updated div#fill-mode {
|
| + /* End state will be incorrect if this is applied. */
|
| + -webkit-animation-fill-mode: none;
|
| + animation-fill-mode: none;
|
| + }
|
| + #wrapper.updated div#timing-function {
|
| + /* Default is ease */
|
| + /* Property will overshoot if this is applied. */
|
| + -webkit-animation-timing-function: cubic-bezier(0, 10, 1, 10);
|
| + animation-timing-function: cubic-bezier(0, 10, 1, 10);
|
| + }
|
| + </style>
|
| + <script type="text/javascript">
|
| + if (window.testRunner) {
|
| + testRunner.dumpAsText();
|
| + testRunner.waitUntilDone();
|
| + }
|
| +
|
| + function go() {
|
| + document.addEventListener('webkitAnimationStart', onStart);
|
| + document.addEventListener('webkitAnimationEnd', onEnd);
|
| + document.getElementById('wrapper').classList.add('animated');
|
| + }
|
| +
|
| + var startCount = 0;
|
| + function onStart() {
|
| + if (++startCount === 6) {
|
| + setTimeout(update, 0);
|
| + setTimeout(checkOvershoot, 10);
|
| + }
|
| + }
|
| +
|
| + function update() {
|
| + document.getElementById('wrapper').classList.add('updated');
|
| + }
|
| +
|
| + function checkOvershoot() {
|
| + var left = parseInt(getComputedStyle(document.getElementById('timing-function')).left);
|
| + document.getElementById('log').innerHTML += (left <= 300 ?
|
| + 'PASS: Element \'timing-function\' did not overshoot' :
|
| + 'FAIL: Element \'timing-function\' overshot') +
|
| + '<br>';
|
| + }
|
| +
|
| + var results = {};
|
| + function test(id, property, expected) {
|
| + var actual = getComputedStyle(document.getElementById(id))[property];
|
| + var pass = actual === expected;
|
| + if (results[id] === undefined) {
|
| + results[id] = '';
|
| + }
|
| + results[id] += (pass ?
|
| + 'PASS: Element \'' + id + '\': ' + property + ' was ' + expected :
|
| + 'FAIL: Element \'' + id + '\': ' + property + ' expected ' + expected + ' but saw ' + actual) +
|
| + '<br>';
|
| + }
|
| +
|
| + var endCount = 0;
|
| + function onEnd(e) {
|
| + var id = e.target.id;
|
| + if (id === 'duration') {
|
| + test(id, '-webkit-animation-duration', '1000s');
|
| + } else if (id === 'iteration-count') {
|
| + test(id, '-webkit-animation-iteration-count', '1000000');
|
| + } else if (id === 'delay') {
|
| + test(id, '-webkit-animation-delay', '1000s');
|
| + } else if (id === 'direction') {
|
| + test(id, '-webkit-animation-direction', 'reverse');
|
| + } else if (id === 'fill-mode') {
|
| + test(id, '-webkit-animation-fill-mode', 'none');
|
| + } else if (id === 'timing-function') {
|
| + test(id, '-webkit-animation-timing-function', 'cubic-bezier(0, 10, 1, 10)');
|
| + }
|
| + test(id, 'left', '300px');
|
| + if (++endCount === 6) {
|
| + finishTest();
|
| + }
|
| + }
|
| +
|
| + function finishTest() {
|
| + var elements = document.getElementById('wrapper').getElementsByTagName('div');
|
| + for (var i = 0; i < elements.length; ++i) {
|
| + document.getElementById('log').innerHTML += results[elements[i].id];
|
| + }
|
| + if (window.testRunner) {
|
| + testRunner.notifyDone();
|
| + }
|
| + }
|
| + </script>
|
| +</head>
|
| +<body onload="go()">
|
| + <p>
|
| + Tests that modifying the iteration count, delay, duration, direction, fill
|
| + mode or timing function do not cause a running animation to be updated.
|
| + </p>
|
| + <div id="wrapper">
|
| + <div id="duration">duration</div>
|
| + <div id="iteration-count">iteration-count</div>
|
| + <div id="delay">delay</div>
|
| + <div id="direction">direction</div>
|
| + <div id="fill-mode">fill-mode</div>
|
| + <div id="timing-function">timing-function</div>
|
| + </div>
|
| + <div id="log"></div>
|
| +</body>
|
| +</html>
|
|
|