<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../fast/js/resources/js-test-pre.js"></script>
</head>
<body id="body" contenteditable>
This tests that the click point, used for opening context menus, changes based on the current selection in an editable web area.
This tests that the click point, used for opening context menus, changes based on the current selection in an editable web area.


<p id="description"></p>
<div id="console"></div>

<script>

    description("This tests that the click point, used for opening context menus, changes based on the current selection in an editable web area (by setting the selection twice and comparing the click point locations)");

    if (window.accessibilityController) {

          var body = document.getElementById("body");
          body.focus();

          x = body.offsetLeft + 10;
          y = body.offsetTop + 10;

          eventSender.mouseMoveTo(x, y);
          eventSender.mouseDown();
          eventSender.mouseUp();
          eventSender.mouseDown();
          eventSender.mouseUp();

          var clickPointX1 = accessibilityController.focusedElement.clickPointX;

          x = body.offsetLeft + 100 + 10;
          y = body.offsetTop + 10;

          eventSender.mouseMoveTo(x, y);
          eventSender.mouseDown();
          eventSender.mouseUp();
          eventSender.mouseDown();
          eventSender.mouseUp();

          var clickPointX2 = accessibilityController.focusedElement.clickPointX;
          var succeeded = clickPointX2 != clickPointX1;
          shouldBe("succeeded", "true");

    }

</script>

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