Bug 1216843 - Part 14: Reftest for iterationComposite. r?birtles
MozReview-Commit-ID: 8215VmzlJpI
new file mode 100644
--- /dev/null
+++ b/layout/reftests/web-animations/animation-utils.js
@@ -0,0 +1,13 @@
+function waitForIterationChange(animation) {
+ var initialIteration = animation.effect.getComputedTiming().currentIteration;
+ return new Promise(resolve => {
+ window.requestAnimationFrame(handleFrame = () => {
+ if (animation.effect.getComputedTiming().currentIteration !=
+ initialIteration) {
+ resolve();
+ } else {
+ window.requestAnimationFrame(handleFrame);
+ }
+ });
+ });
+}
--- a/layout/reftests/web-animations/reftest.list
+++ b/layout/reftests/web-animations/reftest.list
@@ -4,8 +4,10 @@ test-pref(dom.animations-api.core.enable
test-pref(dom.animations-api.core.enabled,true) == stacking-context-transform-none-animation-before-appending-element.html stacking-context-animation-ref.html
test-pref(dom.animations-api.core.enabled,true) == stacking-context-opacity-changing-keyframe.html stacking-context-animation-ref.html
test-pref(dom.animations-api.core.enabled,true) == stacking-context-opacity-changing-target.html stacking-context-animation-changing-target-ref.html
test-pref(dom.animations-api.core.enabled,true) == stacking-context-opacity-changing-effect.html stacking-context-animation-ref.html
test-pref(dom.animations-api.core.enabled,true) == stacking-context-transform-changing-keyframe.html stacking-context-animation-ref.html
test-pref(dom.animations-api.core.enabled,true) == stacking-context-transform-changing-target.html stacking-context-animation-changing-target-ref.html
test-pref(dom.animations-api.core.enabled,true) == stacking-context-transform-changing-effect.html stacking-context-animation-ref.html
test-pref(dom.animations-api.core.enabled,true) == stacking-context-transform-changing-display-property.html stacking-context-animation-ref.html
+test-pref(dom.animations-api.core.enabled,true) == style-updates-on-iteration-composition-changed-from-accumulate-to-replace.html style-updates-for-iteration-composite-ref.html
+test-pref(dom.animations-api.core.enabled,true) == style-updates-on-iteration-composition-changed-from-replace-to-accumulate.html style-updates-for-iteration-composite-ref.html
new file mode 100644
--- /dev/null
+++ b/layout/reftests/web-animations/style-updates-for-iteration-composite-ref.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<title>Reference of testcases for bug 1216843</title>
+<style>
+#test {
+ width: 100px; height: 100px;
+ margin-left: 200px;
+ background: blue;
+}
+</style>
+<div id="test"></div>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/web-animations/style-updates-on-iteration-composition-changed-from-accumulate-to-replace.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Update styles when iteration composition changed from accumulate to
+replace</title>
+<script src="animation-utils.js"></script>
+<style>
+#test {
+ width: 100px; height: 100px;
+ background: blue;
+}
+</style>
+<div id="test"></div>
+<script>
+ var anim = document.getElementById("test")
+ .animate({ marginLeft: [ "0px", "200px" ] },
+ { duration: 100000,
+ delay: -99999, // For starting right before second iteration.
+ easing: "steps(1, start)",
+ iterations: 2,
+ iterationComposite: "accumulate" });
+
+ waitForIterationChange(anim).then(() => {
+ // Changing iterationComposite updates the element style.
+ anim.effect.iterationComposite = "replace";
+ requestAnimationFrame(() => {
+ // Now margin-left of the element should be 200px.
+ document.documentElement.classList.remove("reftest-wait");
+ });
+ });
+</script>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/web-animations/style-updates-on-iteration-composition-changed-from-replace-to-accumulate.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Update styles when iteration composition changed from replace to
+accumulate</title>
+<script src="animation-utils.js"></script>
+<style>
+#test {
+ width: 100px; height: 100px;
+ background: blue;
+}
+</style>
+<div id="test"></div>
+<script>
+ var anim = document.getElementById("test")
+ .animate({ marginLeft: [ "0px", "100px" ] },
+ { duration: 100000,
+ delay: -99999, // For starting right before second iteration.
+ easing: "steps(1, start)",
+ iterations: 2,
+ iterationComposite: "replace" });
+
+ waitForIterationChange(anim).then(() => {
+ // Changing iterationComposite updates the element style.
+ anim.effect.iterationComposite = "accumulate";
+ requestAnimationFrame(() => {
+ // Now margin-left of the element should be 200px.
+ document.documentElement.classList.remove("reftest-wait");
+ });
+ });
+</script>