Bug 470455 - test_database_sync_embed_visits.js leaks, r=sdwilsh
[wine-gecko.git] / layout / generic / test / test_backspace_delete.html
blobef2a9c3d8c39aa1a6efd9e6745cb1a0f7672255d
1 <!DOCTYPE HTML>
2 <html>
3 <head>
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" />
10 </head>
11 <body>
12 <p id="display"></p>
13 <div id="content" style="display: block">
14 <div contentEditable id="editor"></div>
15 </div>
16 <p id="catch">Catch-all
17 <pre id="test">
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
25 setTimeout(test, 0);
27 var eatSpace;
29 function getPrefs() {
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);
38 eatSpace = newValue;
41 function restoreEatSpace() {
42 try {
43 getPrefs().clearUserPref("eat_space_to_next_word");
44 } catch(ex) {}
47 function test() {
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
135 setEatSpace(true);
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");
144 setEatSpace(false);
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 &nbsp;, 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, "");
157 restoreEatSpace();
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שלום");
172 SimpleTest.finish();
176 </script>
177 </pre>
178 </body>
179 </html>