<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>HTML Test: focus - zero tabindex</title>
<meta name="timeout" content="long">
<link rel="author" title="Intel" href="http://www.intel.com/">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#sequential-focus-navigation-and-the-tabindex-attribute">
<meta assert="flag" content="interact">
<meta assert="assert" content="Check if the tabindex attribute controls whether an element is supposed to be focusable">
<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>
<div id="log"></div>
<form id="fm">
  <input id="test" tabindex="0">
</form>
<script>

var t = async_test("The element with a zero tabindex must be focused by press 'Tab' key");

setup({timeout: 10000});

document.forms.fm.addEventListener("focus", function (evt) {
  t.step(function () {
    var testEle = document.getElementById("test");
    assert_equals(testEle.tabIndex, 0, "The tabIndex attribute of the input element should be 0.");
    assert_equals(evt.target, testEle, "The input element must be focused.");
    assert_equals(document.activeElement, testEle, "The input element must be activated.");
  });
  t.done();
}, true);

document.addEventListener("keydown", function (evt) {
  t.step(function () {
    assert_equals(evt.keyCode, 9, "Please press 'Tab' key.");
  });
}, true);

t.step(function () {
  // TAB = '\ue004'
  test_driver.send_keys(document.body, "\ue004");
});

</script>
