blob: 94b97ebb1185ee80186606f3efea77d26397ed84 [file] [log] [blame] [edit]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.outerBlock {
border: 1px solid black;
-webkit-transition: all 1s linear;
-moz-transition: all 1s linear;
}
.innerBlock {
background-color: green;
height: 100px;
-webkit-transition: all 1s linear;
-moz-transition: all 1s linear;
}
#outer {
width: 100px;
}
#outer.go {
width: 500px;
}
#inner {
width: calc(50% + 10px);
}
#innerTransition {
width: calc(10% + 10px);
}
#innerTransition.go {
width: calc(100% - 10px);
}
</style>
</head>
<body>
This tests that calc() expressions depending on transitioning elements behave correctly.
<div class="outerBlock" id="outer">
<div class="innerBlock" id="inner"></div>
<div class="innerBlock" id="innerTransition"></div>
</div>
<div id="result"></div>
</body>
<script src="../../transitions/resources/transition-test-helpers.js"></script>
<script>
if (window.testRunner)
testRunner.dumpAsText();
const transitioningElements = ["outer", "innerTransition"];
expectedValues = [
// time, element, property, expected-value, depends-on
[0.00, "inner", 'width', 60, "outer"],
[0.25, "inner", 'width', 110, "outer"],
[0.50, "inner", 'width', 160, "outer"],
[0.75, "inner", 'width', 210, "outer"],
[1.00, "inner", 'width', 260, "outer"],
[0.00, "innerTransition", 'width', 60, "outer"],
[0.25, "innerTransition", 'width', 167.5, "outer"],
[0.50, "innerTransition", 'width', 275, "outer"],
[0.75, "innerTransition", 'width', 382.5, "outer"],
[1.00, "innerTransition", 'width', 490, "outer"],
];
function propertyValue(elementId, property)
{
let element = document.getElementById(elementId);
let style = window.getComputedStyle(element, null);
return parseFloat(style.getPropertyValue(property))
}
function initTransitionOnElement(elementId)
{
let element = document.getElementById(elementId);
element.className += " go";
for (let animation of element.getAnimations()) {
if (animation instanceof CSSTransition && animation.transitionProperty == "width") {
animation.pause();
}
}
}
function runTest(expected)
{
let result = document.getElementById("result");
initTransitionOnElement("outer");
for (let i = 0; i < 5; i++) {
let [time, elementId, property, expectedValue, dependsOn] = expected[i];
pauseTransitionAtTimeOnElement(property, time, document.getElementById(dependsOn));
let actual = propertyValue(elementId, property)
if (actual == expectedValue)
result.innerHTML += `PASS - "${property}" property for "${elementId}" element at ${time}s was: ${actual}<br/>`;
else
result.innerHTML += `FAIL - "${property}" property for "${elementId}" element at ${time}s expected ${expectedValue} but saw: ${actual}<br/>`;
}
initTransitionOnElement("innerTransition");
for (let i = 5; i < expected.length; i++) {
let [time, elementId, property, expectedValue, dependsOn] = expected[i];
pauseTransitionAtTimeOnElement(property, time, document.getElementById(elementId));
let actual = propertyValue(elementId, property)
if (actual == expectedValue)
result.innerHTML += `PASS - "${property}" property for "${elementId}" element at ${time}s was: ${actual}<br/>`;
else
result.innerHTML += `FAIL - "${property}" property for "${elementId}" element at ${time}s expected ${expectedValue} but saw: ${actual}<br/>`;
}
if (window.testRunner)
testRunner.notifyDone();
}
function loadListener()
{
waitForAnimationStart(function(){runTest(expectedValues);});
}
window.addEventListener("load", loadListener, false);
if (window.testRunner)
testRunner.waitUntilDone();
</script>
</html>