<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body id="body">
<p id="par1">A paragraph with a<br />line break in the middle</p>
<p id="par2">A paragraph with a single line</p>
<p id="description"></p>
<div id="console"></div>
<script>
description("This tests the FOCUSABLE and FOCUSED states for text objects.");

if (window.testRunner && window.internals) {
  internals.settings.setCaretBrowsingEnabled(true);
  testRunner.dumpAsText();

  if (window.accessibilityController) {

    document.getElementById("body").focus();
    var webArea = accessibilityController.focusedElement;

    var axPar1 = webArea.childAtIndex(0);
    var axPar2 = webArea.childAtIndex(1);

    // Check roles and initial states
    shouldBe("axPar1.role", "'AXRole: AXParagraph'");
    shouldBe("axPar2.role", "'AXRole: AXParagraph'");
    shouldBe("axPar1.isFocusable", "true");
    shouldBe("axPar2.isFocusable", "true");
    shouldBe("axPar1.isFocused", "false");
    shouldBe("axPar2.isFocused", "false");

    // Set caret in the first line of the first paragraph
    var par1 = document.getElementById("par1");
    window.getSelection().setPosition(par1.childNodes.item(0), 10);
    shouldBe("axPar1.isFocused", "true");
    shouldBe("axPar2.isFocused", "false");

    // Move the caret down to the second line (same paragraph)
    eventSender.keyDown("downArrow");
    shouldBe("axPar1.isFocused", "true");
    shouldBe("axPar2.isFocused", "false");

    // Move the caret down and up (across different paragraphs)
    eventSender.keyDown("downArrow");
    shouldBe("axPar1.isFocused", "false");
    shouldBe("axPar2.isFocused", "true");
    eventSender.keyDown("upArrow");
    shouldBe("axPar1.isFocused", "true");
    shouldBe("axPar2.isFocused", "false");

    // Explicitly put the caret in the middle of the second paragraph
    var par2 = document.getElementById("par2");
    window.getSelection().setPosition(par2.childNodes.item(0), 10);
    shouldBe("axPar1.isFocused", "false");
    shouldBe("axPar2.isFocused", "true");
  }
}

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