Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE HTML>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#inner {
--length: 10px;
--color: red;
}
#outer {
--length: 77px;
--color: blue;
}
</style>
<div id=outer>
<div id=inner></div>
</div>
<script>
var computedStyle = getComputedStyle(inner);
var inlineStyle = inner.style;
var sheetStyle = document.styleSheets[0].cssRules[0].style;
test(function() {
// Nothing registered yet, whatever you specify works
assert_equals(computedStyle.getPropertyValue('--length'), '10px');
assert_equals(computedStyle.getPropertyValue('--color'), 'red');
}, "Initially unregistered values from stylesheet");
test(function() {
inlineStyle.setProperty('--length', '5');
inlineStyle.setProperty('--color', 'hello');
assert_equals(inlineStyle.getPropertyValue('--length'), '5');
assert_equals(inlineStyle.getPropertyValue('--color'), 'hello');
assert_equals(computedStyle.getPropertyValue('--length'), '5');
assert_equals(computedStyle.getPropertyValue('--color'), 'hello');
}, "CSSOM setters function as expected for unregistered properties");
test(function() {
CSS.registerProperty({name: '--length', syntax: '<length>', initialValue: '0px', inherits: false});
CSS.registerProperty({name: '--color', syntax: '<color>', initialValue: 'white', inherits: true});
}, "CSS.registerProperty");
test(function() {
assert_equals(inlineStyle.getPropertyValue('--length'), '5');
assert_equals(inlineStyle.getPropertyValue('--color'), 'hello');
assert_equals(computedStyle.getPropertyValue('--length'), '0px');
assert_equals(computedStyle.getPropertyValue('--color'), 'rgb(0, 0, 255)');
}, "Formerly valid values are still readable from inline styles but are computed as the unset value");
test(function() {
inlineStyle.setProperty('--length', 'hi');
inlineStyle.setProperty('--color', '20');
assert_equals(inlineStyle.getPropertyValue('--length'), 'hi');
assert_equals(inlineStyle.getPropertyValue('--color'), '20');
}, "Values not matching the registered type can still be set");
test(function() {
inlineStyle.removeProperty('--length');
inlineStyle.setProperty('--color', '');
assert_equals(inlineStyle.getPropertyValue('--length'), '');
assert_equals(inlineStyle.getPropertyValue('--color'), '');
assert_equals(computedStyle.getPropertyValue('--length'), '10px');
assert_equals(computedStyle.getPropertyValue('--color'), 'rgb(255, 0, 0)');
}, "Values can be removed from inline styles");
test(function() {
// 'banana' is not a valid <length>, but still accepted.
sheetStyle.setProperty('--length', 'banana');
assert_equals(computedStyle.getPropertyValue('--length'), '0px');
sheetStyle.setProperty('--length', '20px');
assert_equals(computedStyle.getPropertyValue('--length'), '20px');
sheetStyle.setProperty('--length', 'initial');
assert_equals(computedStyle.getPropertyValue('--length'), '0px');
}, "Stylesheets can be modified by CSSOM");
test(function() {
inlineStyle.setProperty('--length', '30px');
inlineStyle.setProperty('--color', 'pink');
assert_equals(inlineStyle.getPropertyValue('--length'), '30px');
assert_equals(inlineStyle.getPropertyValue('--color'), 'pink');
assert_equals(computedStyle.getPropertyValue('--length'), '30px');
assert_equals(computedStyle.getPropertyValue('--color'), 'rgb(255, 192, 203)');
inlineStyle.setProperty('--color', 'inherit');
assert_equals(inlineStyle.getPropertyValue('--color'), 'inherit');
assert_equals(computedStyle.getPropertyValue('--color'), 'rgb(0, 0, 255)');
}, "Valid values can be set on inline styles");
</script>