<!DOCTYPE html><!-- webkit-test-runner [ 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>
  #test1 {
    --a: 10em;
    --b: 10em;
  }
</style>
<div>
  <div id=test1><p>test</p></div>
</div>
<script>

var computedStyle = getComputedStyle(test1);
var inlineStyle = test1.style;
var sheetStyle = document.styleSheets[0].cssRules[0].style;

test(function() {
  // Nothing registered yet, whatever you specify works
  assert_equals(computedStyle.getPropertyValue('--a'), '10em');
  assert_equals(computedStyle.getPropertyValue('--b'), '10em');

  inlineStyle.setProperty('--a', 'hello');
  inlineStyle.setProperty('--b', 'bonjour');

  assert_equals(inlineStyle.getPropertyValue('--a'), 'hello');
  assert_equals(inlineStyle.getPropertyValue('--b'), 'bonjour');
  assert_equals(computedStyle.getPropertyValue('--a'), 'hello');
  assert_equals(computedStyle.getPropertyValue('--b'), 'bonjour');
}, "CSSOM setters function as expected for unregistered properties");

test(function() {
  CSS.registerProperty({name: '--a', syntax: '<length>', initialValue: '0px', inherits: false});
  CSS.registerProperty({name: '--registered', syntax: '<length>', initialValue: '0px', inherits: false});
}, "CSS.registerProperty");

test(function() {
  assert_equals(inlineStyle.getPropertyValue('--a'), 'hello');
  assert_equals(inlineStyle.getPropertyValue('--b'), 'bonjour');
  assert_equals(computedStyle.getPropertyValue('--a'), '0px');
  assert_equals(computedStyle.getPropertyValue('--b'), 'bonjour');
}, "Formerly valid values are still readable from inline styles but are computed as the unset value");

test(function() {
  inlineStyle.setProperty('--a', 'hi');
  inlineStyle.setProperty('--b', 'hi');
  assert_equals(inlineStyle.getPropertyValue('--a'), 'hello');
  assert_equals(inlineStyle.getPropertyValue('--b'), 'hi');
}, "Values not matching the registered type can't be set");

test(function() {
  inlineStyle.removeProperty('--a');
  inlineStyle.setProperty('--b', '');
  assert_equals(inlineStyle.getPropertyValue('--a'), '');
  assert_equals(inlineStyle.getPropertyValue('--b'), '');
  assert_equals(computedStyle.getPropertyValue('--a'), '160px');
  assert_equals(computedStyle.getPropertyValue('--b'), '10em');
}, "Values can be removed from inline styles");

test(function() {
  sheetStyle.setProperty('--a', 'banana'); // Invalid, no change
  assert_equals(computedStyle.getPropertyValue('--a'), '160px');
  sheetStyle.setProperty('--a', '20px');
  assert_equals(computedStyle.getPropertyValue('--a'), '20px');
  sheetStyle.setProperty('--a', 'initial');
  assert_equals(computedStyle.getPropertyValue('--a'), '0px');
}, "Stylesheets can be modified by CSSOM");

test(function() {
  inlineStyle.setProperty('--a', '30em');
  inlineStyle.setProperty('--b', '20em');
  assert_equals(inlineStyle.getPropertyValue('--a'), '30em');
  assert_equals(inlineStyle.getPropertyValue('--b'), '20em');
  assert_equals(computedStyle.getPropertyValue('--a'), '480px');
  assert_equals(computedStyle.getPropertyValue('--b'), '20em');
  inlineStyle.setProperty('--a', 'inherit');
  assert_equals(inlineStyle.getPropertyValue('--a'), 'inherit');
  assert_equals(computedStyle.getPropertyValue('--a'), '0px');
}, "Valid values can be set on inline styles");

test(function() {
  inlineStyle.setProperty('--b', ' 20px');
  inlineStyle.setProperty('--a', 'calc(var(--b) + 10px)');
  assert_equals(inlineStyle.getPropertyValue('--b'), ' 20px');
  assert_equals(inlineStyle.getPropertyValue('--a'), 'calc(var(--b) + 10px)');
  assert_equals(computedStyle.getPropertyValue('--b'), ' 20px');
  assert_equals(computedStyle.getPropertyValue('--a'), '30px');
}, "Var values are accepted");

test(function() {
  inlineStyle.setProperty('--b', 'hello');
  inlineStyle.setProperty('--a', 'calc(var(--b) + 15px)');
  assert_equals(inlineStyle.getPropertyValue('--b'), 'hello');
  assert_equals(inlineStyle.getPropertyValue('--a'), 'calc(var(--b) + 15px)');
  assert_equals(computedStyle.getPropertyValue('--b'), 'hello');
  assert_equals(computedStyle.getPropertyValue('--a'), '0px');
}, "Var values are accepted without validation");

test(function() {
  inlineStyle.setProperty('--b', 'hello');
  inlineStyle.setProperty('--a', 'calc(var(--b) 15px)');
  assert_equals(inlineStyle.getPropertyValue('--b'), 'hello');
  assert_equals(inlineStyle.getPropertyValue('--a'), 'calc(var(--b) 15px)');
  assert_equals(computedStyle.getPropertyValue('--b'), 'hello');
  assert_equals(computedStyle.getPropertyValue('--a'), '0px');
}, "Var values are accepted without validation, even when it is obvious they will not parse");

test(function() {
  inlineStyle.setProperty('--b', 'hello');
  inlineStyle.setProperty('--a', 'calc(var(--registered) 15px)');
  assert_equals(inlineStyle.getPropertyValue('--b'), 'hello');
  assert_equals(inlineStyle.getPropertyValue('--a'), 'calc(var(--registered) 15px)');
  assert_equals(computedStyle.getPropertyValue('--b'), 'hello');
  assert_equals(computedStyle.getPropertyValue('--a'), '0px');
}, "Var values are accepted without validation, even when it is obvious they will not parse (typed)");

</script>
