chromium/third_party/blink/web_tests/accessibility/canvas-accessibilitynodeobject.html

<!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) {
    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 axLayoutObjects = [];
    var axNodeObjects = [];

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

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

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

</script>

</body>
</html>