summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/web-animations/resources/keyframe-utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/web-animations/resources/keyframe-utils.js')
-rw-r--r--testing/web-platform/tests/web-animations/resources/keyframe-utils.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/testing/web-platform/tests/web-animations/resources/keyframe-utils.js b/testing/web-platform/tests/web-animations/resources/keyframe-utils.js
new file mode 100644
index 0000000000..60fb9781a0
--- /dev/null
+++ b/testing/web-platform/tests/web-animations/resources/keyframe-utils.js
@@ -0,0 +1,51 @@
+'use strict';
+
+// =======================================
+//
+// Utility functions for testing keyframes
+//
+// =======================================
+
+
+// ------------------------------
+// Helper functions
+// ------------------------------
+
+/**
+ * Test equality between two lists of computed keyframes
+ * @param {Array.<ComputedKeyframe>} a - actual computed keyframes
+ * @param {Array.<ComputedKeyframe>} b - expected computed keyframes
+ */
+function assert_frame_lists_equal(a, b, message) {
+ assert_equals(a.length, b.length, `number of frames: ${(message || '')}`);
+ for (let i = 0; i < Math.min(a.length, b.length); i++) {
+ assert_frames_equal(a[i], b[i],
+ `ComputedKeyframe #${i}: ${(message || '')}`);
+ }
+}
+
+/** Helper for assert_frame_lists_equal */
+function assert_frames_equal(a, b, name) {
+ assert_equals(Object.keys(a).sort().toString(),
+ Object.keys(b).sort().toString(),
+ `properties on ${name} should match`);
+ // Iterates sorted keys to ensure stable failures.
+ for (const p of Object.keys(a).sort()) {
+ if (typeof b[p] == 'number')
+ assert_approx_equals(a[p], b[p], 1e-6, `value for '${p}' on ${name}`);
+ else if (typeof b[p] == 'object') {
+ for (const key in b[p]) {
+ if (typeof b[p][key] == 'number') {
+ assert_approx_equals(a[p][key], b[p][key], 1e-6,
+ `value for '${p}.${key}' on ${name}`);
+ } else {
+ assert_equals((a[p][key] || 'undefined').toString(),
+ b[p][key].toString(),
+ `value for '${p}.${key}' on ${name}`);
+ }
+ }
+ }
+ else
+ assert_equals(a[p], b[p], `value for '${p}' on ${name}`);
+ }
+}