<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>CSS Transitions Test: transitionend event with non matching lists</title>
<meta name="assert" content="Test checks that non-matching lists are properly resolved">
<link rel="help" title="2. Transitions - Example 3" href="http://www.w3.org/TR/css3-transitions/#list-matching">
<link rel="help" title="5. Transition Events" href="http://www.w3.org/TR/css3-transitions/#transition-events">
<link rel="author" title="Rodney Rehm" href="http://rodneyrehm.de/en/">

<script src="/resources/testharness.js" type="text/javascript"></script>
<script src="/resources/testharnessreport.js" type="text/javascript"></script>
<script src="./support/helper.js" type="text/javascript"></script>

</head>
<body>

<div id="log"></div>

<script>
promise_test(t => {
  const div = addDiv(t, { style: 'padding: 1px' });
  getComputedStyle(div).paddingLeft;

  div.style.transitionProperty =
    'padding-top, padding-right, padding-bottom, padding-left';
  div.style.transitionDuration = '0.02s, 0.01s';
  div.style.transitionTimingFunction = 'linear, ease-in';
  div.style.transitionDelay = '0.01s, 0.02s';
  div.style.padding = '10px';

  const watcher = new EventWatcher(t, div, ['transitionend']);
  return watcher
    .wait_for(Array(4).fill('transitionend'), { record: 'all' })
    .then(evts => {
      assert_end_event_batch_equal(
        evts,
        [ 'padding-top', 'padding-right', 'padding-bottom', 'padding-left' ],
        [ 0.02, 0.01, 0.02, 0.01 ]
      );
    });
}, 'repeating lists');

promise_test(t => {
  const div = addDiv(t, { style: 'padding: 1px' });
  getComputedStyle(div).paddingLeft;

  div.style.transitionProperty = 'padding-top';
  div.style.transitionDuration = '0.02s, 0.01s';
  div.style.transitionTimingFunction = 'linear, ease-in';
  div.style.transitionDelay = '0.01s, 0.02s';
  div.style.padding = '10px';

  const watcher = new EventWatcher(t, div, [ 'transitionend' ]);
  return watcher.wait_for('transitionend').then(evt => {
    assert_end_events_equal(evt, 'padding-top', 0.02);
  });
}, 'truncating lists');
</script>
</body>
</html>
