<!DOCTYPE html><!-- webkit-test-runner [ TabsToLinks=true SpatialNavigationEnabled=true ] -->
<html>
  <!--
    This test ensures the correctness of Spatial Navigation (SNav) algorithm over single select element.

    * Pre-conditions:
    1) DRT support for SNav enable/disable.

    * Navigation steps:
    1) Loads this page, focus goes to "start" automatically.
    2) Focus moves away from select in 4 different directions to neighbor nodes and back.
  -->
  <head>
    <script src="../../resources/js-test-pre.js"></script>
    <script src="resources/spatial-navigation-utils.js"></script>
    <script type="application/javascript">

    var resultMap = [
      ["Down", "down"],
      ["Down", "8"],
      ["Up", "down"],
      ["Up", "start"],
      ["Up", "up"],
      ["Up", "2"],
      ["Down", "up"],
      ["Down", "start"],
      ["Right", "right"],
      ["Right", "6"],
      ["Left", "right"],
      ["Left", "start"],
      ["Left", "left"],
      ["Left", "4"],
      ["Right", "left"],
      ["Right", "start"],
      ["DONE", "DONE"]
    ];

    if (window.testRunner) {
      testRunner.dumpAsText();
      testRunner.waitUntilDone();
    }

    function runTest()
    {
      // starting the test itself: get to a known place.
      document.getElementById("start").focus();

      initTest(resultMap, testCompleted);
    }

    function testCompleted()
    {
      if (window.testRunner)
        shouldBe("document.getElementById('down').checked", "true");            
        testRunner.notifyDone();
    }

    window.onload = runTest;

    </script>
    <script src="../resources/js-test-post.js"></script>
  </head>
  <body id="some-content" xmlns="http://www.w3.org/1999/xhtml">
    <table style="text-align: left; width: 100%; margin-left: auto; margin-right: auto;" border="1" cellpadding="2" cellspacing="1">
      <tbody>
        <tr>
          <td style="vertical-align: center; text-align: center;"></td>
          <td style="vertical-align: center; text-align: center;"><a id="2" href="a">2</a></td>
          <td style="vertical-align: center; text-align: center;"></td>
        </tr>
        <tr>
          <td style="vertical-align: center; text-align: center;"><a id="4" href="a">4</a></td>
          <td style="vertical-align: center; text-align: center;">
            <table style="text-align: center; width: 100%; margin-left: auto; margin-right: auto;" border="1" cellpadding="2" cellspacing="1">
              <tbody>
                <tr>
                  <td style="vertical-align: center; text-align: center;"></td>
                  <td style="vertical-align: center; text-align: center;"><input type="radio" name="group" id="up" ></td>
                  <td style="vertical-align: center; text-align: center;"></td>
                </tr>
                <tr>
                  <td style="vertical-align: center; text-align: center;"><input type="radio" name="group" id="left" ></td>
                  <td style="vertical-align: center; text-align: center;">
                    <input type="radio" name="group" id="start" >
                  </td>
                  <td style="vertical-align: center; text-align: center;"><input type="radio" name="group" id="right" ></td>
                </tr>
                <tr>
                  <td style="vertical-align: center; text-align: center;"></td>
                  <td style="vertical-align: center; text-align: center;"><input type="radio" name="group" id="down" checked ></td>
                  <td style="vertical-align: center; text-align: center;"></td>
                </tr>
              </tbody>
            </table>
          </td>
          <td style="vertical-align: center; text-align: center;"><a id="6" href="a">6</a></td>
        </tr>
        <tr>
          <td style="vertical-align: center; text-align: center;"></td>
          <td style="vertical-align: center; text-align: center;"><a id="8" href="a">8</a></td>
          <td style="vertical-align: center; text-align: center;"></td>
        </tr>
      </tbody>
    </table>
    <div id="console"></div>
  </body>
</html>

