<html> 
<head>
<script>
if (window.layoutTestController)
     layoutTestController.dumpEditingCallbacks();
</script>


<script>

function editingTest() {
    var start = document.getElementById("start");
    
    x = start.offsetLeft + 2;
    y = start.offsetTop + 10;
    
    eventSender.mouseMoveTo(x, y);
    eventSender.mouseDown();
    eventSender.mouseUp();
    eventSender.mouseDown();
    eventSender.mouseUp();
    eventSender.mouseDown();
    
    var end = document.getElementById("end");
    
    x = end.offsetLeft + end.offsetWidth + 2;
    y = end.offsetTop + 10;
    
    eventSender.mouseMoveTo(x, y);
    eventSender.mouseUp();
}

</script>
</head>
<body>
<p>This tests modifying a selection created with a triple click.  The new selection should use paragraph granularity.</p>
<p style="color:green">This test does not run interactively.  It uses the layoutTestControllers eventSender to do mouse clicks.  To run it manually, double click on the blue 'g', then drag down to the red 'g'.  As you drag, watch the selection that is created, it should always start and end on paragraph boundaries.</p>
<div>
This is a para<span style="color:blue;" id="start">g</span>raph.<br>
Some text<br>
Some text<br>
Some text<br>
Some text<br>
This is a para<span style="color:red;" id="end">g</span>raph.
</div>
</body>
<script>
editingTest();
</script>
</html>
