blob: 6ec24c884489b38992c5d62ad7562efdd02bc92a [file] [log] [blame]
<!DOCTYPE html><!-- webkit-test-runner [ experimental:CSSCustomPropertiesAndValuesEnabled=true ] -->
<!-- https://chromium.googlesource.com/chromium/src/+/01ce431409e3a019858677626a983c55168da6dc/third_party/WebKit/LayoutTests/custom-properties/register-property.html -->
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
#parent1 {
width: 500px;
background: blue;
}
#child1 {
background: green;
font-size: 10px;
--a: 10em;
width: var(--a);
}
#parent2 {
width: 500px;
background: blue;
--a: 10em;
font-size: calc( var(--a) + -150px);
}
#child2 {
background: green;
width: var(--a);
}
#parent3 {
width: 500px;
background: blue;
--b: 10em;
font-size: calc( var(--b) + -150px);
}
#child3 {
background: green;
width: var(--b);
}
#parent4 {
width: 500px;
background: blue;
--b: 10em;
font-size: calc( var(--b) + -150px);
}
#child4 {
background: green;
--a: var(--b);
font-size: var(--a);
width: var(--a);
}
#parent5 {
width: 500px;
background: blue;
--b: 5em;
font-size: calc( var(--b) + -70px);
}
#child5 {
background: green;
--c: var(--b);
font-size: var(--c);
width: var(--c);
}
</style>
<div>
<div id="parent1"><div id="child1"><p>test</p></div></div>
<div id="parent2"><div id="child2"><p>test</p></div></div>
<div id="parent3"><div id="child3"><p>test</p></div></div>
<div id="parent4"><div id="child4"><p>test</p></div></div>
<div id="parent5"><div id="child5"><p>test</p></div></div>
</div>
<script>
function test_prop(id, prop, expected) {
assert_equals(window.getComputedStyle(document.getElementById(id)).getPropertyValue(prop).trim(), expected);
}
test(function() {
CSS.registerProperty({
name: '--a',
syntax: '<length>',
inherits: true,
initialValue: '200px'
})
}, "Registration is successful");
test(function() {
test_prop('child1', 'width', '100px');
test_prop('child1', '--a', '100px');
test_prop('child1', '--b', '');
test_prop('parent1', '--a', '200px');
test_prop('parent1', '--b', '');
}, "JS Attributes are valid for element 1");
test(function() {
test_prop('child2', 'width', '160px');
test_prop('child2', '--a', '160px');
test_prop('child2', '--b', '');
test_prop('child2', 'font-size', '16px');
test_prop('parent2', '--a', '160px');
test_prop('parent2', '--b', '');
test_prop('parent2', 'font-size', '16px');
}, "JS Attributes are valid for element 2");
test(function() {
test_prop('child3', 'width', '100px');
test_prop('child3', '--a', '200px');
test_prop('child3', '--b', '10em');
test_prop('child3', 'font-size', '10px');
test_prop('parent3', '--a', '200px');
test_prop('parent3', '--b', '10em');
test_prop('parent3', 'font-size', '10px');
}, "JS Attributes are valid for element 3");
test(function() {
test_prop('child4', 'width', '100px');
test_prop('child4', '--a', '100px');
test_prop('child4', '--b', '10em');
test_prop('child4', 'font-size', '10px');
test_prop('parent4', '--a', '200px');
test_prop('parent4', '--b', '10em');
test_prop('parent4', 'font-size', '10px');
}, "JS Attributes are valid for element 4");
test(function() {
test_prop('child5', 'width', '250px');
test_prop('child5', '--c', '5em');
test_prop('child5', '--b', '5em');
test_prop('child5', 'font-size', '50px');
test_prop('parent5', '--a', '200px');
test_prop('parent5', '--b', '5em');
test_prop('parent5', 'font-size', '10px');
}, "JS Attributes are valid for element 5");
</script>