<!DOCTYPE html>
<title>CSS Values and Units Test: Lines of the ch unit can fit the specified number of characters</title>
<link rel="help" href="https://drafts.csswg.org/css-values-3/#font-relative-lengths">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
div {
  font-family: monospace;
  font-size: 10px;
  line-height: 1;
}
</style>
<body>
  <div id=log></div>
<script>
(function() {
  // Test that lines do not wrap for elements of the width of
  // 'ch' unit that have the specified number of characters.
  let container = document.body;
  let should_fit = [];
  for (let i = 3; i < 100; i++) {
    let element = document.createElement('div');
    element.style.width = `${i}ch`;
    element.textContent = `0 ${'0'.repeat(i - 2)}`;
    container.appendChild(element);
    should_fit.push(element);
  }

  // When the number of characters is +1, it should wrap.
  let should_wrap = [];
  for (let i = 3; i < 100; i++) {
    let element = document.createElement('div');
    element.style.width = `${i}ch`;
    element.textContent = `0 ${'0'.repeat(i - 1)}`;
    container.appendChild(element);
    should_wrap.push(element);
  }

  for (let element of should_fit) {
    test(() => {
      assert_approx_equals(element.offsetHeight, 10, 1);
    }, `${element.style.width} should fit`);
  }

  for (let element of should_wrap) {
    test(() => {
      assert_approx_equals(element.offsetHeight, 20, 1);
    }, `${element.style.width} should wrap`);
  }
})();
</script>
</body>
