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"); |
groby-ooo-7-16
2014/03/12 16:37:36
Just out of curiosity: Why split this into "proper
grzegorz
2014/03/12 21:33:08
What I wanted to achieve here by creating separate
| |
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("target1"); // ^OK |
groby-ooo-7-16
2014/03/12 16:37:36
Nit:"Why call this "target1"? Does it make sense t
grzegorz
2014/03/12 21:33:08
Thanks. Will do that.
| |
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('target1')", "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("target2"); // ^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('target2')", "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) |
groby-ooo-7-16
2014/03/12 16:37:36
I'd prefer moving that to the top of the file, as
grzegorz
2014/03/12 21:33:08
Actually, shouldBecome* helpers produces awful out
| |
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("target3"); // ^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('target3')", "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) | |
groby-ooo-7-16
2014/03/12 16:37:36
Why would that be gated on window.internals?
tony
2014/03/12 16:42:01
It's to avoid dumping the output in the -expected.
groby-ooo-7-16
2014/03/12 16:44:30
So I take it we run these tests outside of DRT to
| |
93 testRoot.style.display = "none"; | |
94 | |
95 finishJSTest(); | |
96 } | |
97 done(); | |
64 | 98 |
65 var successfullyParsed = true; | 99 var successfullyParsed = true; |
OLD | NEW |