File: Document-getAnimations.tentative.html

package info (click to toggle)
thunderbird 1%3A68.10.0-1~deb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 2,754,812 kB
  • sloc: cpp: 5,411,679; javascript: 4,161,772; ansic: 2,639,702; python: 763,064; java: 346,606; xml: 266,623; asm: 265,884; sh: 117,270; lisp: 41,340; makefile: 23,560; perl: 18,042; objc: 5,277; yacc: 1,778; ada: 1,681; pascal: 1,673; lex: 1,417; cs: 879; exp: 527; awk: 495; php: 436; ruby: 221; sed: 69; csh: 27
file content (135 lines) | stat: -rw-r--r-- 3,867 bytes parent folder | download | duplicates (2)
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<!doctype html>
<meta charset=utf-8>
<title>Document.getAnimations() for CSS transitions</title>
<link rel="help" href="https://drafts.csswg.org/css-transitions-2/#animation-composite-order">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.js"></script>
<div id="log"></div>
<script>
'use strict';

test(t => {
  assert_equals(document.getAnimations().length, 0,
    'getAnimations returns an empty sequence for a document'
    + ' with no animations');
}, 'getAnimations for non-animated content');

test(t => {
  const div = addDiv(t);

  // Add a couple of transitions
  div.style.left = '0px';
  div.style.top = '0px';
  getComputedStyle(div).transitionProperty;

  div.style.transition = 'all 100s';
  div.style.left = '100px';
  div.style.top = '100px';
  assert_equals(document.getAnimations().length, 2,
                'getAnimations returns two running CSS Transitions');

  // Remove both
  div.style.transitionProperty = 'none';
  assert_equals(document.getAnimations().length, 0,
                'getAnimations returns no running CSS Transitions');
}, 'getAnimations for CSS Transitions');

test(t => {
  // Create two divs with the following arrangement:
  //
  //       parent
  //    (::marker,)
  //     ::before,
  //     ::after
  //        |
  //       child

  addStyle(t, {
    '.init::after': 'content: ""; width: 0px; transition: all 100s;',
    '.init::before': 'content: ""; width: 0px; transition: all 100s;',
    '.change::after': 'width: 100px;',
    '.change::before': 'width: 100px;',
  });

  const supportsMarkerPseudos = CSS.supports('selector(::marker)');
  if (supportsMarkerPseudos) {
    addStyle(t, {
      '.init::marker': 'content: ""; color: red; transition: all 100s;',
      '.change::marker': 'color: green;',
    });
  }

  const parent = addDiv(t, { 'style': 'display: list-item' });
  const child = addDiv(t);
  parent.appendChild(child);

  parent.style.left = '0px';
  parent.style.transition = 'left 100s';
  parent.classList.add('init');
  child.style.left = '0px';
  child.style.transition = 'left 100s';
  getComputedStyle(parent).left;

  parent.style.left = '100px';
  parent.classList.add('change');
  child.style.left = '100px';

  const expectedTransitions = [
    [parent, undefined],
    [parent, '::marker'],
    [parent, '::before'],
    [parent, '::after'],
    [child, undefined],
  ];
  if (!supportsMarkerPseudos) {
    expectedTransitions.splice(1, 1);
  }

  const transitions = document.getAnimations();
  assert_equals(
    transitions.length,
    expectedTransitions.length,
    'CSS transition on both pseudo-elements and elements are returned'
  );

  for (const [index, expected] of expectedTransitions.entries()) {
    const [element, pseudo] = expected;
    const actual = transitions[index];

    if (pseudo) {
      assert_equals(
        actual.effect.target.element,
        element,
        `Transition #${index + 1} has expected target`
      );
      assert_equals(
        actual.effect.target.type,
        pseudo,
        `Transition #${index + 1} has expected pseudo type`
      );
    } else {
      assert_equals(
        actual.effect.target,
        element,
        `Transition #${index + 1} has expected target`
      );
    }
  }
}, 'CSS Transitions targetting (pseudo-)elements should have correct order '
   + 'after sorting');

promise_test(async t => {
  const div = addDiv(t, { style: 'left: 0px; transition: all 50ms' });
  getComputedStyle(div).left;

  div.style.left = '100px';
  const animations = div.getAnimations();
  assert_equals(animations.length, 1, 'Got transition');
  await animations[0].finished;

  assert_equals(document.getAnimations().length, 0,
                'No animations returned');
}, 'Transitions are not returned after they have finished');

</script>