<html>
<head>
<script>
if (window.testRunner) {
     testRunner.dumpAsText();
     internals.settings.setSmartInsertDeleteEnabled(false);
     internals.settings.setSelectTrailingWhitespaceEnabled(true);
}

function getPositionOfNode(id)
{
    var n = document.getElementById(id);
    var pos = {x: 0, y: 0};

    while (n) {
        pos.x += n.offsetLeft + n.clientLeft;
        pos.y += n.offsetTop + n.clientTop;
        n = n.offsetParent;
    }
    return pos;
}

function doubleClickPosition(pos)
{
    // Our test cases will have at most a single leading tab or four spaces,
    // followed by a word which is wider than 4 "X"s.
    // So, pos.x + CHAR_WIDTH * 4 always hits the words.
    eventSender.mouseMoveTo(pos.x + CHAR_WIDTH * 4, pos.y + LINE_HEIGHT / 2);
    eventSender.mouseDown();
    eventSender.leapForward(1);
    eventSender.mouseUp();
    eventSender.leapForward(50);
    eventSender.mouseDown();
    eventSender.leapForward(1);
    eventSender.mouseUp();
}

function defocus()
{
    doubleClickPosition({x:0, y:0});
}

function findParentDiv(spanId)
{
    var n = document.getElementById(spanId);
    while (n) {
      var parent = n.parentNode;
      if (parent && parent.tagName == "DIV")
        return parent;
      n = parent;
    }

    return null;
}

function makeParentBlockEditable(spanId)
{
    var parent = findParentDiv(spanId);
    parent.contentEditable = true;
}

function hideCaseBlockFor(spanId)
{
    var n = document.getElementById(spanId);
    while (n) {
      n = n.parentNode;
      if (n && n.className == "case") {
        n.style.display = "none";
        n.style.offsetTop;
        return;
      }
    }
}

function doTest(testId, expectedText, givenClickPosition)
{
    // Simulate a double click.
    defocus()
    var pos = givenClickPosition || getPositionOfNode(testId);
    doubleClickPosition(pos);

    // Get the text of the current selection.
    var sel = window.getSelection();
    var actualText = sel.getRangeAt(0).toString();

    if (expectedText == actualText) {
        log("Passed " + testId);
    } else {
        log("Failed " + testId);
        log("  Expected: " + expectedText);
        log("  Actual: " + actualText);
    }

    // Run the same case with contentEditable enabled.
    makeParentBlockEditable(testId);

    defocus();
    doubleClickPosition(pos);

    sel = window.getSelection();
    actualText = sel.getRangeAt(0).toString();

    if (expectedText == actualText) {
        log("Passed " + testId + " (with contentEditable)");
    } else {
        log("Failed " + testId + " (with contentEditable)");
        log("  Expected: " + expectedText);
        log("  Actual: " + actualText);
    }

    // Hide a container for the case to workaround limited window size
    hideCaseBlockFor(testId);
}

function log(msg)
{
    var l = document.getElementById('log');
    l.appendChild(document.createTextNode(msg));
    l.appendChild(document.createElement('br'));
}

function initConstants()
{
   var heightMeasure = document.getElementById("heightMeasure");
   LINE_HEIGHT = heightMeasure.offsetHeight;
   LINE_LEFT   = heightMeasure.offsetLeft + heightMeasure.clientLeft;
   CHAR_WIDTH  = heightMeasure.offsetWidth;
   heightMeasure.style.display = "none"; // hide for readable test result
}

function getPositionOfNextLineHeadOf(spanId)
{
   var pos = getPositionOfNode(spanId)
   pos.x  = LINE_LEFT;
   pos.y += LINE_HEIGHT;
   return pos;
}

function runTests()
{
    initConstants();

    if (window.testRunner) {
        doTest("totest_minimum", "select1");
        // We may have to make EditorClient::isSelectTrailingWhitespaceEnabled false on
        // DumpRenderTree to clarify cases...
        doTest("totest_before_after", "select2 ");

        doTest("totest_linebreak_out", "select3\n");
        doTest("totest_tab_out", "select4\t");
        doTest("totest_multiple_whitespaces_out", "select5 ");
        doTest("totest_linebreak_in", "select6\n");
        doTest("totest_tab_in", "select7\t");
        doTest("totest_multiple_whitespaces_in", "select8 ");

        doTest("totest_multiple_word_in_span", "select9 ");
        doTest("totest_word_before_here_in_line", "select10 ");
        doTest("totest_span_first_half", "select11 ");
        doTest("totest_span_second_half", "selectHere12 ");

        doTest("totest_linebreak_out_pre", "select1");
        doTest("totest_tab_out_pre", "select2\t");
        doTest("totest_multiple_whitespaces_out_pre", "select3    ");
        doTest("totest_linebreak_in_pre", "select4", getPositionOfNextLineHeadOf("totest_linebreak_in_pre"));
        doTest("totest_tab_in_pre", "select5\t");
        doTest("totest_multiple_whitespaces_in_pre", "select6    ");

        doTest("totest_linebreak_out_prewrap", "select1");
        doTest("totest_tab_out_prewrap", "select2\t");
        doTest("totest_multiple_whitespaces_out_prewrap", "select3    ");
        doTest("totest_linebreak_in_prewrap", "select4", getPositionOfNextLineHeadOf("totest_linebreak_in_prewrap"));
        doTest("totest_tab_in_prewrap", "select5\t", getPositionOfNextLineHeadOf("totest_tab_in_prewrap"));
        doTest("totest_multiple_whitespaces_in_prewrap", "select6    ", getPositionOfNextLineHeadOf("totest_multiple_whitespaces_in_prewrap"));

        doTest("totest_linebreak_out_preline", "select1\n");
        doTest("totest_tab_out_preline", "select2\t");
        doTest("totest_multiple_whitespaces_out_preline", "select3 ");
        doTest("totest_linebreak_in_preline", "select4\n", getPositionOfNextLineHeadOf("totest_linebreak_in_preline"));
        doTest("totest_tab_in_preline", "select5\t");
        doTest("totest_multiple_whitespaces_in_preline", "select6 ");

        doTest("totest_linebreak_out_nowrap", "select1\n");
        doTest("totest_tab_out_nowrap", "select2\t");
        doTest("totest_multiple_whitespaces_out_nowrap", "select3 ");
        doTest("totest_linebreak_in_nowrap", "select4\n");
        doTest("totest_tab_in_nowrap", "select5\t");
        doTest("totest_multiple_whitespaces_in_nowrap", "select6 ");

    }
}


</script>
</head>
<body onload="runTests()">

<p>
This tests that double-clicking a word that follows newline and span
</p>

<div class="case">
<h3>minimum case</h3>
<div style="width:100pt">
abcd efgh ijkl mnop <b id="totest_minimum">select1</b>
</div>
</div>

<div class="case">
<h3>with another word after the span</h3>
<div style="width:100pt">
abcd efgh ijkl mnop <b id="totest_before_after">select2</b> nottoselect
</div>
</div>

<div class="case">
<h3>use linebreak as word separator (outside element)</h3>
<div style="width:100pt">
abcd efgh ijkl mnop
<b id="totest_linebreak_out">select3</b>
nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (outside element)</h3>
<div style="width:100pt">
abcd efgh ijkl mnop	<b id="totest_tab_out">select4</b>	nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (outside element)</h3>
<div style="width:100pt">
abcd efgh ijkl mnop    <b id="totest_multiple_whitespaces_out">select5</b>    nottoselect
</div>
</div>

<div class="case">
<h3>use linebreak as word separator (inside element)</h3>
<div style="width:100pt">
abcd efgh ijkl mnop<b id="totest_linebreak_in">
select6
</b>nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (inside element)</h3>
<div style="width:100pt">
abcd efgh ijkl mnop<b id="totest_tab_in">	select7	</b>nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (inside element)</h3>
<div style="width:100pt">
abcd efgh ijkl mnop<b id="totest_multiple_whitespaces_in">    select8    </b>nottoselect
</div>
</div>

<div class="case">
<h3>with another word in same the span</h3>
<div style="width:100pt">
abcd efgh ijkl mnop <b id="totest_multiple_word_in_span">select9 not</b> notyet
</div>
</div>

<div class="case">
<h3>with another word before the span, in the same line</h3>
<div style="width:100pt">
abcd efgh ijkl mnop qrst <b id="totest_word_before_here_in_line">select10</b> notyet
</div>
</div>

<div class="case">
<h3>a first half of word is inside b element</h3>
<div style="width:100pt">
abcd efgh ijkl mnop qrst <b id="totest_span_first_half">sel</b>ect11 notyet
</div>
</div>

<div class="case">
<h3>a second half of word is inside b element</h3>
<!-- We choose selectHere12 instead select12 here
     because <b>ect12</b> would be too short to be clicked by doubleClickPosition(). -->
<div style="width:150pt">
abcd efgh ijkl mnop qrst uvwx yz123 sel<b id="totest_span_second_half">ectHere12</b> notyet
</div>
</div>

<h2>cases for white-space: pre</h2>
<p>
Note: Here for pre, we change width value to 200 to prevent layout change on contentEditable enabled.
</p>

<div class="case">
<h3>use linebreak as word separator (outside element, white-space:pre)</h3>
<div style="width:200pt;white-space:pre;">
abcd efgh ijkl mnop
<b id="totest_linebreak_out_pre">select1</b>
nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (outside element, white-space:pre)</h3>
<div style="width:200pt;white-space:pre;">
abcd efgh ijkl mnop	<b id="totest_tab_out_pre">select2</b>	nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (outside element, white-space:pre)</h3>
<div style="width:200pt;white-space:pre;">
abcd efgh ijkl mnop    <b id="totest_multiple_whitespaces_out_pre">select3</b>    nottoselect
</div>
</div>

<div class="case">
<h3>use linebreak as word separator (inside element, white-space:pre)</h3>
<div style="width:200pt;white-space:pre;">
abcd efgh ijkl mnop<b id="totest_linebreak_in_pre">
select4
</b>nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (inside element, white-space:pre)</h3>
<div style="width:200pt;white-space:pre;">
abcd efgh ijkl mnop<b id="totest_tab_in_pre">	select5	</b>nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (inside element, white-space:pre)</h3>
<div style="width:200pt;white-space:pre;">
abcd efgh ijkl mnop<b id="totest_multiple_whitespaces_in_pre">    select6    </b>nottoselect
</div>
</div>

<h2>cases for white-space: pre-wrap</h2>

<div class="case">
<h3>use linebreak as word separator (outside element, white-space:pre-wrap)</h3>
<div style="width:100pt;white-space:pre-wrap;">
abcd efgh ijkl mnop
<b id="totest_linebreak_out_prewrap">select1</b>
nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (outside element, white-space:pre-wrap)</h3>
<div style="width:100pt;white-space:pre-wrap;">
abcd efgh ijkl mnop	<b id="totest_tab_out_prewrap">select2</b>	nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (outside element, white-space:pre-wrap)</h3>
<div style="width:100pt;white-space:pre-wrap;">
abcd efgh ijkl mnop    <b id="totest_multiple_whitespaces_out_prewrap">select3</b>    nottoselect
</div>
</div>

<div class="case">
<h3>use linebreak as word separator (inside element, white-space:pre-wrap)</h3>
<div style="width:100pt;white-space:pre-wrap;">
abcd efgh ijkl mnop<b id="totest_linebreak_in_prewrap">
select4
</b>nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (inside element, white-space:pre-wrap)</h3>
<div style="width:100pt;white-space:pre-wrap;">
abcd efgh ijkl mnop<b id="totest_tab_in_prewrap">	select5	</b>nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (inside element, white-space:pre-wrap)</h3>
<div style="width:100pt;white-space:pre-wrap;">
abcd efgh ijkl mnop<b id="totest_multiple_whitespaces_in_prewrap">    select6    </b>nottoselect
</div>
</div>



<h2>cases for white-space: pre-line</h2>

<div class="case">
<h3>use linebreak as word separator (outside element, white-space:pre-line)</h3>
<div style="width:100pt;white-space:pre-line;">
abcd efgh ijkl mnop
<b id="totest_linebreak_out_preline">select1</b>
nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (outside element, white-space:pre-line)</h3>
<div style="width:100pt;white-space:pre-line;">
abcd efgh ijkl mnop	<b id="totest_tab_out_preline">select2</b>	nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (outside element, white-space:pre-line)</h3>
<div style="width:100pt;white-space:pre-line;">
abcd efgh ijkl mnop    <b id="totest_multiple_whitespaces_out_preline">select3</b>    nottoselect
</div>
</div>

<div class="case">
<h3>use linebreak as word separator (inside element, white-space:pre-line)</h3>
<div style="width:100pt;white-space:pre-line;">
abcd efgh ijkl mnop<b id="totest_linebreak_in_preline">
select4
</b>nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (inside element, white-space:pre-line)</h3>
<div style="width:100pt;white-space:pre-line;">
abcd efgh ijkl mnop<b id="totest_tab_in_preline">	select5	</b>nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (inside element, white-space:pre-line)</h3>
<div style="width:100pt;white-space:pre-line;">
abcd efgh ijkl mnop<b id="totest_multiple_whitespaces_in_preline">    select6    </b>nottoselect
</div>
</div>

<h2>cases for white-space: nowrap</h2>
<p>
Note: Although following cases have no line-breaks that had caused problem reported bug28036,
we add these for comprehensiveness.
</p>

<div class="case">
<h3>use linebreak as word separator (outside element, white-space:nowrap)</h3>
<div style="width:100pt;white-space:nowrap;">
abcd efgh ijkl mnop
<b id="totest_linebreak_out_nowrap">select1</b>
nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (outside element, white-space:nowrap)</h3>
<div style="width:100pt;white-space:nowrap;">
abcd efgh ijkl mnop	<b id="totest_tab_out_nowrap">select2</b>	nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (outside element, white-space:nowrap)</h3>
<div style="width:100pt;white-space:nowrap;">
abcd efgh ijkl mnop    <b id="totest_multiple_whitespaces_out_nowrap">select3</b>    nottoselect
</div>
</div>

<div class="case">
<h3>use linebreak as word separator (inside element, white-space:nowrap)</h3>
<div style="width:100pt;white-space:nowrap;">
abcd efgh ijkl mnop<b id="totest_linebreak_in_nowrap">
select4
</b>nottoselect
</div>
</div>

<div class="case">
<h3>use tab as word separator (inside element, white-space:nowrap)</h3>
<div style="width:100pt;white-space:nowrap;">
abcd efgh ijkl mnop<b id="totest_tab_in_nowrap">	select5	</b>nottoselect
</div>
</div>

<div class="case">
<h3>use multiple whitespaces as word separator (inside element, white-space:nowrap)</h3>
<div style="width:100pt;white-space:nowrap;">
abcd efgh ijkl mnop<b id="totest_multiple_whitespaces_in_nowrap">    select6    </b>nottoselect
</div>
</div>

<!--

<h2>cases for source-originated line-breaks with white-space: pre-* family</h2>

<div class="case">
<h3>white-space:pre</h3>
<div style="width:200pt;white-space:pre;background-color:lightgray;">
abcd efgh ijkl mnop
<b id="totest_sourcebreak_pre">select1</b>
nottoselect
</div>
</div>

<h3>white-space:pre-wrap</h3>
<div style="width:200pt;white-space:pre-wrap;background-color:lightgray;">
abcd efgh ijkl mnop
<b id="totest_sourcebreak_prewrap">select2</b>
nottoselect
</div>
</div>

<h3>white-space:pre-line</h3>
<div style="width:200pt;white-space:pre-line;background-color:lightgray;">
abcd efgh ijkl mnop
<b id="totest_sourcebreak_preline">select3</b>
nottoselect
</div>
</div>

-->

<div><span id="heightMeasure">x</span></div>

<pre id="log">
</pre>

</body>
</html>
