wpt / css / css-values / attr-pseudo-elem-invalidation-2.html

Status: FAIL | Duration: 58ms | Subtests: 0/1 | Open test on wpt.live | wpt.fyi

/css/css-values/attr-pseudo-elem-invalidation-2.html

<!-- Test is a derivative of attr-pseudo-elem-invalidation.html -->
<!DOCTYPE html>
<title>CSS Values and Units Test: attr() invalidation of pseudo elements</title>
<meta name="assert" content="Verify invalidation for attr() dependencies strictly on pseudo elements.">
<link rel="help" href="https://drafts.csswg.org/css-values/#attr-notation">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
  /* Eager + content generated pseudos */
  #div::after { content: "y"; font-size: attr(data-foo type(<percentage>)); }
  #div::before { content: "x"; font-size: attr(data-foo type(<percentage>)); }
  #div::first-letter { font-size: attr(data-foo type(<percentage>)); }
  #div::first-line { font-size: attr(data-foo type(<percentage>)); }
  #dialog::backdrop { font-size: attr(data-foo type(<percentage>)); }
  #li::marker { font-size: attr(data-foo type(<percentage>)); }

  #text-input::placeholder { font-size: attr(data-foo type(<percentage>)); }
  #file::file-selector-button { font-size: attr(data-foo type(<percentage>)); }
  #details::details-content { font-size: attr(data-foo type(<percentage>)); }
</style>
<div id="div">Some text</div>
<dialog id="dialog">Some text in modal</dialog>
<ol><li id="li">Item</li></ol>
<input id="text-input" placeholder="Enter text">
<input id="file" type="file">
<details id="details" open><p>Some content</p></details>
<script>
  const tests = [
    { id: "div", pseudo: "::after" },
    { id: "div", pseudo: "::before" },
    { id: "div", pseudo: "::first-letter" },
    { id: "div", pseudo: "::first-line" },
    { id: "li",  pseudo: "::marker" },
    { id: "text-input", pseudo: "::placeholder" },
    { id: "file",  pseudo: "::file-selector-button" },
    { id: "details",  pseudo: "::details-content" },
  ];

  function test_pseudo_element_invalidation({ id, pseudo }) {
    const elem = document.getElementById(id);
    elem.setAttribute("data-foo", "150%");
    const old_font_size = window.getComputedStyle(elem, pseudo).getPropertyValue("font-size");
    elem.setAttribute("data-foo", "300%");
    const new_font_size = window.getComputedStyle(elem, pseudo).getPropertyValue("font-size");
    test(() => {
      assert_not_equals(new_font_size, old_font_size,
                        "Change of attribute value should lead to invalidation of "
                         + pseudo + " element style.");
    });
  }

  function test_backdrop_invalidation() {
    const dlg = document.getElementById("dialog");
    dlg.showModal();
    test_pseudo_element_invalidation({id: "dialog", pseudo: "::backdrop"});
    dlg.close();
  }

  tests.forEach(test_pseudo_element_invalidation);
  test_backdrop_invalidation();
</script>