| <!DOCTYPE html> |
| |
| <html> |
| <head> |
| <style> |
| #box { |
| height: 100px; |
| width: 100px; |
| background-color: blue; |
| -webkit-transition-duration: 1s; |
| -webkit-transition-timing-function: linear; |
| -webkit-transition-property: -webkit-transform; |
| } |
| </style> |
| <script> |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| var result = "PASS"; |
| const defaultTolerance = 10; |
| var transitionStartTime; |
| |
| function isCloseEnough(actual, desired) |
| { |
| var diff = Math.abs(actual - desired); |
| return diff < defaultTolerance; |
| } |
| |
| function changeValues() |
| { |
| var box = document.getElementById('box'); |
| box.style.webkitTransitionDuration = "0.1s"; |
| } |
| |
| function getXPosition() |
| { |
| var t = window.getComputedStyle(document.getElementById('box')).webkitTransform; |
| t = t.split("("); |
| t = t[1].split(","); |
| return t[4]; |
| } |
| |
| function checkIntermediateValue() |
| { |
| // We should be roughly halfway in the transition from 0 to 100, but the |
| // timeout may not fire exactly then. Figure out where we should be |
| // based on a linear interpolation of timestamps. |
| var actualXPos = getXPosition(); |
| var expectedXPos = (new Date().getTime() - transitionStartTime)/1000 * 100; |
| if (!isCloseEnough(actualXPos, expectedXPos)) |
| result = 'FAIL for intermediate value (was: ' + actualXPos + ', expected: ' + expectedXPos + ')'; |
| } |
| |
| function checkFinalValue() |
| { |
| var actualXPos = getXPosition(); |
| var transitionFraction = (new Date().getTime() - transitionStartTime)/100; |
| var expectedXPos = 100 - Math.min(transitionFraction, 1) * 100; |
| |
| if (!isCloseEnough(actualXPos, expectedXPos)) { |
| if (result == 'PASS') |
| result = ''; |
| result += 'FAIL for final value (was: ' + actualXPos + ', expected: ' + expectedXPos + ')'; |
| } |
| |
| document.getElementById('result').innerText = result; |
| if (window.testRunner) |
| testRunner.notifyDone(); |
| } |
| |
| function goBack() |
| { |
| var box = document.getElementById('box'); |
| box.style.webkitTransform = 'translateX(0)'; |
| transitionStartTime = new Date().getTime(); |
| } |
| |
| function start() |
| { |
| var box = document.getElementById('box'); |
| setTimeout(changeValues, 100); |
| setTimeout(checkIntermediateValue, 500); |
| setTimeout(checkFinalValue, 1300); |
| box.style.webkitTransform = 'translateX(100px)'; |
| transitionStartTime = new Date().getTime(); |
| } |
| |
| window.addEventListener('load', start, false); |
| document.addEventListener('webkitTransitionEnd', goBack, false); |
| </script> |
| </head> |
| <body> |
| |
| <p>Test changes -webkit-transition-duration while the transition is running to ensure that the running transition is not affected</p> |
| <div id="box"> |
| </div> |
| <div id="result"> |
| </div> |
| </body> |
| </html> |