<!DOCTYPE html>
<title>CSS Values: The inherit() function (basic behavior)</title>
<link rel="help" href="https://drafts.csswg.org/css-values-5/#inherit-notation">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<main id=main>
</main>

<template id=inherit_immediate_parent>
  <style>
    #parent {
      --z: 2;
    }
    #target {
      --z: 13;
      z-index: inherit(--z);
    }
  </style>
  <div id=parent>
    <div id=target>
    </div>
  </div>
</template>
<script>
  test((t) => {
    main.append(inherit_immediate_parent.content.cloneNode(true));
    t.add_cleanup(() => { main.replaceChildren(); });
    assert_equals(getComputedStyle(target).zIndex, '2');
  }, 'inherit() on value set on parent');
</script>

<template id=inherit_ancestor>
  <style>
    :root {
      --z: 2;
    }
    #foo {
      --z: 13;
      z-index: inherit(--z);
    }
  </style>
  <div id=foo>
  </div>
</template>
<script>
  test((t) => {
    main.append(inherit_ancestor.content.cloneNode(true));
    t.add_cleanup(() => { main.replaceChildren(); });
    assert_equals(getComputedStyle(foo).zIndex, '2');
  }, 'inherit() on value set on ancestor');
</script>

<template id=inherit_fallback>
  <style>
    #foo {
      --z: 13;
      z-index: inherit(--z, 4);
    }
  </style>
  <div id=foo>
  </div>
</template>
<script>
  test((t) => {
    main.append(inherit_fallback.content.cloneNode(true));
    t.add_cleanup(() => { main.replaceChildren(); });
    assert_equals(getComputedStyle(foo).zIndex, '4');
  }, 'inherit(), no value set on parent');
</script>

<template id=inherit_accumulate_values>
  <style>
    #e1 { --v: e1; }
    #e2 { --v: e2 inherit(--v); }
    #e3 { --v: e3 inherit(--v); }
  </style>
  <div id=e1>
    <div id=e2>
      <div id=e3>
      </div>
    </div>
  </div>
</template>
<script>
  test((t) => {
    main.append(inherit_accumulate_values.content.cloneNode(true));
    t.add_cleanup(() => { main.replaceChildren(); });
    assert_equals(getComputedStyle(e3).getPropertyValue('--v'), 'e3 e2 e1');
  }, 'inherit(), accumulating values');
</script>

<template id=inherit_accumulate_font_size>
  <style>
    @property --f {
      syntax: "<length>";
      inherits: false;
      initial-value: 0px;
    }
    #e1 { font-size: 3px; --f: 1em; }
    #e2 { font-size: 5px; --f: calc(1em + inherit(--f)); }
    #e3 { font-size: 7px; --f: calc(1em + inherit(--f)); }
  </style>
  <div id=e1>
    <div id=e2>
      <div id=e3>
      </div>
    </div>
  </div>
</template>
<script>
  test((t) => {
    main.append(inherit_accumulate_font_size.content.cloneNode(true));
    t.add_cleanup(() => { main.replaceChildren(); });
    assert_equals(getComputedStyle(e3).getPropertyValue('--f'), '15px');
  }, 'inherit(), accumulating font-size');
</script>

<template id=inherit_within_if>
  <style>
    #parent {
      --z: 2;
    }
    #target {
      --z: 13;
      z-index: if(style(--z > inherit(--z)):4; else:7);
    }
  </style>
  <div id=parent>
    <div id=target>
    </div>
  </div>
</template>
<script>
  test((t) => {
    main.append(inherit_within_if.content.cloneNode(true));
    t.add_cleanup(() => { main.replaceChildren(); });
    assert_equals(getComputedStyle(target).zIndex, '4');
  }, 'inherit() can be used within if()');
</script>
