diff --git a/web-animations/animation-model/keyframe-effects/background-shorthand.html b/web-animations/animation-model/keyframe-effects/background-shorthand.html new file mode 100644 index 00000000000000..f186643331f6f0 --- /dev/null +++ b/web-animations/animation-model/keyframe-effects/background-shorthand.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8"> +<title>CSS Animations: Expansion of shorthand properties</title> +<link rel="help" href="https://www.w3.org/TR/web-animations-1/#calculating-computed-keyframes"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> + #block { + background: green; + background-position-x: 10px; + height: 100px; + width: 100px; + } +</style> +<body> + <div id="block"></div> +</body> +<script> + function assert_background_position_at(time, x, y) { + document.getAnimations()[0].currentTime = time; + const target = document.getElementById('block'); + const style = getComputedStyle(target); + assert_equals(style.backgroundPositionX, x, + `background-position-x @${time/10}% progress`); + assert_equals(style.backgroundPositionY, y, + `background-position-y @${time/10}% progress`); + } + + test(() => { + const target = document.getElementById('block'); + target.animate([ + { background: 'red' }, + { backgroundPositionY: '10px', background: 'blue' } + ], { duration: 1000 }); + // Animation is active in the semi-closed interval [0, 1000). + // The background shorthand expands to its longhand counterparts with + // background-position-(x|y) picking up the default value of 0%. + // The explicit background-property-y in the second keyframe takes priority + // over the value from expansion of the shorthand. + const test_cases = [ + { time: -100, x: "10px", y: "0%" }, + { time: 0, x: "0%", y: "0%" }, + { time: 200, x: "0%", y: "calc(0% + 2px)" }, + { time: 500, x: "0%", y: "calc(0% + 5px)" }, + { time: 800, x: "0%", y: "calc(0% + 8px)" }, + { time: 1100, x: "10px", y: "0%" } + ]; + test_cases.forEach(test => { + assert_background_position_at(test.time, test.x, test.y); + }); + }, 'Shorthand properties expand to longhand counterparts in computed ' + + 'keyframes.'); +</script>