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

<div id="myContainer" tabindex="-1">
  <a href="#">Link</a>
  <button>Button</button>
  <input type="text">
  <input type="checkbox">
  <input type="radio">
  <input type="submit">
  <select><option>1<option>2</select>
  <span tabindex="0" role="button">ARIA button</span>
  <span tabindex="0" role="link">ARIA link</span>
</div>

<canvas id="myCanvas" width="300" height="300" tabindex="-1">
  <a href="#">Link</a>
  <button>Button</button>
  <input type="text">
  <input type="checkbox">
  <input type="radio">
  <input type="submit">
  <select><option>1<option>2</select>
  <span tabindex="0" role="button">ARIA button</span>
  <span tabindex="0" role="link">ARIA link</span>
</canvas>

<div id="console"></div>
<script>
description("This test makes sure that AccessibilityNodeObjects are created for elements in a canvas subtree.");

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

    function appendFocusableDescendants(axObject, axFocusableList) {
        for (var i = 0; i < axObject.childrenCount; i++) {
            var axChild = axObject.childAtIndex(i);
            if (axChild.isFocusable)
                axFocusableList.push(axChild);
            appendFocusableDescendants(axChild, axFocusableList);
        }
    }

    var container = document.getElementById("myContainer");
    container.focus();
    var axContainer = accessibilityController.focusedElement;

    var canvas = document.getElementById("myCanvas");
    canvas.focus();
    var axCanvas = accessibilityController.focusedElement;

    var axRenderObjects = [];
    var axNodeObjects = [];

    appendFocusableDescendants(axContainer, axRenderObjects);
    appendFocusableDescendants(axCanvas, axNodeObjects);

    shouldBe("axRenderObjects.length", "axNodeObjects.length");

    for (var i = 0; i < axRenderObjects.length; i++) {
        var axRenderObject = axRenderObjects[i];
        var axNodeObject = axNodeObjects[i];
        shouldBe("i == " + i + "; axRenderObject.role == axNodeObject.role", "true");
    }
}

</script>

<script src="../resources/js-test-post.js"></script>
</body>
</html>
