<!DOCTYPE html>
<meta charset="utf-8" />
<title>CSS Test (Selectors): Script focus after blur after keyboard focus does match :focus-visible</title>
<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
<link rel="help" href="https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
<style>
  #warning {
    display: none;
    background: red;
  }

  @supports not selector(:focus-visible) {
    #instructions {
      display: none;
    }

    #warning {
      display: block;
    }
  }

  :focus-visible {
    outline: solid thick green;
  }

  :focus:not(:focus-visible) {
    background-color: red;
  }
</style>

<p>This test checks that a script focus after blur after a keyboard focus does match <code>:focus-visible</code>.</p>
<ol id="instructions">
  <li>Type TAB key.</li>
  <li>If the element that says "Focused" has a red background then the test result is FAILURE, if it has a green outline then the test result is SUCCESS.</li>
</ol>
<p id="warning">Your user-agent does not support <code>:focus-visible</code> pseudo-class, please SKIP this test.</p>

<div id="initial" tabindex="0">Focus me</div>
<div id="target" tabindex="0">Focused</div>

<script>
  // Check that :focus-visible is supported.
  test_valid_selector(':focus-visible');

  initial.addEventListener("focus", () => {
    document.activeElement.blur();
    target.focus();
  });

  async_test(function(t) {
    target.addEventListener("focus", t.step_func_done(function() {
      assert_equals(getComputedStyle(target).outlineColor, "rgb(0, 128, 0)", `outlineColor for ${target.tagName}#${target.id} should be green`);
      assert_not_equals(getComputedStyle(target).backgroundColor, "rgb(255, 0, 0)", `backgroundColor for ${target.tagName}#${target.id} should NOT be red`);
    }));

    const tab_key = "\ue004";
    test_driver.send_keys(document.body, tab_key);
  }, "Script focus after blur after keyboard focus does match :focus-visible");
</script>
