<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>inert with label/for</title>
    <link rel="author" title="Alice Boxhall" href="aboxhall@chromium.org">
    <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>
  </head>
  <body>
    <label inert id="for-submit" for="submit">Label for Submit</label>
    <input id="text" type="text">
    <input id="submit" type="submit">

    <label id="for-input-in-inert-subtree"
           for="input-in-inert-subtree">Label for input in inert subtree</label>
    <div inert>
      <input id="input-in-inert-subtree"></input>
    </div>

    <script>
      test(() => {
        label = document.querySelector('#for-submit');
        label.focus();
        assert_equals(document.activeElement, document.querySelector('#submit'));
      }, 'Calling focus() on an inert label should still send focus to its target.');

      promise_test(async () => {
        text = document.querySelector('#text');
        text.focus();
        label = document.querySelector('#for-submit');
        try {
          await test_driver.click(label);
          assert_equals(document.activeElement, document.body);
        } catch (e) {
          // test driver detects inert elements as unclickable
          // and throws an error
        }
      }, 'Clicking on an inert label should send focus to document.body.');

      test(() => {
        text = document.querySelector('#text');
        text.focus();

        label = document.querySelector('#for-input-in-inert-subtree');
        label.focus();
        assert_equals(document.activeElement, text);
      }, 'Calling focus() on a label for a control which is in an inert subtree ' +
         'should have no effect.');
</script>
</html>
