| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <div> |
| <div style="width:500px;height:500px"><div id="test">hello</div></div> |
| </div> |
| <script> |
| 'use strict'; |
| // Test the parsing and the computed style values of the transitions properties. |
| |
| var e = document.getElementById('test'); |
| var style = e.style; |
| var computedStyle = window.getComputedStyle(e, null); |
| |
| // This function checks the return value of computedStyle.transition and verifies WebKit can parse it. |
| function checkTransitionShorthandValue() { |
| var before = computedStyle.getPropertyValue('transition'); |
| e.style.transition = ''; |
| e.style.transition = before; |
| return (computedStyle.getPropertyValue('transition') == before); |
| } |
| |
| test(() => { |
| style.transition = ""; |
| // Initial test. |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "none"; |
| assert_not_equals(Object.keys(style).indexOf('transition'), -1); |
| assert_not_equals(Object.keys(style).indexOf('webkitTransition'), -1); |
| assert_equals(style.transition, 'none 0s ease 0s'); |
| assert_equals(computedStyle.transition, 'none 0s ease 0s'); |
| assert_equals(style.webkitTransition, 'none 0s ease 0s'); |
| assert_equals(computedStyle.webkitTransition, 'none 0s ease 0s'); |
| assert_true(checkTransitionShorthandValue()); |
| |
| style.transition = "none 20s"; |
| assert_equals(style.transition, 'none 20s ease 0s'); |
| assert_equals(computedStyle.transition, 'none 20s ease 0s'); |
| assert_equals(style.webkitTransition, 'none 20s ease 0s'); |
| assert_equals(computedStyle.webkitTransition, 'none 20s ease 0s'); |
| assert_true(checkTransitionShorthandValue()); |
| |
| style.transition = "ease-in none 20s"; |
| assert_equals(style.transition, 'none 20s ease-in 0s'); |
| assert_equals(computedStyle.transition, 'none 20s ease-in 0s'); |
| assert_equals(style.webkitTransition, 'none 20s ease-in 0s'); |
| assert_equals(computedStyle.webkitTransition, 'none 20s ease-in 0s'); |
| assert_true(checkTransitionShorthandValue()); |
| |
| style.transition = "ease-in opacity 20s"; |
| assert_equals(style.transition, 'opacity 20s ease-in 0s'); |
| assert_equals(computedStyle.transition, 'opacity 20s ease-in 0s'); |
| assert_equals(style.webkitTransition, 'opacity 20s ease-in 0s'); |
| assert_equals(computedStyle.webkitTransition, 'opacity 20s ease-in 0s'); |
| assert_true(checkTransitionShorthandValue()); |
| |
| style.transition = "ease-in opacity 20s 10s"; |
| assert_equals(style.transition, 'opacity 20s ease-in 10s'); |
| assert_equals(computedStyle.transition, 'opacity 20s ease-in 10s'); |
| assert_equals(style.webkitTransition, 'opacity 20s ease-in 10s'); |
| assert_equals(computedStyle.webkitTransition, 'opacity 20s ease-in 10s'); |
| // Let's double check here the delay and duration. As stated in the spec the first value parsed |
| // is assigned to the duration. |
| assert_equals(computedStyle.transitionDuration, '20s'); |
| assert_equals(computedStyle.webkitTransitionDuration, '20s'); |
| assert_equals(computedStyle.transitionDelay, '10s'); |
| assert_equals(computedStyle.webkitTransitionDelay, '10s'); |
| assert_true(checkTransitionShorthandValue()); |
| |
| style.transition = "20s ease-in opacity 10s"; |
| assert_equals(style.transition, 'opacity 20s ease-in 10s'); |
| assert_equals(computedStyle.transition, 'opacity 20s ease-in 10s'); |
| assert_equals(style.webkitTransition, 'opacity 20s ease-in 10s'); |
| assert_equals(computedStyle.webkitTransition, 'opacity 20s ease-in 10s'); |
| assert_equals(computedStyle.transitionDuration, '20s'); |
| assert_equals(computedStyle.webkitTransitionDuration, '20s'); |
| assert_equals(computedStyle.transitionDelay, '10s'); |
| assert_equals(computedStyle.webkitTransitionDelay, '10s'); |
| assert_true(checkTransitionShorthandValue()); |
| |
| style.transition = "ease-in opacity 20s 10s, cubic-bezier(0.32, 0, 1, 1) 10s width 20s"; |
| assert_equals(style.transition, 'opacity 20s ease-in 10s, width 10s cubic-bezier(0.32, 0, 1, 1) 20s'); |
| assert_equals(computedStyle.transition, 'opacity 20s ease-in 10s, width 10s cubic-bezier(0.32, 0, 1, 1) 20s'); |
| assert_equals(style.webkitTransition, 'opacity 20s ease-in 10s, width 10s cubic-bezier(0.32, 0, 1, 1) 20s'); |
| assert_equals(computedStyle.webkitTransition, 'opacity 20s ease-in 10s, width 10s cubic-bezier(0.32, 0, 1, 1) 20s'); |
| // Let's double check here the delay and duration. As stated in the spec the first value parsed |
| // is assigned to the duration. |
| assert_equals(computedStyle.transitionDuration, '20s, 10s'); |
| assert_equals(computedStyle.webkitTransitionDuration, '20s, 10s'); |
| assert_equals(computedStyle.transitionDelay, '10s, 20s'); |
| assert_equals(computedStyle.webkitTransitionDelay, '10s, 20s'); |
| assert_true(checkTransitionShorthandValue()); |
| |
| style.transition = "all, all"; |
| assert_equals(style.transition, 'all 0s ease 0s, all 0s ease 0s'); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s, all 0s ease 0s'); |
| assert_equals(style.webkitTransition, 'all 0s ease 0s, all 0s ease 0s'); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s, all 0s ease 0s'); |
| |
| style.transition = "all 20s 10s ease-in, all ease-out 20s"; |
| assert_equals(style.transition, 'all 20s ease-in 10s, all 20s ease-out 0s'); |
| assert_equals(computedStyle.transition, 'all 20s ease-in 10s, all 20s ease-out 0s'); |
| assert_equals(style.webkitTransition, 'all 20s ease-in 10s, all 20s ease-out 0s'); |
| assert_equals(computedStyle.webkitTransition, 'all 20s ease-in 10s, all 20s ease-out 0s'); |
| |
| style.transition = "ease-in opacity 20s 10s, all ease-out 20s"; |
| assert_equals(style.transition, 'opacity 20s ease-in 10s, all 20s ease-out 0s'); |
| assert_equals(computedStyle.transition, 'opacity 20s ease-in 10s, all 20s ease-out 0s'); |
| assert_equals(style.webkitTransition, 'opacity 20s ease-in 10s, all 20s ease-out 0s'); |
| assert_equals(computedStyle.webkitTransition, 'opacity 20s ease-in 10s, all 20s ease-out 0s'); |
| assert_true(checkTransitionShorthandValue()); |
| |
| style.transition = " all ease-out 20s, ease-in opacity 20s 10s"; |
| assert_equals(style.transition, 'all 20s ease-out 0s, opacity 20s ease-in 10s'); |
| assert_equals(computedStyle.transition, 'all 20s ease-out 0s, opacity 20s ease-in 10s'); |
| assert_equals(style.webkitTransition, 'all 20s ease-out 0s, opacity 20s ease-in 10s'); |
| assert_equals(computedStyle.webkitTransition, 'all 20s ease-out 0s, opacity 20s ease-in 10s'); |
| assert_true(checkTransitionShorthandValue()); |
| }, "Valid transition shorthand values."); |
| |
| test(() => { |
| style.transition = ""; |
| |
| style.transition = "20"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "20, 20"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "all 30s width ease-in"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "all 30s ease-in 20px"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "all 30s ease-in 20s, 20px"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "all 30s ease-in 20s, step-start(2)"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "ease-in opacity 20s 10s, none"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "none, ease-in opacity 20s 10s, none"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "none, ease-in opacity 20s 10s"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "ease-in opacity 20s 10s, all 20s ease-out 0s, none"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "ease-in opacity 20s 10s, ease-in width 20s 10s, none"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| |
| style.transition = "none, none"; |
| assert_equals(style.transition, ''); |
| assert_equals(computedStyle.transition, 'all 0s ease 0s'); |
| assert_equals(style.webkitTransition, ''); |
| assert_equals(computedStyle.webkitTransition, 'all 0s ease 0s'); |
| }, "Invalid transition shorthand values."); |
| |
| test(() => { |
| style.transition = "ease-in ease-out"; |
| assert_equals(style.transitionProperty, 'ease-out'); |
| assert_equals(style.transitionTimingFunction, 'ease-in'); |
| |
| style.transition = "20s 10s"; |
| assert_equals(style.transitionDelay, '10s'); |
| assert_equals(style.transitionDuration, '20s'); |
| |
| style.transition = "-10s 10s"; |
| assert_equals(style.transitionDelay, '-10s'); |
| assert_equals(style.transitionDuration, '10s'); |
| |
| style.transition = "ease"; |
| assert_equals(style.transitionTimingFunction, 'ease'); |
| assert_equals(style.transitionProperty, 'all'); |
| }, "Ambiguous shorthand values."); |
| </script> |
| </body> |
| </html> |