<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Writing Modes: parsing text-combine-upright with valid values</title>
<link rel="author" title="Masataka Yakura" href="http://google.com/+MasatakaYakura">
<link rel="help" href="http://www.w3.org/TR/css-writing-modes-3/#text-combine-upright">
<meta name="assert" content="text-combine-upright supports `none`, `all`, `digits`, and `digits` followed by a digit in the range from 2 to 4.">
<meta name="flags" content="dom">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<style>
#valid_none {
  text-combine-upright: none;
}

#valid_all {
  text-combine-upright: all;
}

#valid_initial {
  text-combine-upright: initial;
}

#valid_inherit_outer {
  text-combine-upright: all;
}

#valid_inherit_inner {
  text-combine-upright: inherit;
}

#valid_unset_outer {
  text-combine-upright: all;
}

#valid_unset_inner {
  text-combine-upright: unset;
}
</style>
</head>
<body>

<div id="valid_none"></div>
<div id="valid_all"></div>

<div id="valid_initial"></div>

<div id="valid_inherit_outer">
  <div id="valid_inherit_inner"></div>
</div>

<div id="valid_unset_outer">
  <div id="valid_unset_inner"></div>
</div>

<div id="log"></div>

<script>
var getComputedValueFor = function (id) {
  var element = document.getElementById(id);
  return window.getComputedStyle(element).textCombineUpright;
};

test(function () {
  assert_equals(getComputedValueFor('valid_none'), 'none');
}, 'Computed value for `text-combine-upright: none` is `none`');

test(function () {
  assert_equals(getComputedValueFor('valid_all'), 'all');
}, 'Computed value for `text-combine-upright: all` is `all`');


test(function () {
  assert_equals(getComputedValueFor('valid_initial'), 'none');
}, 'Computed value for `text-combine-upright: initial` is `none`');


test(function () {
  assert_equals(getComputedValueFor('valid_inherit_outer'), 'all');
  assert_equals(getComputedValueFor('valid_inherit_inner'), 'all');
}, 'Computed value for `text-combine-upright: inherit` is `all` which is inherited from the parent element');

test(function () {
  assert_equals(getComputedValueFor('valid_unset_outer'), 'all');
  assert_equals(getComputedValueFor('valid_unset_inner'), 'all');
}, 'Computed value for `text-combine-upright: unset` is `all` which is inherited from the parent element');
</script>
</body>
</html>
