| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <style> |
| #target { |
| left: 0px; |
| top: 0px; |
| } |
| #target.transition-top { |
| top: 100px; |
| transition: top 1s linear; |
| } |
| #target.transition-left { |
| left: 100px; |
| transition: left 50ms linear; |
| } |
| </style> |
| <div id="target"></div> |
| <script> |
| 'use strict'; |
| function waitForNextFrame() { |
| return new Promise(function(resolve, reject) { |
| requestAnimationFrame(() => { |
| resolve(); |
| }); |
| }); |
| } |
| |
| async_test(t => { |
| waitForNextFrame().then(() => { |
| target.classList.add('transition-top'); |
| }).then(waitForNextFrame).then(() => { |
| target.classList.remove('transition-top'); |
| }).then(waitForNextFrame).then(t.step_func(() => { |
| target.classList.add('transition-left'); |
| assert_equals(getComputedStyle(target).top, '0px'); |
| assert_equals(getComputedStyle(target).left, '0px'); |
| target.addEventListener('transitionend', t.step_func_done(() => { |
| assert_equals(getComputedStyle(target).left, '100px'); |
| })); |
| })); |
| }, 'Having stopped a transition before it completes, a subsequent transition starts correctly'); |
| </script> |