summaryrefslogtreecommitdiffstats
path: root/dom/animation/test/css-transitions/file_keyframeeffect-getkeyframes.html
blob: 7bbf76fa7a6f6e2caed528d6eec95421218a51f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<!doctype html>
<meta charset=utf-8>
<script src="../testcommon.js"></script>
<style>
:root {
  --var-100px: 100px;
}
</style>
<body>
<script>
'use strict';

function getKeyframes(e) {
  return e.getAnimations()[0].effect.getKeyframes();
}

function assert_frames_equal(a, b, name) {
  assert_equals(Object.keys(a).sort().toString(),
                Object.keys(b).sort().toString(),
                "properties on " + name);
  for (var p in a) {
    assert_equals(a[p], b[p], "value for '" + p + "' on " + name);
  }
}

test(function(t) {
  var div = addDiv(t);

  div.style.left = '0px';
  window.getComputedStyle(div).transitionProperty;
  div.style.transition = 'left 100s';
  div.style.left = '100px';

  var frames = getKeyframes(div);

  assert_equals(frames.length, 2, "number of frames");

  var expected = [
    { offset: 0, computedOffset: 0, easing: "ease", left: "0px" },
    { offset: 1, computedOffset: 1, easing: "linear", left: "100px" },
  ];

  for (var i = 0; i < frames.length; i++) {
    assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i);
  }
}, 'KeyframeEffectReadOnly.getKeyframes() returns expected frames for a simple'
   + ' transition');

test(function(t) {
  var div = addDiv(t);

  div.style.left = '0px';
  window.getComputedStyle(div).transitionProperty;
  div.style.transition = 'left 100s steps(2,end)';
  div.style.left = '100px';

  var frames = getKeyframes(div);

  assert_equals(frames.length, 2, "number of frames");

  var expected = [
    { offset: 0, computedOffset: 0, easing: "steps(2)", left: "0px" },
    { offset: 1, computedOffset: 1, easing: "linear", left: "100px" },
  ];

  for (var i = 0; i < frames.length; i++) {
    assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i);
  }
}, 'KeyframeEffectReadOnly.getKeyframes() returns expected frames for a simple'
   + ' transition with a non-default easing function');

test(function(t) {
  var div = addDiv(t);
  div.style.left = '0px';
  window.getComputedStyle(div).transitionProperty;
  div.style.transition = 'left 100s';
  div.style.left = 'var(--var-100px)';

  var frames = getKeyframes(div);

  // CSS transition endpoints are based on the computed value so we
  // shouldn't see the variable reference
  var expected = [
    { offset: 0, computedOffset: 0, easing: 'ease', left: '0px' },
    { offset: 1, computedOffset: 1, easing: 'linear', left: '100px' },
  ];
  for (var i = 0; i < frames.length; i++) {
    assert_frames_equal(frames[i], expected[i], "ComputedKeyframe #" + i);
  }
}, 'KeyframeEffectReadOnly.getKeyframes() returns expected frames for a'
   + ' transition with a CSS variable endpoint');

done();
</script>
</body>