blob: f0b00a9fe10613b4196cc3472fecb8637c37de69 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(
`Tests the matching performed in AnimationModel of groups composed of animations, which are applied through a variety of selectors.\n`);
await TestRunner.loadModule('elements_test_runner');
await TestRunner.loadModule('animation');
await TestRunner.showPanel('elements');
await TestRunner.loadHTML(`
<style>
div {
animation-duration: 1ms;
}
.long {
animation-duration: 2ms;
}
.expandWidth {
animation-name: expandWidthAnim;
}
.expand {
animation-name: expandWidthAnim, expandHeightAnim !important;
}
@keyframes expandWidthAnim {
from {
width: 100px;
}
to {
width: 200px;
}
}
@keyframes expandHeightAnim {
from {
height: 100px;
}
to {
height: 200px;
}
}
</style>
<div id="node1" style="background-color: red; height: 100px"></div>
<div id="node2" style="background-color: red; height: 100px"></div>
<div id="node3" style="background-color: red; height: 100px"></div>
<div id="node4" style="background-color: red; height: 100px"></div>
`);
await TestRunner.evaluateInPagePromise(`
function restartAnimation(id, name)
{
var element = document.getElementById(id);
element.classList.remove(name);
// Force style recalc.
element.offsetHeight;
element.classList.add(name);
}
function toggleClass(id, name, enabled)
{
document.getElementById(id).classList.toggle(name, enabled);
}
`);
var groupIds = [];
var i = 0;
var stepNumber = 0;
var model = TestRunner.mainTarget.model(Animation.AnimationModel);
model.ensureEnabled();
model.addEventListener(Animation.AnimationModel.Events.AnimationGroupStarted, groupStarted);
// Each step triggers a new animation group.
var steps = [
'restartAnimation(\'node1\', \'expandWidth\')',
'restartAnimation(\'node2\', \'expandWidth\')',
'toggleClass(\'node1\', \'expandWidth\', false); restartAnimation(\'node1\', \'expand\')',
'restartAnimation(\'node3\', \'expand\')',
'restartAnimation(\'node3\', \'expand\')',
'restartAnimation(\'node2\', \'expand\')', // expandWidthAnim doesn't restart, new group.
'toggleClass(\'node1\', \'long\', true); restartAnimation(\'node1\', \'expand\')',
'toggleClass(\'node3\', \'long\', true); restartAnimation(\'node3\', \'expand\')',
'toggleClass(\'node2\', \'long\', true); restartAnimation(\'node2\', \'expand\')',
'toggleClass(\'node2\', \'expandWidth\', false); toggleClass(\'node2\', \'long\', true); restartAnimation(\'node2\', \'expand\')',
];
TestRunner.evaluateInPage(steps[0]);
function groupStarted(event) {
TestRunner.addResult('>> ' + steps[stepNumber]);
var group = event.data;
if (groupIds.indexOf(group.id()) !== -1) {
TestRunner.addResult('Group #' + groupIds.indexOf(group.id()) + ' started again!\n');
} else {
TestRunner.addResult('New group #' + groupIds.length + ' started.\n');
groupIds.push(group.id());
}
stepNumber++;
if (stepNumber < steps.length)
TestRunner.evaluateInPage(steps[stepNumber]);
else
TestRunner.completeTest();
}
})();