<!DOCTYPE HTML>
<html>
<body>
<script src="../resources/js-test.js"></script>

<div id="wrapper">
  <a id="link" href="#">Link</a>
  <button id="button">Button</button>
  <button id="labeled-button" aria-label="Label">Button</button>
  <button id="button-with-title" title="Title">Button</button>
  <div id="switch" role="switch">Switch</div>
  <details><summary id="disclosure-triangle">Summary</summary>Details</details>
  <input id="text" type="text" value="Value">
  <input id="search-box" role="searchbox" type="text" value="Value">
  <input id="checkbox" type="checkbox" checked>
  <input id="number" type="number" value="23">
  <input id="radio" type="radio" checked>
  <input id="slider" type="range" min="" max="0" value="5">
  <input id="submit" type="submit">
  <input id="combobox" role="combobox" type="text" value="Value">
  <select id="listbox-single"><option><option selected>2</select>
  <select multiple id="listbox-multiple"><option><option selected>2</select>
  <textarea id="textarea">Textarea</textarea>
  <div id="content-editable" contenteditable="true">Content editable</div>
  <div id="focusable" tabindex="0">Focusable</div>
  <h5 id="heading" tabindex="0">Heading</h5>
  <div id="aria-button" tabindex="0" role="button">ARIA button</div>
  <div id="aria-link" tabindex="0" role="link">ARIA link</div>
  <div id="div">Div</div>
  <div id="onclick" onclick="foo()">Onclick</div>
  <div id="keydown-listener">Key down listener</div>
  <div id="click-listener">Click listener</div>
  <div id="mousedown-listener">Mouse down listener</div>
  <div id="ancestor-with-click-listener">
    <div id="click-listener-on-ancestor">Click listener on ancestor</div>
  </div>
  <div>
    <a id="empty-anchor" tabindex=0>Empty anchor</a>
    <a id="href-anchor" href="#">Anchor with href</a>
    <a id="onclick-anchor" onclick="foo()">Anchor with onclick</a>
    <a id="click-listener-anchor">Anchor with click listener</a>
  </div>
  <script>
    document.getElementById('keydown-listener').addEventListener('keydown', function() {}, false);
    document.getElementById('click-listener').addEventListener('click', function() {}, false);
    document.getElementById('mousedown-listener').addEventListener('mousedown', function() {}, false);
    document.getElementById('ancestor-with-click-listener').addEventListener('click', function() {}, false);
    document.getElementById('click-listener-anchor').addEventListener('click', function() {}, false);
  </script>
</div>

<div id="console"></div>
<script>
description("This tests the clickable property of various elements, and tests that a role of an anchor element changes to link when it has a click listener.");

if (window.testRunner && window.accessibilityController) {
    testRunner.dumpAsText();

    function isAXElementClickable(id) {
        return accessibilityController.accessibleElementById(id).isClickable;
    }

    function axRole(id) {
        return accessibilityController.accessibleElementById(id).role;
    }

    shouldBe("isAXElementClickable('link')", "true");
    shouldBe("isAXElementClickable('button')", "true");
    shouldBe("isAXElementClickable('labeled-button')", "true");
    shouldBe("isAXElementClickable('button-with-title')", "true");
    shouldBe("isAXElementClickable('switch')", "true");
    shouldBe("isAXElementClickable('disclosure-triangle')", "true");
    shouldBe("isAXElementClickable('text')", "true");
    shouldBe("isAXElementClickable('search-box')", "true");
    shouldBe("isAXElementClickable('checkbox')", "true");
    shouldBe("isAXElementClickable('number')", "true");
    shouldBe("isAXElementClickable('radio')", "true");
    shouldBe("isAXElementClickable('slider')", "false");
    shouldBe("isAXElementClickable('submit')", "true");
    shouldBe("isAXElementClickable('combobox')", "true");
    shouldBe("isAXElementClickable('listbox-single')", "true");
    shouldBe("isAXElementClickable('listbox-multiple')", "true");
    shouldBe("isAXElementClickable('textarea')", "true");
    shouldBe("isAXElementClickable('content-editable')", "true");
    shouldBe("isAXElementClickable('focusable')", "false");
    shouldBe("isAXElementClickable('heading')", "false");
    shouldBe("isAXElementClickable('aria-button')", "true");
    shouldBe("isAXElementClickable('aria-link')", "true");
    shouldBe("isAXElementClickable('div')", "false");
    shouldBe("isAXElementClickable('onclick')", "true");
    shouldBe("isAXElementClickable('keydown-listener')", "false");
    shouldBe("isAXElementClickable('click-listener')", "true");
    shouldBe("isAXElementClickable('mousedown-listener')", "true");
    shouldBe("isAXElementClickable('click-listener-on-ancestor')", "false");

    shouldBe("axRole('ancestor-with-click-listener')", "'AXRole: AXGenericContainer'");
    shouldBe("axRole('empty-anchor')", "'AXRole: AXAnchor'");
    shouldBe("axRole('href-anchor')", "'AXRole: AXLink'");
    shouldBe("axRole('onclick-anchor')", "'AXRole: AXLink'");
    shouldBe("axRole('click-listener-anchor')", "'AXRole: AXLink'");

    document.getElementById("wrapper").hidden = true;
}

</script>

</body>
</html>
