<!doctype html>
<meta charset=utf-8>
<title>Animating CSS logical properties using CSS Animations - Web Animations reflection</title>
<link rel="help" href="https://drafts.csswg.org/css-logical/#box">
<meta name="assert" content="The specified values of these properties are separate from the specified values of the parallel physical properties, but the flow-relative and physical properties share computed values.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../css-animations/support/testcommon.js"></script>

<div id="log"></div>
<script>
'use strict';

/*
 * The mapping from CSS Animations to Web Animations has yet to be specified
 * but, when it is, we expect it to require that logical properties in CSS
 * keyframes be represented as physical properties in the result returned from
 * getKeyframes() since this is consistent with the behavior of expanding out
 * all shorthands in to their consituent longhands in order to resolve
 * overlapping properties.
 */

test(t => {
  addStyle(t, {
    '@keyframes anim': 'from { block-size: 0px } to { block-size: 100px }',
  });
  const div = addDiv(t, { style: 'animation: anim 10s' });
  const anim = div.getAnimations()[0];

  assert_own_property(anim.effect.getKeyframes()[0], 'height');
  assert_false(anim.effect.getKeyframes()[0].hasOwnProperty('blockSize'));

  assert_own_property(anim.effect.getKeyframes()[1], 'height');
  assert_false(anim.effect.getKeyframes()[1].hasOwnProperty('blockSize'));
}, 'Logical properties are represented as physical properties in keyframes');

</script>
