| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Selectors Level 4: :focus, :focus-visible and :focus-within in focusin event</title> |
| <link rel="help" href="https://drafts.csswg.org/selectors-4/#focus-pseudo"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-4/#focus-visible-pseudo"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-4/#focus-within-pseudo"> |
| <link rel="help" href="https://w3c.github.io/uievents/#event-type-focusin"> |
| <meta name='author' title='Manuel Rego Casasnovas' href='mailto:rego@igalia.com'> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <input type="text"> |
| <script> |
| var input = document.querySelector('input'); |
| input.addEventListener('focusin', function(e) { |
| test(() => { |
| try { |
| var focusPseudo = document.querySelector(':focus'); |
| assert_equals(e.target, focusPseudo, "':focus' matches event.target"); |
| } catch (error) { |
| assert_unreached("':focus' is an invalid selector. SyntaxError: " + error); |
| } |
| }, "Checks that ':focus' pseudo-class matches inside 'focusin' event handler"); |
| test(() => { |
| try { |
| var focusVisiblePseudo = document.querySelector(':focus-visible'); |
| assert_equals(e.target, focusVisiblePseudo, "':focus-visible' matches event.target"); |
| } catch (error) { |
| assert_unreached("':focus-visible' is an invalid selector. SyntaxError: " + error); |
| } |
| }, "Checks that ':focus-visible' pseudo-class matches inside 'focusin' event handler"); |
| test(() => { |
| try { |
| var focusWithinPseudo = document.querySelector(':focus-within'); |
| assert_equals(document.documentElement, focusWithinPseudo, "':focus-within' matches document.documentElement"); |
| } catch (error) { |
| assert_unreached("':focus-within' is an invalid selector. SyntaxError: " + error); |
| } |
| }, "Checks that ':focus-within' pseudo-class matches inside 'focusin' event handler"); |
| }, false); |
| input.focus(); |
| </script> |