| <!doctype html> |
| <style> |
| .cursor { |
| cursor: pointer; |
| } |
| |
| .box { |
| display: inline-block; |
| position: absolute; |
| width: 100px; |
| } |
| |
| div { |
| margin-top: 5px; |
| border: 1px solid black; |
| } |
| |
| div div { |
| margin-top: 0; |
| width: 100px; |
| border: none; |
| } |
| |
| * { |
| background: white; |
| } |
| |
| .green { |
| /* To help debugging, every element in resultMap is green */ |
| background: lightgreen; |
| } |
| |
| .gray { |
| /* To help debugging, every skippable-element is gray */ |
| background: lightgray; |
| } |
| </style> |
| <button class="green" id="start">Start</button> |
| <div class="cursor gray" id="a">A |
| <div>A-child1</div> |
| <button class="green" id="a-child2">A-child2</button> |
| </div> |
| <div class="clickable gray" id="b">B |
| <div>B-child1</div> |
| <div class="green" tabindex="0" id="b-child2">B-child2</div> |
| </div> |
| <div class="cursor gray" id="c">C |
| <input type="text" id="c-child1"> |
| <div>C-child2</div> |
| </div> |
| <div class="clickable gray" id="d">D |
| <div class="clickable gray" id="d-child">D-child |
| <div class="clickable green" id="d-child-child">D-child-child |
| </div> |
| </div> |
| </div> |
| <div class="clickable gray" id="e">E |
| <div> |
| <div class="green" tabindex="0" id="e-child-child">E-child-child |
| </div> |
| </div> |
| </div> |
| <div class="cursor gray" id="f" style="position: relative; margin-top: 60px; height: 30px;">F |
| <!-- |f-child1| is out side of |f|. --> |
| <div class="green" tabindex="0" id="f-child1" style="position: absolute; top: -25px;">F-child1</div> |
| <div class="green" tabindex="0" id="f-child2" style="position: absolute; top: 0;">F-child2</div> |
| </div> |
| <div class="clickable gray" id="g">G |
| <div class="cursor gray"> |
| <a href="" class="green" id="g-child">G-child |
| <div class="clickable gray"> |
| <div class="cursor gray"> |
| <a href="" class="green" id="g-child-child">G-child-child</a> |
| </div> |
| </div> |
| </a> |
| </div> |
| </div> |
| |
| <p>This test ensures that an element that SupportsSpatialNavigationFocus() |
| doesn't become a candidate if it has an inner focusable descendant. |
| </p> |
| |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <script src="resources/snav-testharness.js"></script> |
| <script> |
| const noop = () => { }; |
| const clickableElements = document.getElementsByClassName("clickable"); |
| for (let elem of clickableElements) { |
| elem.addEventListener('click', noop); |
| } |
| |
| var resultMap = [ |
| ["Down", "a-child2"], |
| ["Down", "b-child2"], |
| ["Down", "c-child1"], |
| ["Down", "d-child-child"], |
| ["Down", "e-child-child"], |
| ["Down", "f-child1"], |
| ["Down", "f-child2"], |
| ["Down", "g-child"], |
| ["Down", "g-child-child"] |
| ]; |
| |
| // Start from a known place. |
| document.getElementById("start").focus(); |
| snav.assertFocusMoves(resultMap); |
| </script> |