<!doctype html>
<title>Container Relative Units: CSS Typed OM</title>
<link rel="help" href="https://drafts.csswg.org/css-contain-3/#container-lengths">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#stylepropertymap">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/cq-testcommon.js"></script>
<div id=element></div>
<script>
  setup(() => assert_implements_container_queries());

  const units = ['cqw', 'cqh', 'cqi', 'cqb', 'cqmin', 'cqmax'];
  const functions = {
    cqw: CSS.cqw,
    cqh: CSS.cqh,
    cqi: CSS.cqi,
    cqb: CSS.cqb,
    cqmin: CSS.cqmin,
    cqmax: CSS.cqmax,
  };

  for (let unit of units) {
    let func = functions[unit];

    test(() => {
      assert_equals(`${func(10)}`, `10${unit}`);
    }, `CSS.${unit} function`);

    test(() => {
      try {
        element.style.top = `10${unit}`;
        let value = element.attributeStyleMap.get('top');
        assert_equals(value.value, 10);
        assert_equals(value.unit, unit);
      } finally {
        element.style = '';
      }
    }, `Reify value with ${unit} unit`);

    test(() => {
      try {
        element.attributeStyleMap.set('top', `10${unit}`);
        assert_equals(element.style.top, `10${unit}`);
      } finally {
        element.style = '';
      }
    }, `Set value with ${unit} unit (string)`);

    test(() => {
      try {
        element.attributeStyleMap.set('top', func(10));
        assert_equals(element.style.top, `10${unit}`);
      } finally {
        element.style = '';
      }
    }, `Set value with ${unit} unit (CSS.${unit})`);
  }

</script>
