Index: third_party/WebKit/LayoutTests/animations/svg-attribute-interpolation/resources/interpolation-test.js |
diff --git a/third_party/WebKit/LayoutTests/animations/svg-attribute-interpolation/resources/interpolation-test.js b/third_party/WebKit/LayoutTests/animations/svg-attribute-interpolation/resources/interpolation-test.js |
index 6e24685ba098206b429ab55e75d6bf01141b577d..923c587954a94ca9570070d7dc211dd7d2ddf1ba 100644 |
--- a/third_party/WebKit/LayoutTests/animations/svg-attribute-interpolation/resources/interpolation-test.js |
+++ b/third_party/WebKit/LayoutTests/animations/svg-attribute-interpolation/resources/interpolation-test.js |
@@ -3,22 +3,26 @@ |
* found in the LICENSE file. |
* |
* Exported function: |
- * - assertAttributeInterpolation({property, [from], [to], [fromComposite], [toComposite], [underlying]}, [{at: fraction, is: value}]) |
+ * - assertAttributeInterpolation({property, from, to, [fromComposite], [toComposite], [underlying]}, [{at: fraction, is: value}]) |
* Constructs a test case for each fraction that asserts the expected value |
* equals the value produced by interpolation between from and to composited |
* onto underlying by fromComposite and toComposite respectively using |
* SMIL and Web Animations. |
- * If from or to are missing then a neutral keyframe will be used and the |
- * composite mode will be forced to be 'add'. |
+ * Set from/to to the exported neutralKeyframe object to specify neutral keyframes. |
* SMIL will only be tested with equal fromComposite and toComposite values. |
*/ |
'use strict'; |
(() => { |
var interpolationTests = []; |
+ var neutralKeyframe = {}; |
// Set to true to output rebaselined test expectations. |
var rebaselineTests = false; |
+ function isNeutralKeyframe(keyframe) { |
+ return keyframe === neutralKeyframe; |
+ } |
+ |
function createElement(tagName, container) { |
var element = document.createElement(tagName); |
if (container) { |
@@ -320,23 +324,19 @@ |
// Replace 'transform' with 'svgTransform', etc. This avoids collisions with CSS properties or the Web Animations API (offset). |
var prefixedProperty = 'svg' + params.property[0].toUpperCase() + params.property.slice(1); |
var keyframes = []; |
- if ('from' in params) { |
+ if (!isNeutralKeyframe(params.from)) { |
keyframes.push({ |
offset: 0, |
[prefixedProperty]: params.from, |
composite: params.fromComposite, |
}); |
- } else { |
- console.assert(params.fromComposite === 'add'); |
} |
- if ('to' in params) { |
+ if (!isNeutralKeyframe(params.to)) { |
keyframes.push({ |
offset: 1, |
[prefixedProperty]: params.to, |
composite: params.toComposite, |
}); |
- } else { |
- console.assert(params.toComposite === 'add'); |
} |
target.animate(keyframes, { |
fill: 'forwards', |
@@ -372,29 +372,44 @@ |
var targets = []; |
for (var interpolationTest of interpolationTests) { |
var params = interpolationTest.params; |
- params.fromComposite = 'from' in params ? (params.fromComposite || 'replace') : 'add'; |
- params.toComposite = 'to' in params ? (params.toComposite || 'replace') : 'add'; |
+ assert_true('property' in params); |
+ assert_true('from' in params); |
+ assert_true('to' in params); |
+ params.fromComposite = isNeutralKeyframe(params.from) ? 'add' : (params.fromComposite || 'replace'); |
+ params.toComposite = isNeutralKeyframe(params.to) ? 'add' : (params.toComposite || 'replace'); |
var underlyingText = params.underlying ? `with underlying [${params.underlying}] ` : ''; |
- var fromText = 'from' in params ? `${params.fromComposite} [${params.from}]` : 'neutral'; |
- var toText = 'to' in params ? `${params.toComposite} [${params.to}]` : 'neutral'; |
+ var fromText = isNeutralKeyframe(params.from) ? 'neutral' : `${params.fromComposite} [${params.from}]`; |
+ var toText = isNeutralKeyframe(params.to) ? 'neutral' : `${params.toComposite} [${params.to}]`; |
var description = `Interpolate attribute <${params.property}> ${underlyingText}from ${fromText} to ${toText}`; |
if (rebaselineTests) { |
var rebaseline = createElement('pre', rebaselineContainer); |
- var fromCode = 'from' in params ? ` |
- from: '${params.from}', |
- fromComposite: '${params.fromComposite}',` : ''; |
+ var assertionCode = |
+ `assertAttributeInterpolation({\n` + |
+ ` property: '${params.property}',\n` + |
+ ` underlying: '${params.underlying}',\n`; |
+ |
+ |
+ if (isNeutralKeyframe(params.from)) { |
+ assertionCode += ` from: neutralKeyframe,\n`; |
+ } else { |
+ assertionCode += |
+ ` from: '${params.from}',\n` + |
+ ` fromComposite: '${params.fromComposite}',\n`; |
+ } |
+ |
+ if (isNeutralKeyframe(params.to)) { |
+ assertionCode += ` to: neutralKeyframe,\n`; |
+ } else { |
+ assertionCode += |
+ ` to: '${params.to}',\n` + |
+ ` fromComposite: '${params.fromComposite}',\n`; |
+ } |
- var toCode = 'to' in params ? ` |
- to: '${params.to}', |
- toComposite: '${params.toComposite}',` : ''; |
+ assertionCode += `\n}, [\n`; |
- rebaseline.appendChild(document.createTextNode(`\ |
-assertAttributeInterpolation({ |
- property: '${params.property}', |
- underlying: '${params.underlying}',${fromCode}${toCode} |
-}, [\n`)); |
+ rebaseline.appendChild(document.createTextNode(assertionCode)); |
var rebaselineExpectation; |
rebaseline.appendChild(rebaselineExpectation = document.createTextNode('')); |
rebaseline.appendChild(document.createTextNode(']);\n\n')); |
@@ -461,4 +476,5 @@ assertAttributeInterpolation({ |
}); |
window.assertAttributeInterpolation = assertAttributeInterpolation; |
+ window.neutralKeyframe = neutralKeyframe; |
})(); |