Files
sousa-gecko/testing/web-platform/tests/web-animations/responsive/shapeOutside.html
T
Jason Leo 86a22a9ae2 Bug 2038284 [wpt PR 59753] - Interpolate shape-outside when the <shape-box> matches, a=testonly
Automatic update from web-platform-tests
Interpolate shape-outside when the <shape-box> matches

Allow shape-outside path()/shape() values to interpolate when both
sides carry the same explicit <shape-box>; mismatched boxes still
fall back to discrete. An absent <shape-box> is treated as the spec
default margin-box.

Bug: 502328208
Change-Id: Ifd2a312a0ecb4affe28f29e418703a994488d8d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7818874
Reviewed-by: Fredrik Söderquist <fs@opera.com>
Commit-Queue: Jason Leo <cgqaq@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1627778}

--

wpt-commits: 769e5a3f01bdb233898403e223c2271ee3c1864d
wpt-pr: 59753
2026-05-13 04:22:19 +00:00

86 lines
2.9 KiB
HTML

<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id='container'>
<div id='element'></div>
</div>
<script>
var container = document.getElementById('container');
var element = document.getElementById('element');
test(function() {
container.style.fontSize = '10px';
var keyframes = [
{shapeOutside: 'circle(10em at 50% 50%)'},
{shapeOutside: 'circle(10em at 50% 50%)'}
];
var player = element.animate(keyframes, 10);
player.pause();
player.currentTime = 5;
var shapeOutside = getComputedStyle(element).shapeOutside;
container.style.fontSize = '20px';
assert_not_equals(getComputedStyle(element).shapeOutside, shapeOutside);
}, 'shapeOutside responsive to style changes');
test(function() {
var keyframes = [
{shapeOutside: 'inherit'},
{shapeOutside: 'circle(200px at 50% 50%)'}
];
container.style.shapeOutside = 'circle(100px at 50% 50%)';
var player = element.animate(keyframes, 10);
player.pause();
player.currentTime = 5;
assert_equals(getComputedStyle(element).shapeOutside, 'circle(150px at 50% 50%)');
container.style.shapeOutside = 'inset(100%)';
assert_equals(getComputedStyle(element).shapeOutside, 'circle(200px at 50% 50%)');
container.style.shapeOutside = 'circle(400px at 50% 50%)';
assert_equals(getComputedStyle(element).shapeOutside, 'circle(300px at 50% 50%)');
container.style.shapeOutside = 'circle(800px at 50% 50%)';
assert_equals(getComputedStyle(element).shapeOutside, 'circle(500px at 50% 50%)');
container.style.shapeOutside = 'inset(100%)';
assert_equals(getComputedStyle(element).shapeOutside, 'circle(200px at 50% 50%)');
container.style.shapeOutside = 'circle(800px at 50% 50%)';
assert_equals(getComputedStyle(element).shapeOutside, 'circle(500px at 50% 50%)');
container.style.shapeOutside = 'circle(400px at 50% 50%)';
assert_equals(getComputedStyle(element).shapeOutside, 'circle(300px at 50% 50%)');
}, 'shapeOutside responsive to inherited shapeOutside changes');
test(() => {
const target = document.createElement('div');
document.body.appendChild(target);
target.style.shapeOutside = 'path("M 10 10 L 20 20 Z") border-box';
const animation = target.animate([
{},
{shapeOutside: 'path("M 50 50 L 60 60 Z") border-box'},
], {
duration: 1000,
fill: 'both',
});
animation.pause();
animation.currentTime = 500;
assert_equals(getComputedStyle(target).shapeOutside,
'path("M 30 30 L 40 40 Z") border-box');
target.style.shapeOutside = 'path("M 10 10 L 20 20 Z") padding-box';
assert_equals(getComputedStyle(target).shapeOutside,
'path("M 50 50 L 60 60 Z") border-box');
animation.cancel();
target.remove();
}, 'Neutral path() keyframes invalidate when the underlying <shape-box> changes');
</script>