<!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) {
  testRunner.overridePreference("WebKitEnableCaretBrowsing", 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>
