Index: third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/animation-types/property-types.js |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/animation-types/property-types.js b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/animation-types/property-types.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..14c8f27c951fb787cc032058c0518ae9889fe69c |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/animation-types/property-types.js |
@@ -0,0 +1,972 @@ |
+const discreteType = { |
+ testInterpolation: function(property, setup, options) { |
+ options.forEach(function(keyframes) { |
+ var [ from, to ] = keyframes; |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: [from, to] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: from.toLowerCase() }, |
+ { time: 499, expected: from.toLowerCase() }, |
+ { time: 500, expected: to.toLowerCase() }, |
+ { time: 1000, expected: to.toLowerCase() }]); |
+ }, property + ' uses discrete animation when animating between "' |
+ + from + '" and "' + to + '" with linear easing'); |
+ |
+ test(function(t) { |
+ // Easing: http://cubic-bezier.com/#.68,0,1,.01 |
+ // With this curve, we don't reach the 50% point until about 95% of |
+ // the time has expired. |
+ var idlName = propertyToIDL(property); |
+ var keyframes = {}; |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: [from, to] }, |
+ { duration: 1000, fill: 'both', |
+ easing: 'cubic-bezier(0.68,0,1,0.01)' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: from.toLowerCase() }, |
+ { time: 940, expected: from.toLowerCase() }, |
+ { time: 960, expected: to.toLowerCase() }]); |
+ }, property + ' uses discrete animation when animating between "' |
+ + from + '" and "' + to + '" with effect easing'); |
+ |
+ test(function(t) { |
+ // Easing: http://cubic-bezier.com/#.68,0,1,.01 |
+ // With this curve, we don't reach the 50% point until about 95% of |
+ // the time has expired. |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: [from, to], |
+ easing: 'cubic-bezier(0.68,0,1,0.01)' }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: from.toLowerCase() }, |
+ { time: 940, expected: from.toLowerCase() }, |
+ { time: 960, expected: to.toLowerCase() }]); |
+ }, property + ' uses discrete animation when animating between "' |
+ + from + '" and "' + to + '" with keyframe easing'); |
+ }); |
+ }, |
+ |
+ testAddition: function(property, setup, options) { |
+ options.forEach(function(keyframes) { |
+ var [ from, to ] = keyframes; |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.animate({ [idlName]: [from, from] }, 1000); |
+ var animation = target.animate({ [idlName]: [to, to] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: to.toLowerCase() }]); |
+ }, property + ': "' + to + '" onto "' + from + '"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.animate({ [idlName]: [to, to] }, 1000); |
+ var animation = target.animate({ [idlName]: [from, from] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: from.toLowerCase() }]); |
+ }, property + ': "' + from + '" onto "' + to + '"'); |
+ }); |
+ }, |
+ |
+}; |
+ |
+const lengthType = { |
+ testInterpolation: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['10px', '50px'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '10px' }, |
+ { time: 500, expected: '30px' }, |
+ { time: 1000, expected: '50px' }]); |
+ }, property + ' supports animating as a length'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['1rem', '5rem'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '10px' }, |
+ { time: 500, expected: '30px' }, |
+ { time: 1000, expected: '50px' }]); |
+ }, property + ' supports animating as a length of rem'); |
+ }, |
+ |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '10px'; |
+ var animation = target.animate({ [idlName]: ['10px', '50px'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, [{ time: 0, expected: '20px' }]); |
+ }, property + ': length'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '1rem'; |
+ var animation = target.animate({ [idlName]: ['1rem', '5rem'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, [{ time: 0, expected: '20px' }]); |
+ }, property + ': length of rem'); |
+ }, |
+ |
+}; |
+ |
+const percentageType = { |
+ testInterpolation: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['10%', '50%'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '10%' }, |
+ { time: 500, expected: '30%' }, |
+ { time: 1000, expected: '50%' }]); |
+ }, property + ' supports animating as a percentage'); |
+ }, |
+ |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '60%'; |
+ var animation = target.animate({ [idlName]: ['70%', '100%'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, [{ time: 0, expected: '130%' }]); |
+ }, property + ': percentage'); |
+ }, |
+ |
+}; |
+ |
+const integerType = { |
+ testInterpolation: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: [-2, 2] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '-2' }, |
+ { time: 500, expected: '0' }, |
+ { time: 1000, expected: '2' }]); |
+ }, property + ' supports animating as an integer'); |
+ }, |
+ |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = -1; |
+ var animation = target.animate({ [idlName]: [-2, 2] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '-3' }]); |
+ }, property + ': integer'); |
+ }, |
+ |
+}; |
+ |
+const lengthPercentageOrCalcType = { |
+ testInterpolation: function(property, setup) { |
+ lengthType.testInterpolation(property, setup); |
+ percentageType.testInterpolation(property, setup); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['10px', '20%'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '10px' }, |
+ { time: 500, expected: 'calc(5px + 10%)' }, |
+ { time: 1000, expected: '20%' }]); |
+ }, property + ' supports animating as combination units "px" and "%"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['10%', '2em'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '10%' }, |
+ { time: 500, expected: 'calc(10px + 5%)' }, |
+ { time: 1000, expected: '20px' }]); |
+ }, property + ' supports animating as combination units "%" and "em"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['1em', '2rem'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '10px' }, |
+ { time: 500, expected: '15px' }, |
+ { time: 1000, expected: '20px' }]); |
+ }, property + ' supports animating as combination units "em" and "rem"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['10px', 'calc(1em + 20%)'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '10px' }, |
+ { time: 500, expected: 'calc(10px + 10%)' }, |
+ { time: 1000, expected: 'calc(10px + 20%)' }]); |
+ }, property + ' supports animating as combination units "px" and "calc"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate( |
+ { [idlName]: ['calc(10px + 10%)', 'calc(1em + 1rem + 20%)'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, |
+ expected: 'calc(10px + 10%)' }, |
+ { time: 500, |
+ expected: 'calc(15px + 15%)' }, |
+ { time: 1000, |
+ expected: 'calc(20px + 20%)' }]); |
+ }, property + ' supports animating as a calc'); |
+ }, |
+ |
+ testAddition: function(property, setup) { |
+ lengthType.testAddition(property, setup); |
+ percentageType.testAddition(property, setup); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '10px'; |
+ var animation = target.animate({ [idlName]: ['10%', '50%'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'calc(10px + 10%)' }]); |
+ }, property + ': units "%" onto "px"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '10%'; |
+ var animation = target.animate({ [idlName]: ['10px', '50px'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'calc(10px + 10%)' }]); |
+ }, property + ': units "px" onto "%"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '10%'; |
+ var animation = target.animate({ [idlName]: ['2rem', '5rem'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'calc(20px + 10%)' }]); |
+ }, property + ': units "rem" onto "%"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '2rem'; |
+ var animation = target.animate({ [idlName]: ['10%', '50%'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'calc(20px + 10%)' }]); |
+ }, property + ': units "%" onto "rem"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '2em'; |
+ var animation = target.animate({ [idlName]: ['2rem', '5rem'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, [{ time: 0, expected: '40px' }]); |
+ }, property + ': units "rem" onto "em"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '2rem'; |
+ var animation = target.animate({ [idlName]: ['2em', '5em'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, [{ time: 0, expected: '40px' }]); |
+ }, property + ': units "em" onto "rem"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = '10px'; |
+ var animation = target.animate({ [idlName]: ['calc(2em + 20%)', |
+ 'calc(5rem + 50%)'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'calc(30px + 20%)' }]); |
+ }, property + ': units "calc" onto "px"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'calc(10px + 10%)'; |
+ var animation = target.animate({ [idlName]: ['calc(20px + 20%)', |
+ 'calc(2em + 3rem + 40%)'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'calc(30px + 30%)' }]); |
+ }, property + ': calc'); |
+ }, |
+ |
+}; |
+ |
+const positiveNumberType = { |
+ testInterpolation: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: [1.1, 1.5] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: '1.1' }, |
+ { time: 500, expected: '1.3' }, |
+ { time: 1000, expected: '1.5' }]); |
+ }, property + ' supports animating as a positive number'); |
+ }, |
+ |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 1.1; |
+ var animation = target.animate({ [idlName]: [1.1, 1.5] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, [{ time: 0, expected: '2.2' }]); |
+ }, property + ': positive number'); |
+ }, |
+ |
+}; |
+ |
+const visibilityType = { |
+ testInterpolation: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['visible', 'hidden'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'visible' }, |
+ { time: 999, expected: 'visible' }, |
+ { time: 1000, expected: 'hidden' }]); |
+ }, property + ' uses visibility animation when animating ' |
+ + 'from "visible" to "hidden"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['hidden', 'visible'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'hidden' }, |
+ { time: 1, expected: 'visible' }, |
+ { time: 1000, expected: 'visible' }]); |
+ }, property + ' uses visibility animation when animating ' |
+ + 'from "hidden" to "visible"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['hidden', 'collapse'] }, |
+ { duration: 1000, fill: 'both' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'hidden' }, |
+ { time: 499, expected: 'hidden' }, |
+ { time: 500, expected: 'collapse' }, |
+ { time: 1000, expected: 'collapse' }]); |
+ }, property + ' uses visibility animation when animating ' |
+ + 'from "hidden" to "collapse"'); |
+ |
+ test(function(t) { |
+ // Easing: http://cubic-bezier.com/#.68,-.55,.26,1.55 |
+ // With this curve, the value is less than 0 till about 34% |
+ // also more than 1 since about 63% |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = |
+ target.animate({ [idlName]: ['visible', 'hidden'] }, |
+ { duration: 1000, fill: 'both', |
+ easing: 'cubic-bezier(0.68, -0.55, 0.26, 1.55)' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'visible' }, |
+ { time: 1, expected: 'visible' }, |
+ { time: 330, expected: 'visible' }, |
+ { time: 340, expected: 'visible' }, |
+ { time: 620, expected: 'visible' }, |
+ { time: 630, expected: 'hidden' }, |
+ { time: 1000, expected: 'hidden' }]); |
+ }, property + ' uses visibility animation when animating ' |
+ + 'from "visible" to "hidden" with easeInOutBack easing'); |
+ }, |
+ |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'visible'; |
+ var animation = target.animate({ [idlName]: ['visible', 'hidden'] }, |
+ { duration: 1000, fill: 'both', |
+ composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'visible' }, |
+ { time: 1000, expected: 'visible' }]); |
+ }, property + ': onto "visible"'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'hidden'; |
+ var animation = target.animate({ [idlName]: ['hidden', 'visible'] }, |
+ { duration: 1000, fill: 'both', |
+ composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'hidden' }, |
+ { time: 1000, expected: 'visible' }]); |
+ }, property + ': onto "hidden"'); |
+ }, |
+ |
+}; |
+ |
+const colorType = { |
+ testInterpolation: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['rgb(255, 0, 0)', |
+ 'rgb(0, 0, 255)'] }, |
+ 1000); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 500, expected: 'rgb(128, 0, 128)' }]); |
+ }, property + ' supports animating as color of rgb()'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['#ff0000', '#0000ff'] }, |
+ 1000); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 500, expected: 'rgb(128, 0, 128)' }]); |
+ }, property + ' supports animating as color of #RGB'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['hsl(0, 100%, 50%)', |
+ 'hsl(240, 100%, 50%)'] }, |
+ 1000); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 500, expected: 'rgb(128, 0, 128)' }]); |
+ }, property + ' supports animating as color of hsl()'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['#ff000066', '#0000ffcc'] }, |
+ 1000); |
+ // R: 255 * (0.4 * 0.5) / 0.6 = 85 |
+ // G: 255 * (0.8 * 0.5) / 0.6 = 170 |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 500, expected: 'rgba(85, 0, 170, 0.6)' }]); |
+ }, property + ' supports animating as color of #RGBa'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['rgba(255, 0, 0, 0.4)', |
+ 'rgba(0, 0, 255, 0.8)'] }, |
+ 1000); |
+ testAnimationSamples(animation, idlName, // Same as above. |
+ [{ time: 500, expected: 'rgba(85, 0, 170, 0.6)' }]); |
+ }, property + ' supports animating as color of rgba()'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['hsla(0, 100%, 50%, 0.4)', |
+ 'hsla(240, 100%, 50%, 0.8)'] }, |
+ 1000); |
+ testAnimationSamples(animation, idlName, // Same as above. |
+ [{ time: 500, expected: 'rgba(85, 0, 170, 0.6)' }]); |
+ }, property + ' supports animating as color of hsla()'); |
+ }, |
+ |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rgb(128, 128, 128)'; |
+ var animation = target.animate({ [idlName]: ['rgb(255, 0, 0)', |
+ 'rgb(0, 0, 255)'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'rgb(255, 128, 128)' }, |
+ // The value at 50% is interpolated |
+ // from 'rgb(128+255, 128, 128)' |
+ // to 'rgb(128, 128, 128+255)'. |
+ { time: 500, expected: 'rgb(255, 128, 255)' }]); |
+ }, property + ' supports animating as color of rgb() with overflowed ' + |
+ 'from and to values'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rgb(128, 128, 128)'; |
+ var animation = target.animate({ [idlName]: ['#ff0000', '#0000ff'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'rgb(255, 128, 128)' }]); |
+ }, property + ' supports animating as color of #RGB'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rgb(128, 128, 128)'; |
+ var animation = target.animate({ [idlName]: ['hsl(0, 100%, 50%)', |
+ 'hsl(240, 100%, 50%)'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'rgb(255, 128, 128)' }]); |
+ }, property + ' supports animating as color of hsl()'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rgb(128, 128, 128)'; |
+ var animation = target.animate({ [idlName]: ['#ff000066', '#0000ffcc'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [{ time: 0, expected: 'rgb(230, 128, 128)' }]); |
+ }, property + ' supports animating as color of #RGBa'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rgb(128, 128, 128)'; |
+ var animation = target.animate({ [idlName]: ['rgba(255, 0, 0, 0.4)', |
+ 'rgba(0, 0, 255, 0.8)'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, // Same as above. |
+ [{ time: 0, expected: 'rgb(230, 128, 128)' }]); |
+ }, property + ' supports animating as color of rgba()'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rgb(128, 128, 128)'; |
+ var animation = target.animate({ [idlName]: ['hsla(0, 100%, 50%, 0.4)', |
+ 'hsla(240, 100%, 50%, 0.8)'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, // Same as above. |
+ [{ time: 0, expected: 'rgb(230, 128, 128)' }]); |
+ }, property + ' supports animating as color of hsla()'); |
+ }, |
+ |
+}; |
+ |
+const transformListType = { |
+ testInterpolation: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['translate(200px, -200px)', |
+ 'translate(400px, 400px)'] }, |
+ 1000); |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: [ 1, 0, 0, 1, 300, 100 ] }]); |
+ }, property + ': translate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['rotate(45deg)', |
+ 'rotate(135deg)'] }, |
+ 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: [ Math.cos(Math.PI / 2), |
+ Math.sin(Math.PI / 2), |
+ -Math.sin(Math.PI / 2), |
+ Math.cos(Math.PI / 2), |
+ 0, 0] }]); |
+ }, property + ': rotate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['scale(3)', 'scale(5)'] }, |
+ 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: [ 4, 0, 0, 4, 0, 0 ] }]); |
+ }, property + ': scale'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = target.animate({ [idlName]: ['skew(30deg, 60deg)', |
+ 'skew(60deg, 30deg)'] }, |
+ 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: [ 1, Math.tan(Math.PI / 4), |
+ Math.tan(Math.PI / 4), 1, |
+ 0, 0] }]); |
+ }, property + ': skew'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = |
+ target.animate({ [idlName]: ['translateX(100px) rotate(45deg)', |
+ 'translateX(200px) rotate(135deg)'] }, |
+ 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: [ Math.cos(Math.PI / 2), |
+ Math.sin(Math.PI / 2), |
+ -Math.sin(Math.PI / 2), |
+ Math.cos(Math.PI / 2), |
+ 150, 0 ] }]); |
+ }, property + ': rotate and translate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = |
+ target.animate({ [idlName]: ['rotate(45deg) translateX(100px)', |
+ 'rotate(135deg) translateX(200px)'] }, |
+ 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: [ Math.cos(Math.PI / 2), |
+ Math.sin(Math.PI / 2), |
+ -Math.sin(Math.PI / 2), |
+ Math.cos(Math.PI / 2), |
+ 150 * Math.cos(Math.PI / 2), |
+ 150 * Math.sin(Math.PI / 2) ] }]); |
+ }, property + ': translate and rotate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = // matrix(0, 1, -1, 0, 0, 100) |
+ target.animate({ [idlName]: ['rotate(90deg) translateX(100px)', |
+ // matrix(-1, 0, 0, -1, 200, 0) |
+ 'translateX(200px) rotate(180deg)'] }, |
+ 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: [ Math.cos(Math.PI * 3 / 4), |
+ Math.sin(Math.PI * 3 / 4), |
+ -Math.sin(Math.PI * 3 / 4), |
+ Math.cos(Math.PI * 3 / 4), |
+ 100, 50 ] }]); |
+ }, property + ': mismatch order of translate and rotate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = // Same matrices as above. |
+ target.animate({ [idlName]: [ 'matrix(0, 1, -1, 0, 0, 100)', |
+ 'matrix(-1, 0, 0, -1, 200, 0)' ] }, |
+ 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: [ Math.cos(Math.PI * 3 / 4), |
+ Math.sin(Math.PI * 3 / 4), |
+ -Math.sin(Math.PI * 3 / 4), |
+ Math.cos(Math.PI * 3 / 4), |
+ 100, 50 ] }]); |
+ }, property + ': matrix'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ var animation = |
+ target.animate({ [idlName]: [ 'rotate3d(1, 1, 0, 0deg)', |
+ 'rotate3d(1, 1, 0, 90deg)'] }, |
+ 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: rotate3dToMatrix(1, 1, 0, Math.PI / 4) }]); |
+ }, property + ': rotate3d'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ // To calculate expected matrices easily, generate input matrices from |
+ // rotate3d. |
+ var from = rotate3dToMatrix3d(1, 1, 0, Math.PI / 4); |
+ var to = rotate3dToMatrix3d(1, 1, 0, Math.PI * 3 / 4); |
+ var animation = |
+ target.animate({ [idlName]: [ from, to ] }, 1000); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 500, expected: rotate3dToMatrix(1, 1, 0, Math.PI * 2 / 4) }]); |
+ }, property + ': matrix3d'); |
+ |
+ }, |
+ |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'translateX(100px)'; |
+ var animation = target.animate({ [idlName]: ['translateX(-200px)', |
+ 'translateX(500px)'] }, |
+ { duration: 1000, fill: 'both', |
+ composite: 'add' }); |
+ testAnimationSampleMatrices(animation, idlName, |
+ [ { time: 0, expected: [ 1, 0, 0, 1, -100, 0 ] }, |
+ { time: 1000, expected: [ 1, 0, 0, 1, 600, 0 ] }]); |
+ }, property + ': translate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rotate(45deg)'; |
+ var animation = target.animate({ [idlName]: ['rotate(-90deg)', |
+ 'rotate(90deg)'] }, |
+ { duration: 1000, fill: 'both', |
+ composite: 'add' }); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 0, expected: [ Math.cos(-Math.PI / 4), |
+ Math.sin(-Math.PI / 4), |
+ -Math.sin(-Math.PI / 4), |
+ Math.cos(-Math.PI / 4), |
+ 0, 0] }, |
+ { time: 1000, expected: [ Math.cos(Math.PI * 3 / 4), |
+ Math.sin(Math.PI * 3 / 4), |
+ -Math.sin(Math.PI * 3 / 4), |
+ Math.cos(Math.PI * 3 / 4), |
+ 0, 0] }]); |
+ }, property + ': rotate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'scale(2)'; |
+ var animation = target.animate({ [idlName]: ['scale(-3)', 'scale(5)'] }, |
+ { duration: 1000, fill: 'both', |
+ composite: 'add' }); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 0, expected: [ -6, 0, 0, -6, 0, 0 ] }, // scale(-3) scale(2) |
+ { time: 1000, expected: [ 10, 0, 0, 10, 0, 0 ] }]); // scale(5) scale(2) |
+ }, property + ': scale'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ // matrix(1, tan(10deg), tan(10deg), 1) |
+ target.style[idlName] = 'skew(10deg, 10deg)'; |
+ var animation = // matrix(1, tan(20deg), tan(-30deg), 1) |
+ target.animate({ [idlName]: ['skew(-30deg, 20deg)', |
+ // matrix(1, tan(-30deg), tan(20deg), 1) |
+ 'skew(20deg, -30deg)'] }, |
+ { duration: 1000, fill: 'both', composite: 'add' }); |
+ |
+ // matrix at 0%. |
+ // [ 1 tan(10deg) ] [ 1 tan(-30deg) ] |
+ // [ tan(10deg) 1 ] [ tan(20deg) 1 ] = |
+ // |
+ // [ 1 + tan(10deg) * tan(20deg) tan(-30deg) + tan(10deg) ] |
+ // [ tan(10deg) + tan(20deg) tan(10deg) * tan(-30deg) + 1 ] |
+ |
+ // matrix at 100%. |
+ // [ 1 tan(10deg) ] [ 1 tan(20deg) ] |
+ // [ tan(10deg) 1 ] [ tan(-30deg) 1 ] = |
+ // |
+ // [ 1 + tan(10deg) * tan(-30deg) tan(20deg) + tan(10deg) ] |
+ // [ tan(10deg) + tan(-30deg) tan(10deg) * tan(20deg) + 1 ] |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 0, expected: [ 1 + Math.tan(Math.PI/18) * Math.tan(Math.PI/9), |
+ Math.tan(Math.PI/18) + Math.tan(Math.PI/9), |
+ Math.tan(-Math.PI/6) + Math.tan(Math.PI/18), |
+ 1 + Math.tan(Math.PI/18) * Math.tan(-Math.PI/6), |
+ 0, 0] }, |
+ { time: 1000, expected: [ 1 + Math.tan(Math.PI/18) * Math.tan(-Math.PI/6), |
+ Math.tan(Math.PI/18) + Math.tan(-Math.PI/6), |
+ Math.tan(Math.PI/9) + Math.tan(Math.PI/18), |
+ 1 + Math.tan(Math.PI/18) * Math.tan(Math.PI/9), |
+ 0, 0] }]); |
+ }, property + ': skew'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ // matrix(1, 0, 0, 1, 100, 0) |
+ target.style[idlName] = 'translateX(100px)'; |
+ var animation = // matrix(0, 1, -1, 0, 0, 0) |
+ target.animate({ [idlName]: ['rotate(90deg)', |
+ // matrix(-1, 0, 0, -1, 0, 0) |
+ 'rotate(180deg)'] }, |
+ { duration: 1000, fill: 'both', composite: 'add' }); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 0, expected: [ 0, 1, -1, 0, 100, 0 ] }, |
+ { time: 1000, expected: [ -1, 0, 0, -1, 100, 0 ] }]); |
+ }, property + ': rotate on translate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ // matrix(0, 1, -1, 0, 0, 0) |
+ target.style[idlName] = 'rotate(90deg)'; |
+ var animation = // matrix(1, 0, 0, 1, 100, 0) |
+ target.animate({ [idlName]: ['translateX(100px)', |
+ // matrix(1, 0, 0, 1, 200, 0) |
+ 'translateX(200px)'] }, |
+ { duration: 1000, fill: 'both', composite: 'add' }); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 0, expected: [ 0, 1, -1, 0, 0, 100 ] }, |
+ { time: 1000, expected: [ 0, 1, -1, 0, 0, 200 ] }]); |
+ }, property + ': translate on rotate'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'matrix(0, 1, -1, 0, 0, 0)'; |
+ var animation = // Same matrices as above. |
+ target.animate({ [idlName]: [ 'matrix(1, 0, 0, 1, 100, 0)', |
+ 'matrix(1, 0, 0, 1, 200, 0)' ] }, |
+ { duration: 1000, fill: 'both', composite: 'add' }); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 0, expected: [ 0, 1, -1, 0, 0, 100 ] }, |
+ { time: 1000, expected: [ 0, 1, -1, 0, 0, 200 ] }]); |
+ }, property + ': matrix'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rotate3d(1, 1, 0, 45deg)'; |
+ var animation = |
+ target.animate({ [idlName]: [ 'rotate3d(1, 1, 0, -90deg)', |
+ 'rotate3d(1, 1, 0, 90deg)'] }, |
+ { duration: 1000, fill: 'both', composite: 'add' }); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 0, expected: rotate3dToMatrix(1, 1, 0, -Math.PI / 4) }, |
+ { time: 1000, expected: rotate3dToMatrix(1, 1, 0, 3 * Math.PI / 4) }]); |
+ }, property + ': rotate3d'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ // To calculate expected matrices easily, generate input matrices from |
+ // rotate3d. |
+ target.style[idlName] = rotate3dToMatrix3d(1, 1, 0, Math.PI / 4); |
+ var from = rotate3dToMatrix3d(1, 1, 0, -Math.PI / 2); |
+ var to = rotate3dToMatrix3d(1, 1, 0, Math.PI / 2); |
+ var animation = |
+ target.animate({ [idlName]: [ from, to ] }, |
+ { duration: 1000, fill: 'both', composite: 'add' }); |
+ |
+ testAnimationSampleMatrices(animation, idlName, |
+ [{ time: 0, expected: rotate3dToMatrix(1, 1, 0, -Math.PI / 4) }, |
+ { time: 1000, expected: rotate3dToMatrix(1, 1, 0, 3 * Math.PI / 4) }]); |
+ }, property + ': matrix3d'); |
+ }, |
+ |
+}; |
+ |
+const filterListType = { |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'blur(10px)'; |
+ var animation = target.animate({ [idlName]: ['blur(20px)', |
+ 'blur(50px)'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [ { time: 0, expected: 'blur(10px) blur(20px)' }]); |
+ }, property + ': blur on blur'); |
+ |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'blur(10px)'; |
+ var animation = target.animate({ [idlName]: ['brightness(80%)', |
+ 'brightness(40%)'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [ { time: 0, expected: 'blur(10px) brightness(0.8)' }]); |
+ }, property + ': different filter functions'); |
+ }, |
+}; |
+ |
+const textShadowListType = { |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rgb(0, 0, 0) 0px 0px 0px'; |
+ var animation = |
+ target.animate({ [idlName]: [ 'rgb(120, 120, 120) 10px 10px 10px', |
+ 'rgb(120, 120, 120) 10px 10px 10px'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [ { time: 0, expected: 'rgb(0, 0, 0) 0px 0px 0px, ' + |
+ 'rgb(120, 120, 120) 10px 10px 10px' }]); |
+ }, property + ': shadow'); |
+ }, |
+}; |
+ |
+ |
+const boxShadowListType = { |
+ testAddition: function(property, setup) { |
+ test(function(t) { |
+ var idlName = propertyToIDL(property); |
+ var target = createTestElement(t, setup); |
+ target.style[idlName] = 'rgb(0, 0, 0) 0px 0px 0px 0px'; |
+ var animation = |
+ target.animate({ [idlName]: [ 'rgb(120, 120, 120) 10px 10px 10px 0px', |
+ 'rgb(120, 120, 120) 10px 10px 10px 0px'] }, |
+ { duration: 1000, composite: 'add' }); |
+ testAnimationSamples(animation, idlName, |
+ [ { time: 0, expected: 'rgb(0, 0, 0) 0px 0px 0px 0px, ' + |
+ 'rgb(120, 120, 120) 10px 10px 10px 0px' }]); |
+ }, property + ': shadow'); |
+ }, |
+}; |
+ |
+const types = { |
+ color: colorType, |
+ discrete: discreteType, |
+ filterList: filterListType, |
+ integer: integerType, |
+ length: lengthType, |
+ percentage: percentageType, |
+ lengthPercentageOrCalc: lengthPercentageOrCalcType, |
+ positiveNumber: positiveNumberType, |
+ transformList: transformListType, |
+ visibility: visibilityType, |
+ boxShadowList: boxShadowListType, |
+ textShadowList: textShadowListType, |
+}; |
+ |