| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <script src="../resources/testharness.js"></script> | |
| 3 <script src="../resources/testharnessreport.js"></script> | |
| 4 <body></body> | |
| 5 <script> | |
| 6 function assertAnimationEffect({keyframes, expect}) { | |
| 7 var target = document.createElement('target'); | |
| 8 document.body.appendChild(target); | |
| 9 var animation = target.animate(keyframes, {duration: 1, fill: 'forwards'}); | |
| 10 animation.pause(); | |
| 11 for (var {at, is} of expect) { | |
| 12 animation.currentTime = at; | |
| 13 for (var property in is) | |
| 14 assert_equals(getComputedStyle(target)[property], is[property], `${propert
y} is ${is[property]} at ${at}`); | |
| 15 } | |
| 16 target.remove(); | |
| 17 } | |
| 18 | |
| 19 function createIterable(iterations) { | |
| 20 return { | |
| 21 [Symbol.iterator]() { | |
| 22 var i = 0; | |
| 23 return {next: () => iterations[i++]}; | |
| 24 }, | |
| 25 }; | |
| 26 } | |
| 27 | |
| 28 test(() => { | |
| 29 assertAnimationEffect({ | |
| 30 keyframes: createIterable([ | |
| 31 {done: false, value: {left: '100px'}}, | |
| 32 {done: false, value: {left: '300px'}}, | |
| 33 {done: false, value: {left: '200px'}}, | |
| 34 {done: true}, | |
| 35 ]), | |
| 36 expect: [ | |
| 37 {at: 0, is: {left: '100px'}}, | |
| 38 {at: 0.25, is: {left: '200px'}}, | |
| 39 {at: 0.5, is: {left: '300px'}}, | |
| 40 {at: 0.75, is: {left: '250px'}}, | |
| 41 {at: 1, is: {left: '200px'}}, | |
| 42 ], | |
| 43 }); | |
| 44 }, 'Custom iterator with basic keyframes.'); | |
| 45 | |
| 46 test(() => { | |
| 47 assertAnimationEffect({ | |
| 48 keyframes: { | |
| 49 left: createIterable([ | |
| 50 {done: false, value: '100px'}, | |
| 51 {done: false, value: '300px'}, | |
| 52 {done: false, value: '200px'}, | |
| 53 {done: true}, | |
| 54 ]), | |
| 55 }, | |
| 56 expect: [ | |
| 57 {at: 0, is: {left: '100px'}}, | |
| 58 {at: 0.25, is: {left: '200px'}}, | |
| 59 {at: 0.5, is: {left: '300px'}}, | |
| 60 {at: 0.75, is: {left: '250px'}}, | |
| 61 {at: 1, is: {left: '200px'}}, | |
| 62 ], | |
| 63 }); | |
| 64 }, 'Custom iterator in property indexed keyframes.'); | |
| 65 | |
| 66 test(() => { | |
| 67 var keyframes = createIterable([ | |
| 68 {done: false, value: {left: '100px'}}, | |
| 69 {done: false, value: {left: '300px'}}, | |
| 70 {done: false, value: {left: '200px'}}, | |
| 71 {done: true}, | |
| 72 ]); | |
| 73 keyframes.easing = 'ease-in-out'; | |
| 74 keyframes.offset = '0.1'; | |
| 75 assertAnimationEffect({ | |
| 76 keyframes, | |
| 77 expect: [ | |
| 78 {at: 0, is: {left: '100px'}}, | |
| 79 {at: 0.25, is: {left: '200px'}}, | |
| 80 {at: 0.5, is: {left: '300px'}}, | |
| 81 {at: 0.75, is: {left: '250px'}}, | |
| 82 {at: 1, is: {left: '200px'}}, | |
| 83 ], | |
| 84 }); | |
| 85 }, 'easing and offset are ignored on iterable objects.'); | |
| 86 | |
| 87 test(() => { | |
| 88 assertAnimationEffect({ | |
| 89 keyframes: createIterable([ | |
| 90 {done: false, value: {left: '100px', top: '200px'}}, | |
| 91 {done: false, value: {left: '300px'}}, | |
| 92 {done: false, value: {left: '200px', top: '100px'}}, | |
| 93 {done: true}, | |
| 94 ]), | |
| 95 expect: [ | |
| 96 {at: 0, is: {left: '100px', top: '200px'}}, | |
| 97 {at: 0.25, is: {left: '200px', top: '175px'}}, | |
| 98 {at: 0.5, is: {left: '300px', top: '150px'}}, | |
| 99 {at: 0.75, is: {left: '250px', top: '125px'}}, | |
| 100 {at: 1, is: {left: '200px', top: '100px'}}, | |
| 101 ], | |
| 102 }); | |
| 103 }, 'Custom iterator with multiple properties specified.'); | |
| 104 | |
| 105 test(() => { | |
| 106 assertAnimationEffect({ | |
| 107 keyframes: createIterable([ | |
| 108 {done: false, value: {left: '100px'}}, | |
| 109 {done: false, value: {left: '250px', offset: 0.75}}, | |
| 110 {done: false, value: {left: '200px'}}, | |
| 111 {done: true}, | |
| 112 ]), | |
| 113 expect: [ | |
| 114 {at: 0, is: {left: '100px'}}, | |
| 115 {at: 0.25, is: {left: '150px'}}, | |
| 116 {at: 0.5, is: {left: '200px'}}, | |
| 117 {at: 0.75, is: {left: '250px'}}, | |
| 118 {at: 1, is: {left: '200px'}}, | |
| 119 ], | |
| 120 }); | |
| 121 }, 'Custom iterator with offset specified.'); | |
| 122 | |
| 123 test(() => { | |
| 124 assert_throws({name: 'TypeError'}, () => { | |
| 125 assertAnimationEffect({ | |
| 126 keyframes: createIterable([ | |
| 127 {done: false, value: {left: '100px'}}, | |
| 128 {done: false, value: 1234}, | |
| 129 {done: false, value: {left: '200px'}}, | |
| 130 {done: true}, | |
| 131 ]), | |
| 132 expect: [], | |
| 133 }); | |
| 134 }); | |
| 135 }, 'Custom iterator with non object keyframe should throw.'); | |
| 136 | |
| 137 test(() => { | |
| 138 assert_throws({name: 'TypeError'}, () => { | |
| 139 assertAnimationEffect({ | |
| 140 keyframes: createIterable([ | |
| 141 {done: false, value: {left: ['100px', '200px']}}, | |
| 142 {done: true}, | |
| 143 ]), | |
| 144 expect: [], | |
| 145 }); | |
| 146 }); | |
| 147 }, 'Custom iterator with value list in keyframe should throw.'); | |
| 148 | |
| 149 test(() => { | |
| 150 assert_throws({name: 'TypeError'}, () => { | |
| 151 assertAnimationEffect({ | |
| 152 keyframes: { | |
| 153 left: createIterable([ | |
| 154 {done: false, value: {toString: null}}, | |
| 155 {done: true}, | |
| 156 ]), | |
| 157 }, | |
| 158 expect: [], | |
| 159 }); | |
| 160 }); | |
| 161 }, 'Custom iterator in property indexed keyframes with null toString method shou
ld throw.'); | |
| 162 </script> | |
| OLD | NEW |