blob: 4ad12dead73a1324ea80de1fbc08563a3ecfa73b [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<style>
@keyframes top-keyframes {
0% { background: red; }
100% { background: green; }
}
@keyframes shadow-keyframes {
0% { background: green; }
100% { background: red; }
}
@keyframes slotted-keyframes {
0% { background: green; }
100% { background: red; }
}
@keyframes deep-slotted-keyframes {
0% { background: green; }
100% { background: red; }
}
.test {
width: 100px;
height: 25px;
background: red;
color: green;
}
#host1.green {
animation-duration: 0.1s;
animation-iteration-count: 1;
animation-name: top-keyframes;
animation-fill-mode: forwards;
}
</style>
</head>
<body>
<p>Test passes if you see a single 100px by 100px green box below.</p>
<div id="host1" class="test"><div>text</div></div>
<div id="host2" class="test"><div>text</div></div>
<div id="host3" class="test"><div>text</div></div>
<div id="host4" class="test"><div>text</div></div>
<script>
if (window.testRunner)
testRunner.waitUntilDone();
let expectedEventCount = 0;
let eventCount = 0;
function animationEndEvent()
{
++eventCount;
if (eventCount == expectedEventCount) {
if (window.testRunner)
testRunner.notifyDone();
}
}
{
const host = document.getElementById('host1');
host.attachShadow({mode: 'closed'}).innerHTML = `
<slot></slot>
`;
getComputedStyle(host.firstChild).backgroundColor;
++expectedEventCount;
document.addEventListener('animationend', animationEndEvent);
host.classList.toggle('green');
}
{
const host = document.getElementById('host2');
host.attachShadow({mode: 'closed'}).innerHTML = `
<style>
@keyframes shadow-keyframes {
0% { background: red; }
100% { background: green; }
}
:host(.green) {
animation-duration: 0.1s;
animation-iteration-count: 1;
animation-name: shadow-keyframes;
animation-fill-mode: forwards;
}
</style>
<slot></slot>
`;
getComputedStyle(host.firstChild).backgroundColor;
++expectedEventCount;
document.addEventListener('animationend', animationEndEvent);
host.classList.toggle('green');
}
{
const host = document.getElementById('host3');
const shadow = host.attachShadow({mode: 'closed'});
shadow.innerHTML = `
<style>
@keyframes slotted-keyframes {
0% { background: red; }
100% { background: green; }
}
::slotted(.green) {
animation-duration: 0.1s;
animation-iteration-count: 1;
animation-name: slotted-keyframes;
animation-fill-mode: forwards;
height: 100%;
}
div { height: 100%; }
</style>
<div><slot></slot></div>
`;
shadow.querySelector('div').attachShadow({mode: 'closed'}).innerHTML = `
<style>
@keyframes slotted-keyframes {
0% { background: green; }
100% { background: red; }
}
</style>
<slot></slot>
`;
getComputedStyle(host.firstChild).backgroundColor;
++expectedEventCount;
document.addEventListener('animationend', animationEndEvent);
host.firstChild.classList.toggle('green');
}
{
const host = document.getElementById('host4');
const shadow = host.attachShadow({mode: 'closed'});
shadow.innerHTML = `
<style>
@keyframes deep-slotted-keyframes {
0% { background: green; }
100% { background: red; }
}
div { height: 100%; }
</style>
<div><slot></slot></div>
`;
shadow.querySelector('div').attachShadow({mode: 'closed'}).innerHTML = `
<style>
@keyframes deep-slotted-keyframes {
0% { background: red; }
100% { background: green; }
}
::slotted(.green) {
animation-duration: 0.1s;
animation-iteration-count: 1;
animation-name: deep-slotted-keyframes;
animation-fill-mode: forwards;
height: 100%;
}
</style>
<slot></slot>
`;
getComputedStyle(host.firstChild).backgroundColor;
++expectedEventCount;
document.addEventListener('animationend', animationEndEvent);
host.firstChild.classList.toggle('green');
}
</script>
</body>
</html>