| Index: third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/animation-types/spacing-keyframes-shapes.html
 | 
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/animation-types/spacing-keyframes-shapes.html b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/animation-types/spacing-keyframes-shapes.html
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..9f7cfaea1e42df633c26620fe44aa7f7d62ab59e
 | 
| --- /dev/null
 | 
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/web-animations/animation-model/animation-types/spacing-keyframes-shapes.html
 | 
| @@ -0,0 +1,152 @@
 | 
| +<!DOCTYPE html>
 | 
| +<meta charset=utf-8>
 | 
| +<title>Keyframe spacing tests on shapes</title>
 | 
| +<link rel="help" href="https://w3c.github.io/web-animations/#spacing-keyframes">
 | 
| +<script src="/resources/testharness.js"></script>
 | 
| +<script src="/resources/testharnessreport.js"></script>
 | 
| +<script src="../../testcommon.js"></script>
 | 
| +<body>
 | 
| +<div id="log"></div>
 | 
| +<script>
 | 
| +"use strict";
 | 
| +
 | 
| +// Help function for testing the computed offsets by the distance array.
 | 
| +function assert_animation_offsets(anim, dist) {
 | 
| +  const frames = anim.effect.getKeyframes();
 | 
| +  const cumDist = dist.reduce( (prev, curr) => {
 | 
| +    prev.push(prev.length == 0 ? curr : curr + prev[prev.length - 1]);
 | 
| +    return prev;
 | 
| +  }, []);
 | 
| +
 | 
| +  const total = cumDist[cumDist.length - 1];
 | 
| +  for (var i = 0; i < frames.length; ++i) {
 | 
| +    assert_equals(frames[i].computedOffset, cumDist[i] / total,
 | 
| +                  'computedOffset of frame ' + i);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +test(function(t) {
 | 
| +  var anim =
 | 
| +    createDiv(t).animate([ { clipPath: 'circle(20px)' },
 | 
| +                           { clipPath: 'ellipse(10px 20px)' },
 | 
| +                           { clipPath: 'polygon(50px 0px, 100px 50px, ' +
 | 
| +                                       '        50px 100px, 0px 50px)' },
 | 
| +                           { clipPath: 'inset(20px round 10px)' } ],
 | 
| +                         { spacing: 'paced(clip-path)' });
 | 
| +
 | 
| +  const frames = anim.effect.getKeyframes();
 | 
| +  const slots = frames.length - 1;
 | 
| +  for (var i = 0; i < frames.length; ++i) {
 | 
| +    assert_equals(frames[i].computedOffset, i / slots,
 | 
| +                  'computedOffset of frame ' + i);
 | 
| +  }
 | 
| +}, 'Test falling back to distribute spacing when using different basic shapes');
 | 
| +
 | 
| +test(function(t) {
 | 
| +  var anim =
 | 
| +    createDiv(t).animate([ { clipPath: 'circle(10px)' },
 | 
| +                           { clipPath: 'circle(20px) content-box' },
 | 
| +                           { clipPath: 'circle(70px)' },
 | 
| +                           { clipPath: 'circle(10px) padding-box' } ],
 | 
| +                         { spacing: 'paced(clip-path)' });
 | 
| +
 | 
| +  const frames = anim.effect.getKeyframes();
 | 
| +  const slots = frames.length - 1;
 | 
| +  for (var i = 0; i < frames.length; ++i) {
 | 
| +    assert_equals(frames[i].computedOffset, i / slots,
 | 
| +                  'computedOffset of frame ' + i);
 | 
| +  }
 | 
| +}, 'Test falling back to distribute spacing when using different ' +
 | 
| +   'reference boxes');
 | 
| +
 | 
| +test(function(t) {
 | 
| +  // 1st: circle(calc(20px) at  calc(20px + 0%)  calc(10px + 0%))
 | 
| +  // 2nd: circle(calc(50px) at  calc(10px + 0%)  calc(10px + 0%))
 | 
| +  // 3rd: circle(70px at  calc(10px + 0%)  calc(50px + 0%))
 | 
| +  // 4th: circle(10px at  calc(50px + 0%)  calc(30px + 0%))
 | 
| +  var anim =
 | 
| +    createDiv(t).animate([ { clipPath: 'circle(calc(10px + 10px) ' +
 | 
| +                                       '       at 20px 10px)' },
 | 
| +                           { clipPath: 'circle(calc(20px + 30px) ' +
 | 
| +                                       '       at 10px 10px)' },
 | 
| +                           { clipPath: 'circle(70px at 10px 50px)' },
 | 
| +                           { clipPath: 'circle(10px at 50px 30px)' } ],
 | 
| +                         { spacing: 'paced(clip-path)' });
 | 
| +
 | 
| +  var dist = [ 0,
 | 
| +               Math.sqrt(30 * 30 + 10 * 10),
 | 
| +               Math.sqrt(20 * 20 + 40 * 40),
 | 
| +               Math.sqrt(60 * 60 + 40 * 40 + 20 * 20) ];
 | 
| +  assert_animation_offsets(anim, dist);
 | 
| +}, 'Test spacing on circle' );
 | 
| +
 | 
| +test(function(t) {
 | 
| +  // 1st: ellipse(20px calc(20px) at  calc(0px + 50%)  calc(0px + 50%))
 | 
| +  // 2nd: ellipse(20px calc(50px) at  calc(0px + 50%)  calc(0px + 50%))
 | 
| +  // 3rd: ellipse(30px 70px at  calc(0px + 50%)  calc(0px + 50%))
 | 
| +  // 4th: ellipse(30px 10px at  calc(0px + 50%)  calc(0px + 50%))
 | 
| +  var anim =
 | 
| +    createDiv(t).animate([ { clipPath: 'ellipse(20px calc(10px + 10px))' },
 | 
| +                           { clipPath: 'ellipse(20px calc(20px + 30px))' },
 | 
| +                           { clipPath: 'ellipse(30px 70px)' },
 | 
| +                           { clipPath: 'ellipse(30px 10px)' } ],
 | 
| +                         { spacing: 'paced(clip-path)' });
 | 
| +
 | 
| +  var dist = [ 0,
 | 
| +               Math.sqrt(30 * 30),
 | 
| +               Math.sqrt(10 * 10 + 20 * 20),
 | 
| +               Math.sqrt(60 * 60) ];
 | 
| +  assert_animation_offsets(anim, dist);
 | 
| +}, 'Test spacing on ellipse' );
 | 
| +
 | 
| +test(function(t) {
 | 
| +  // 1st: polygon(nonzero, 50px 0px, 100px 50px, 50px 100px, 0px 50px)
 | 
| +  // 2nd: polygon(nonzero, 40px 0px, 100px 70px, 10px 100px, 0px 70px)
 | 
| +  // 3rd: polygon(nonzero, 100px 0px, 100px 100px, 10px 80px, 0px 50px)
 | 
| +  // 4th: polygon(nonzero, 100px 100px, -10px 100px, 20px 80px, 20px 50px)
 | 
| +  var anim =
 | 
| +    createDiv(t).animate([ { clipPath: 'polygon(50px 0px, 100px 50px, ' +
 | 
| +                                       '        50px 100px, 0px 50px)' },
 | 
| +                           { clipPath: 'polygon(40px 0px, 100px 70px, ' +
 | 
| +                                       '        10px 100px, 0px 70px)' },
 | 
| +                           { clipPath: 'polygon(100px 0px, 100px 100px, ' +
 | 
| +                                       '        10px 80px, 0px 50px)' },
 | 
| +                           { clipPath: 'polygon(100px 100px, -10px 100px, ' +
 | 
| +                                       '        20px 80px, 20px 50px)' } ],
 | 
| +                         { spacing: 'paced(clip-path)' });
 | 
| +
 | 
| +  var dist = [ 0,
 | 
| +               Math.sqrt(10 * 10 + 20 * 20 + 40 * 40 + 20 * 20),
 | 
| +               Math.sqrt(60 * 60 + 30 * 30 + 20 * 20 + 20 * 20),
 | 
| +               Math.sqrt(100 * 100 + 110 * 110 + 10 * 10 + 20 * 20) ];
 | 
| +  assert_animation_offsets(anim, dist);
 | 
| +}, 'Test spacing on polygon' );
 | 
| +
 | 
| +test(function(t) {
 | 
| +  // Note: Rounding corners are 4 CSS pair values and
 | 
| +  //       each pair has x & y components.
 | 
| +  // 1st: inset(5px 5px 5px 5px round 40px 30px 20px 5px / 40px 30px 20px 5px)
 | 
| +  // 2nd: inset(10px 5px 10px 5px round 50px 60px / 50px 60px)
 | 
| +  // 3rd: inset(40px 40px 40px 40px round 10px / 10px)
 | 
| +  // 4th: inset(30px 40px 30px 40px round 20px / 20px)
 | 
| +  var anim =
 | 
| +    createDiv(t).animate([ { clipPath: 'inset(5px 5px 5px 5px ' +
 | 
| +                                       '      round 40px 30px 20px 5px)' },
 | 
| +                           { clipPath: 'inset(10px 5px round 50px 60px)' },
 | 
| +                           { clipPath: 'inset(40px 40px round 10px)' },
 | 
| +                           { clipPath: 'inset(30px 40px round 20px)' } ],
 | 
| +                         { spacing: 'paced(clip-path)' });
 | 
| +
 | 
| +  var dist = [ 0,
 | 
| +               Math.sqrt(5 * 5 * 2 + (50 - 40) * (50 - 40) * 2 +
 | 
| +                                     (60 - 30) * (60 - 30) * 2 +
 | 
| +                                     (50 - 20) * (50 - 20) * 2 +
 | 
| +                                     (60 - 5) * (60 - 5) * 2),
 | 
| +               Math.sqrt(30 * 30 * 2 + 35 * 35 * 2 + (50 - 10) * (50 - 10) * 4 +
 | 
| +                                                     (60 - 10) * (60 - 10) * 4),
 | 
| +               Math.sqrt(10 * 10 * 2 + (20 - 10) * (20 - 10) * 8) ];
 | 
| +  assert_animation_offsets(anim, dist);
 | 
| +}, 'Test spacing on inset' );
 | 
| +
 | 
| +</script>
 | 
| +</body>
 | 
| 
 |