<!DOCTYPE HTML>
<html>
<body>
<script src="../resources/js-test.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>

</body>
</html>
