<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>CSS Test (Selectors): :focus-visible does not match on non-texty inputs</title>
  <link rel="author" title="Alice Boxhall" href="aboxhall@chromium.org" />
  <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-actions.js"></script>
  <script src="/resources/testdriver-vendor.js"></script>
  <style>
    @supports not (selector(:focus-visible)) {
      :focus {
        outline: red solid 5px;
        background-color: red;
      }
    }

    :focus-visible {
      outline: red solid 5px;
    }

    :focus:not(:focus-visible) {
        outline: 0;
        background-color: lime;
    }
  </style>
</head>
<body>
  This test checks that <code>:focus-visible</code> is <em>not</em> triggered by mouse focus on <code>&lt;input&gt;</code> elements which do not take text input.
  <ol id="instructions">
    <li>If the user-agent does not claim to support the <code>:focus-visible</code> pseudo-class then SKIP this test.</li>
    <li>Click each element element below to focus it.</li>
    <li>If the element has a red outline, then the test result is FAILURE. If the element has a green background, then the test result is SUCCESS.</li>
  </ol>
  <br />
  <div>
    <span class="check" id="el-1" tabindex="1">Focus me</span>
  </div>
  <div>
    <span class="check" id="el-2" tabindex="-1">Focus me</span>
  </div>
  <div>
    <span class="check" id="el-3" tabindex="0">Focus me</span>
  </div>
  <div>
    <button class="check" id="el-4">Focus me</span>
  </div>
  <div>
    <input class="check" id="el-5" type="button" value="Focus me"></input>
  </div>
  <div>
    <input class="check" id="el-6" type="image" alt="Focus me."></input>
  </div>
  <div>
    <input class="check" id="el-7" type="reset" value="Focus me."></input>
  </div>
  <div>
    <input class="check" id="el-8" type="submit" value="Focus me."></input>
  </div>
  <div>
    <label><input class="check" id="el-9" type="checkbox"></input> Focus me.</label>
  </div>
  <div>
    <label><input class="check" id="el-10" type="radio"></input> Focus me.</label>
  </div>
  <div>
    <!-- Focusing file input triggers a modal, so only test manually -->
    <input id="el-11" type="file" value="Focus me."></input>
  </div>
  <div>
    <label><input class="check" id="el-12" type="range"></input> Focus me.</label>
  </div>
  <div>
    <!-- Ensure the color input is last, as it has a pop-up which obscures other elements -->
    <label><input class="check" id="el-13" type="color"></input> Focus me.</label>
  </div>
  <script>
    setup({ explicit_done: true });

    const elements = document.querySelectorAll(".check");
    for (let i = 0; i < elements.length; i++) {
      const target = elements[i];
      promise_test(() => {
        return new Promise(resolve => {
          target.addEventListener("focus", resolve);
          test_driver.click(target).then(() => {
            if (i == (elements.length - 1))
              done();
          });
        }).then(() => {
          assert_equals(getComputedStyle(target).backgroundColor, "rgb(0, 255, 0)", `backgroundColor for ${target.tagName}#${target.id} should be lime`);
          assert_not_equals(getComputedStyle(target).outlineColor, "rgb(255, 0, 0)", `outlineColor for ${target.tagName}#${target.id} should NOT be red`);
        });
      }, `Focus element ${target.tagName}#${target.id} via mouse should NOT match :focus-visible as it does NOT support keyboard input`);
    }
  </script>
</body>
</html>
