blob: 23f6de316e17f9b976af48cc439cbc43c400fe4c [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<style>
#willChangeOpacity {
will-change: opacity;
}
#willChangeScrollPosition {
will-change: scroll-position;
}
#willChangeContents {
will-change: contents;
}
#willChangeMultiple {
will-change: opacity, contents, left, -webkit-transform;
}
#willChangeWithArbitraryIdent {
will-change: opacity, i-am-not-a-property, top;
}
</style>
</head>
<body>
<div id="willChangeOpacity"></div>
<div id="willChangeScrollPosition"></div>
<div id="willChangeContents"></div>
<div id="willChangeMultiple"></div>
<div id="willChangeWithArbitraryIdent"></div>
<script>
'use strict';
// Test that setting and getting will-change works as expected.
test(() => {
var willChangeOpacity = document.getElementById("willChangeOpacity");
assert_equals(getComputedStyle(willChangeOpacity, '').getPropertyValue('will-change'), 'opacity');
var willChangeScrollPosition = document.getElementById("willChangeScrollPosition");
assert_equals(getComputedStyle(willChangeScrollPosition, '').getPropertyValue('will-change'), 'scroll-position');
var willChangeContents = document.getElementById("willChangeContents");
assert_equals(getComputedStyle(willChangeContents, '').getPropertyValue('will-change'), 'contents');
var willChangeMultiple = document.getElementById("willChangeMultiple");
assert_equals(getComputedStyle(willChangeMultiple, '').getPropertyValue('will-change'), 'contents, opacity, left, -webkit-transform');
var willChangeContents = document.getElementById("willChangeWithArbitraryIdent");
assert_equals(getComputedStyle(willChangeWithArbitraryIdent, '').getPropertyValue('will-change'), 'opacity, top');
}, "Test getting will-change set through CSS");
test(() => {
var element = document.createElement("div");
document.body.appendChild(element);
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
}, "Test initial value of will-change");
test(() => {
var element = document.createElement("div");
document.body.appendChild(element);
element.style.willChange = "opacity";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'opacity');
element.style.willChange = "scroll-position";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'scroll-position');
element.style.willChange = "contents";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'contents');
element.style.willChange = "contents, scroll-position, opacity, -webkit-transform";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'contents, scroll-position, opacity, -webkit-transform');
element.style.willChange = "i-am-not-a-property, opacity, top";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'opacity, top');
element.style.willChange = "opacity, i-am-not-a-property, top";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'opacity, top');
element.style.willChange = "opacity, top, i-am-not-a-property";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'opacity, top');
element.style.willChange = "i-am-not-a-property";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
}, "Test getting and setting will-change through JS");
test(() => {
var element = document.createElement("div");
document.body.appendChild(element);
element.style.willChange = "auto";
element.style.willChange = "opacity, will-change";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
element.style.willChange = "none";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
element.style.willChange = "none, opacity";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
element.style.willChange = "all";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
element.style.willChange = "all, opacity";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
element.style.willChange = "left, auto, top";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
element.style.willChange = "left, default";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
element.style.willChange = "initial, top";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
element.style.willChange = "top, inherit";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
}, "Test that illegal will-change values are disallowed");
test(() => {
var element = document.createElement("div");
document.body.appendChild(element);
element.style.willChange = "opacity";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'opacity');
element.style.willChange = "initial";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
}, "Test the value 'initial'");
test(() => {
var parentElement = document.createElement("div");
document.body.appendChild(parentElement);
parentElement.style.willChange = "contents, opacity, top";
assert_equals(getComputedStyle(parentElement, '').getPropertyValue('will-change'), 'contents, opacity, top');
var element = document.createElement("div");
parentElement.appendChild(element);
element.style.willChange = "inherit";
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'contents, opacity, top');
}, "Test the value 'inherit'");
test(() => {
var parentElement = document.createElement("div");
document.body.appendChild(parentElement);
parentElement.style.willChange = "opacity";
assert_equals(getComputedStyle(parentElement, '').getPropertyValue('will-change'), 'opacity');
var element = document.createElement("div");
parentElement.appendChild(element);
assert_equals(getComputedStyle(element, '').getPropertyValue('will-change'), 'auto');
}, "Test that will-change is not inherited by default");
</script>
</body>
</html>