| OLD | NEW |
| 1 description('Spelling markers should remain while merging two lines.'); |
| 1 | 2 |
| 2 description('For Bug 41423: Spelling marker should remain after hitting a backsp
ace key.'); | 3 jsTestIsAsync = true; |
| 4 |
| 5 if (window.internals) { |
| 6 internals.settings.setUnifiedTextCheckerEnabled(true); |
| 7 internals.settings.setAsynchronousSpellCheckingEnabled(true); |
| 8 } |
| 3 | 9 |
| 4 var testRoot = document.createElement("div"); | 10 var testRoot = document.createElement("div"); |
| 5 document.body.insertBefore(testRoot, document.body.firstChild); | 11 document.body.insertBefore(testRoot, document.body.firstChild); |
| 6 | 12 |
| 7 function setup(targetName) | 13 function setup(targetName) |
| 8 { | 14 { |
| 9 testRoot.innerHTML = "<div id='" + targetName + "' contentEditable><div>OK</
div><div>OK zz OK</div></div>"; | 15 var div = document.createElement("div"); |
| 10 document.getElementById(targetName).focus(); | 16 div.id = targetName; |
| 17 div.contentEditable = true; |
| 18 div.innerHTML = "<div>OK</div><div>OK zz OK</div>"; |
| 19 testRoot.appendChild(div); |
| 20 |
| 21 div.focus(); |
| 11 return document.getSelection(); | 22 return document.getSelection(); |
| 12 } | 23 } |
| 13 | 24 |
| 14 function firstLineText() | 25 function firstLineText(targetName) |
| 15 { | 26 { |
| 16 return testRoot.firstChild.firstChild.innerText.trim(); | 27 var div = document.getElementById(targetName); |
| 28 return div.firstChild.innerText.trim(); |
| 17 } | 29 } |
| 18 | 30 |
| 19 function testWithDelete() | 31 function testTwoLinesMisspellings() |
| 20 { | 32 { |
| 21 window.sel = setup("target1"); | 33 window.sel = setup("two-lines"); // ^OK |
| 22 | 34 |
| 23 sel.modify("move", "forward", "line"); | 35 sel.modify("move", "forward", "line"); // ^OK zz OK |
| 24 for (var i = 0; i < 3; i++) // 3 for ["OK, "zz", "OK"].length | 36 for (var i = 0; i < 3; i++) |
| 25 sel.modify("move", "forward", "word"); | 37 sel.modify("move", "forward", "word"); |
| 26 | 38 |
| 27 shouldBe("firstLineText()", "'OK'"); | 39 shouldBeEqualToString("firstLineText('two-lines')", "OK"); |
| 28 shouldBe("sel.anchorNode.data", "'OK zz OK'"); | 40 shouldBeEqualToString("sel.anchorNode.data", "OK zz OK"); |
| 29 shouldBeTrue("internals.hasSpellingMarker(document, 3, 2)"); | 41 if (window.internals) |
| 30 | 42 shouldBecomeEqual("internals.hasSpellingMarker(document, 3, 2)", "true",
done); |
| 31 sel.modify("move", "left", "lineboundary"); | 43 else |
| 32 document.execCommand("Delete", false); | 44 done(); |
| 33 sel.modify("move", "right", "line"); // Moves to the line ending to focus th
e "OK zz OK" text. | |
| 34 | |
| 35 shouldBe("sel.anchorNode.data", "'OKOK zz OK'"); | |
| 36 shouldBe("firstLineText()", "'OKOK zz OK'"); | |
| 37 shouldBeTrue("internals.hasSpellingMarker(document, 5, 2)"); | |
| 38 } | 45 } |
| 39 | 46 |
| 40 function testWithForwardDelete() | 47 function testMisspellingsAfterLineMergeUsingDelete() |
| 41 { | 48 { |
| 42 window.sel = setup("target1"); | 49 window.sel = setup("merged-lines-delete-command"); // ^OK |
| 43 | 50 |
| 44 sel.modify("move", "forward", "line"); | 51 sel.modify("move", "forward", "line"); // ^OK zz OK |
| 45 for (var i = 0; i < 3; i++) // 3 for ["OK, "zz", "OK"].length | 52 document.execCommand("Delete", false); // OK^OK zz OK |
| 46 sel.modify("move", "forward", "word"); | 53 sel.modify("move", "right", "line"); // OKOK zz OK^ |
| 47 | 54 |
| 48 shouldBe("firstLineText()", "'OK'"); | 55 shouldBeEqualToString("firstLineText('merged-lines-delete-command')", "OKOK
zz OK"); |
| 49 shouldBe("sel.anchorNode.data", "'OK zz OK'"); | 56 shouldBeEqualToString("sel.anchorNode.data", "OKOK zz OK"); |
| 50 shouldBeTrue("internals.hasSpellingMarker(document, 3, 2)"); | 57 if (window.internals) |
| 51 | 58 shouldBecomeEqual("internals.hasSpellingMarker(document, 5, 2)", "true",
done); |
| 52 sel.modify("move", "left", "line"); | 59 else |
| 53 document.execCommand("ForwardDelete", false); | 60 done(); |
| 54 sel.modify("move", "right", "line"); // Moves to the line ending to focus th
e "OK zz OK" text. | |
| 55 | |
| 56 shouldBe("firstLineText()", "'OKOK zz OK'"); | |
| 57 shouldBe("sel.anchorNode.data", "'OKOK zz OK'"); | |
| 58 shouldBeTrue("internals.hasSpellingMarker(document, 5, 2)"); | |
| 59 } | 61 } |
| 60 | 62 |
| 61 testWithDelete(); | 63 function testMisspellingsAfterLineMergeUsingForwardDelete() |
| 62 testWithForwardDelete(); | 64 { |
| 63 testRoot.style.display = "none"; | 65 window.sel = setup("merged-lines-forward-delete-command"); // ^OK |
| 66 |
| 67 sel.modify("move", "forward", "character"); // O^K |
| 68 sel.modify("move", "forward", "character"); // OK^ |
| 69 document.execCommand("ForwardDelete", false); // OK^OK zz OK |
| 70 sel.modify("move", "right", "line"); // OKOK zz OK^ |
| 71 |
| 72 shouldBeEqualToString("firstLineText('merged-lines-forward-delete-command')"
, "OKOK zz OK"); |
| 73 shouldBeEqualToString("sel.anchorNode.data", "OKOK zz OK"); |
| 74 if (window.internals) |
| 75 shouldBecomeEqual("internals.hasSpellingMarker(document, 5, 2)", "true",
done); |
| 76 else |
| 77 done(); |
| 78 } |
| 79 |
| 80 var tests = [ |
| 81 function() { testTwoLinesMisspellings(); }, |
| 82 function() { testMisspellingsAfterLineMergeUsingDelete(); }, |
| 83 function() { testMisspellingsAfterLineMergeUsingForwardDelete(); } |
| 84 ]; |
| 85 |
| 86 function done() |
| 87 { |
| 88 var next = tests.shift(); |
| 89 if (next) |
| 90 return setTimeout(next, 0); |
| 91 |
| 92 if (window.internals) |
| 93 testRoot.style.display = "none"; |
| 94 |
| 95 finishJSTest(); |
| 96 } |
| 97 done(); |
| 64 | 98 |
| 65 var successfullyParsed = true; | 99 var successfullyParsed = true; |
| OLD | NEW |