4 <title>Test BackSpace/Delete Keys
</title>
5 <meta http-equiv=
"Content-type" content=
"text/html; charset=utf-8" />
6 <script type=
"text/javascript" src=
"/MochiKit/MochiKit.js"></script>
7 <script type=
"text/javascript" src=
"/tests/SimpleTest/SimpleTest.js"></script>
8 <script type=
"application/javascript" src=
"/tests/SimpleTest/EventUtils.js"></script>
9 <link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css" />
13 <div id=
"content" style=
"display: block">
14 <div contentEditable
id=
"editor"></div>
16 <p id=
"catch">Catch-all
18 <script class=
"testbody" type=
"text/javascript;version=1.7">
20 /** Test for Bug
157546,
417745 **/
22 SimpleTest.waitForExplicitFinish();
24 // This seems to be necessary because the selection is not set up properly otherwise
30 const prefSvcContractID =
"@mozilla.org/preferences-service;1";
31 const prefSvcIID = Components.interfaces.nsIPrefService;
32 return Components.classes[prefSvcContractID].getService(prefSvcIID)
33 .getBranch(
"layout.word_select.");
36 function setEatSpace(newValue) {
37 getPrefs().setBoolPref(
"eat_space_to_next_word", newValue);
41 function restoreEatSpace() {
43 getPrefs().clearUserPref(
"eat_space_to_next_word");
48 netscape.security.PrivilegeManager.enablePrivilege(
"UniversalXPConnect");
50 var wordSelModifiers =
51 (navigator.platform.indexOf(
"Mac")
>=
0) ?
52 {shiftKey:true, altKey:true} : {shiftKey:true, ctrlKey:true};
53 var sel = window.getSelection();
54 var editor = document.getElementById(
"editor");
56 function testRight(node, offset) {
57 synthesizeKey(
"VK_RIGHT", {});
58 is(sel.anchorNode, node,
"Right movement broken in \"" + editor.innerHTML + "\
"");
59 is(sel.anchorOffset, offset,
"Right movement broken in \"" + editor.innerHTML + "\
"");
62 function selErrString(dir) {
63 return dir +
" selection broken with eatSpace=" + eatSpace +
" in \"" + editor.innerHTML + "\
"";
66 function testWordSelRight(startNode, startOffset, endNode, endOffset) {
67 synthesizeKey(
"VK_RIGHT", wordSelModifiers);
68 var selRange = sel.getRangeAt(
0);
69 is(selRange.startContainer, startNode, selErrString(
"Word right"));
70 is(selRange.startOffset, startOffset, selErrString(
"Word right"));
71 is(selRange.endContainer, endNode, selErrString(
"Word right"));
72 is(selRange.endOffset, endOffset, selErrString(
"Word right"));
75 function testDelete(node, offset, text) {
76 synthesizeKey(
"VK_DELETE", {});
77 is(sel.anchorNode, node,
"Delete broken in \"" + editor.innerHTML + "\
"");
78 is(sel.anchorOffset, offset,
"Delete broken in \"" + editor.innerHTML + "\
"");
79 is(editor.textContent, text,
"Delete broken in \"" + editor.innerHTML + "\
"");
82 function testBackspace(node, offset, text) {
83 synthesizeKey(
"VK_BACK_SPACE", {});
84 is(sel.anchorNode, node,
"Backspace broken in \"" + editor.innerHTML + "\
"");
85 is(sel.anchorOffset, offset,
"Backspace broken in \"" + editor.innerHTML + "\
"");
86 is(editor.textContent, text,
"Backspace broken in \"" + editor.innerHTML + "\
"");
89 // Test cell-wise deletion of Delete
90 editor.innerHTML =
"สวัสดีพ่อแม่พี่น้อง";
91 sel.collapse(editor.firstChild,
0);
92 testRight(editor.firstChild,
1);
93 testDelete(editor.firstChild,
1,
"สสดีพ่อแม่พี่น้อง");
94 testRight(editor.firstChild,
2);
95 testDelete(editor.firstChild,
2,
"สสพ่อแม่พี่น้อง");
96 testRight(editor.firstChild,
4);
97 testDelete(editor.firstChild,
4,
"สสพ่แม่พี่น้อง");
98 testRight(editor.firstChild,
5);
99 testDelete(editor.firstChild,
5,
"สสพ่แพี่น้อง");
100 testRight(editor.firstChild,
8);
101 testDelete(editor.firstChild,
8,
"สสพ่แพี่อง");
102 testRight(editor.firstChild,
9);
103 testDelete(editor.firstChild,
9,
"สสพ่แพี่อ");
105 // Test character-wise deletion of Backspace
106 editor.innerHTML =
"สวัสดีพ่อแม่พี่น้อง";
107 sel.collapse(editor.firstChild,
0);
108 testRight(editor.firstChild,
1);
109 testBackspace(editor.firstChild,
0,
"วัสดีพ่อแม่พี่น้อง");
110 testRight(editor.firstChild,
2);
111 testBackspace(editor.firstChild,
1,
"วสดีพ่อแม่พี่น้อง");
112 testRight(editor.firstChild,
2);
113 testBackspace(editor.firstChild,
1,
"วดีพ่อแม่พี่น้อง");
114 testRight(editor.firstChild,
3);
115 testBackspace(editor.firstChild,
2,
"วดพ่อแม่พี่น้อง");
116 testRight(editor.firstChild,
4);
117 testBackspace(editor.firstChild,
3,
"วดพอแม่พี่น้อง");
118 testRight(editor.firstChild,
4);
119 testBackspace(editor.firstChild,
3,
"วดพแม่พี่น้อง");
120 testRight(editor.firstChild,
4);
121 testBackspace(editor.firstChild,
3,
"วดพม่พี่น้อง");
122 testRight(editor.firstChild,
5);
123 testBackspace(editor.firstChild,
4,
"วดพมพี่น้อง");
124 testRight(editor.firstChild,
7);
125 testBackspace(editor.firstChild,
6,
"วดพมพีน้อง");
126 testRight(editor.firstChild,
8);
127 testBackspace(editor.firstChild,
7,
"วดพมพีนอง");
128 testRight(editor.firstChild,
8);
129 testBackspace(editor.firstChild,
7,
"วดพมพีนง");
130 testRight(editor.firstChild,
8);
131 testBackspace(editor.firstChild,
7,
"วดพมพีน");
133 // Tests for Bug
417745
137 editor.innerHTML =
"Quick yellow fox";
138 sel.collapse(editor.firstChild,
0);
139 testWordSelRight(editor.firstChild,
0, editor.firstChild,
6);
140 testDelete(editor.firstChild,
0,
"yellow fox");
141 testWordSelRight(editor.firstChild,
0, editor.firstChild,
7);
142 testDelete(editor.firstChild,
0,
"fox");
146 editor.innerHTML =
"Quick yellow fox";
147 sel.collapse(editor.firstChild,
0);
148 testWordSelRight(editor.firstChild,
0, editor.firstChild,
5);
149 // editor converts the leading space to an
, otherwise it
150 // wouldn't show up which would confuse users
151 testDelete(editor.firstChild,
0,
"\u00A0yellow fox");
152 testWordSelRight(editor.firstChild,
0, editor.firstChild,
7);
153 testDelete(editor.firstChild,
0,
"\u00A0fox");
154 testWordSelRight(editor.firstChild,
0, editor.firstChild,
4);
155 testDelete(editor,
0,
"");
159 // Tests for Bug
419217
161 editor.innerHTML =
"foo<div>bar</div>";
162 sel.collapse(editor.firstChild,
3);
163 testDelete(editor.firstChild,
3,
"foobar");
165 // Tests for Bug
419406
167 editor.innerHTML =
"helloשלום";
168 sel.collapse(editor.firstChild,
4);
169 testRight(editor.firstChild,
5);
170 testDelete(editor.firstChild,
5,
"helloשלום");