OLD | NEW |
| (Empty) |
1 <html> | |
2 <head> | |
3 <script src="../../http/tests/inspector/inspector-test.js"></script> | |
4 <script src="editor-test.js"></script> | |
5 <script> | |
6 function test() | |
7 { | |
8 function dumpTextModel(prefix, textModel, range) | |
9 { | |
10 var text = InspectorTest.textWithSelection(textModel.text(), range); | |
11 InspectorTest.addResult(prefix + text); | |
12 } | |
13 | |
14 function typeText(textModel, startRange, text) | |
15 { | |
16 var range = startRange; | |
17 for (var i = 0; i < text.length; ++i) | |
18 range = textModel.editRange(range, text[i]).collapseToEnd(); | |
19 return range; | |
20 } | |
21 | |
22 function typeDelete(textModel, startRange, count) | |
23 { | |
24 var count = count || 1; | |
25 var range = startRange; | |
26 for (var i = 0; i < count; ++i) { | |
27 var deleteRange = range.isEmpty() ? textModel.growRangeRight(range)
: range; | |
28 range = textModel.editRange(deleteRange, "", range).collapseToEnd(); | |
29 } | |
30 return range; | |
31 } | |
32 | |
33 function typeBackspace(textModel, startRange, count) | |
34 { | |
35 var count = count || 1; | |
36 var range = startRange; | |
37 for (var i = 0; i < count; ++i) { | |
38 var backspaceRange = range.isEmpty() ? textModel.growRangeLeft(range
) : range; | |
39 range = textModel.editRange(backspaceRange, "", range).collapseToEnd
(); | |
40 } | |
41 return range; | |
42 } | |
43 | |
44 InspectorTest.runTestSuite([ | |
45 function testUndoRedoTab(next) | |
46 { | |
47 var textModel = new WebInspector.TextEditorModel(); | |
48 textModel.setText("1\n2\n3\n"); | |
49 dumpTextModel("Text before edit:\n", textModel); | |
50 var range = typeText(textModel, new WebInspector.TextRange(1, 0, 1,
0), "\t") | |
51 dumpTextModel("Text after edit:\n", textModel, range); | |
52 range = textModel.undo(); | |
53 dumpTextModel("Text after undo:\n", textModel, range); | |
54 range = textModel.redo(); | |
55 dumpTextModel("Text after redo:\n", textModel, range); | |
56 next(); | |
57 }, | |
58 | |
59 function testConsecutiveCharactersAndNewLines(next) | |
60 { | |
61 var textModel = new WebInspector.TextEditorModel(); | |
62 textModel.setText("function foo()\n{\n\n}\n"); | |
63 dumpTextModel("Text before edit:\n", textModel); | |
64 var range = typeText(textModel, new WebInspector.TextRange(2, 0, 2,
0), " bar();\n baz();\n foo();"); | |
65 dumpTextModel("Text after edit:\n", textModel, range); | |
66 range = textModel.undo(); | |
67 dumpTextModel("Text after first undo:\n", textModel, range); | |
68 range = textModel.undo(); | |
69 dumpTextModel("Text after second undo:\n", textModel, range); | |
70 range = textModel.undo(); | |
71 dumpTextModel("Text after third undo:\n", textModel, range); | |
72 range = textModel.redo(); | |
73 dumpTextModel("Text after first redo:\n", textModel, range); | |
74 range = textModel.redo(); | |
75 dumpTextModel("Text after second redo:\n", textModel, range); | |
76 range = textModel.redo(); | |
77 dumpTextModel("Text after third redo:\n", textModel, range); | |
78 next(); | |
79 }, | |
80 | |
81 function testEditRangeWithTheSameTextAsOriginal(next) | |
82 { | |
83 var textModel = new WebInspector.TextEditorModel(); | |
84 var functionText = " bar();\n baz();\n foo();"; | |
85 textModel.setText("function foo()\n{\n\n}\n"); | |
86 dumpTextModel("Text before edit:\n", textModel); | |
87 var range = typeText(textModel, new WebInspector.TextRange(2, 0, 2,
0), " bar();\n baz();\n foo();"); | |
88 dumpTextModel("Text after edit:\n", textModel, range); | |
89 textModel.editRange(new WebInspector.TextRange(3, 0, 4, 0), " baz
();\n"); | |
90 dumpTextModel("Text after paste of the same text:\n", textModel, ran
ge); | |
91 range = textModel.undo(); | |
92 dumpTextModel("Text after first undo:\n", textModel, range); | |
93 range = textModel.undo(); | |
94 dumpTextModel("Text after second undo:\n", textModel, range); | |
95 range = textModel.redo(); | |
96 dumpTextModel("Text after first redo:\n", textModel, range); | |
97 range = textModel.redo(); | |
98 dumpTextModel("Text after second redo:\n", textModel, range); | |
99 next(); | |
100 }, | |
101 | |
102 function testDelete(next) | |
103 { | |
104 var textModel = new WebInspector.TextEditorModel(); | |
105 var functionText = " bar();\n baz();\n foo();"; | |
106 textModel.setText("function foo()\n{\n\n}\n"); | |
107 dumpTextModel("Text before edit:\n", textModel); | |
108 var range = typeText(textModel, new WebInspector.TextRange(2, 0, 2,
0), " bar();\n baz();\n foo();"); | |
109 dumpTextModel("Text after edit:\n", textModel, range); | |
110 range = typeDelete(textModel, new WebInspector.TextRange(2, 0, 2, 0)
, functionText.length); | |
111 dumpTextModel("Text after deletes:\n", textModel, range); | |
112 range = textModel.undo(); | |
113 dumpTextModel("Text after first undo:\n", textModel, range); | |
114 range = textModel.undo(); | |
115 dumpTextModel("Text after second undo:\n", textModel, range); | |
116 range = textModel.redo(); | |
117 dumpTextModel("Text after first redo:\n", textModel, range); | |
118 range = textModel.redo(); | |
119 dumpTextModel("Text after second redo:\n", textModel, range); | |
120 next(); | |
121 }, | |
122 | |
123 function testBackspace(next) | |
124 { | |
125 var textModel = new WebInspector.TextEditorModel(); | |
126 var functionText = " bar();\n baz();\n foo();"; | |
127 textModel.setText("function foo()\n{\n\n}\n"); | |
128 dumpTextModel("Text before edit:\n", textModel); | |
129 var range = typeText(textModel, new WebInspector.TextRange(2, 0, 2,
0), " bar();\n baz();\n foo();"); | |
130 dumpTextModel("Text after edit:\n", textModel, range); | |
131 range = typeBackspace(textModel, range, functionText.length); | |
132 dumpTextModel("Text after backspaces:\n", textModel, range); | |
133 range = textModel.undo(); | |
134 dumpTextModel("Text after first undo:\n", textModel, range); | |
135 range = textModel.undo(); | |
136 dumpTextModel("Text after second undo:\n", textModel, range); | |
137 range = textModel.redo(); | |
138 dumpTextModel("Text after first redo:\n", textModel, range); | |
139 range = textModel.redo(); | |
140 dumpTextModel("Text after second redo:\n", textModel, range); | |
141 next(); | |
142 }, | |
143 | |
144 function testBackspaceAndDeleteInDifferentLines(next) | |
145 { | |
146 var textModel = new WebInspector.TextEditorModel(); | |
147 var functionText = " bar();\n baz();\n foo();"; | |
148 textModel.setText("function foo()\n{\n\n}\n"); | |
149 dumpTextModel("Text before edit:\n", textModel); | |
150 var range = typeText(textModel, new WebInspector.TextRange(2, 0, 2,
0), " bar();\n baz();\n foo();"); | |
151 dumpTextModel("Text after edit:\n", textModel, range); | |
152 range = typeBackspace(textModel, range); | |
153 dumpTextModel("Text after backspace:\n", textModel, range); | |
154 range = typeDelete(textModel, new WebInspector.TextRange(2, 0, 2, 0)
); | |
155 dumpTextModel("Text after delete:\n", textModel, range); | |
156 range = textModel.undo(); | |
157 dumpTextModel("Text after first undo:\n", textModel, range); | |
158 range = textModel.undo(); | |
159 dumpTextModel("Text after second undo:\n", textModel, range); | |
160 range = textModel.undo(); | |
161 dumpTextModel("Text after third undo:\n", textModel, range); | |
162 range = textModel.redo(); | |
163 dumpTextModel("Text after first redo:\n", textModel, range); | |
164 range = textModel.redo(); | |
165 dumpTextModel("Text after second redo:\n", textModel, range); | |
166 range = textModel.redo(); | |
167 dumpTextModel("Text after third redo:\n", textModel, range); | |
168 next(); | |
169 }, | |
170 | |
171 function testPasteSeveralTimes(next) | |
172 { | |
173 var textModel = new WebInspector.TextEditorModel(); | |
174 var functionText = " bar();\n baz();\n foo();"; | |
175 textModel.setText("function foo()\n{\n\n}\n"); | |
176 dumpTextModel("Text before edit:\n", textModel); | |
177 var range = typeText(textModel, new WebInspector.TextRange(2, 0, 2,
0), " bar();\n baz();\n foo();"); | |
178 dumpTextModel("Text after edit:\n", textModel, range); | |
179 range = textModel.editRange(range, "42").collapseToEnd(); | |
180 dumpTextModel("Text after first paste:\n", textModel, range); | |
181 range = textModel.editRange(range, "42").collapseToEnd(); | |
182 dumpTextModel("Text after second paste:\n", textModel, range); | |
183 range = textModel.undo(); | |
184 dumpTextModel("Text after first undo:\n", textModel, range); | |
185 range = textModel.undo(); | |
186 dumpTextModel("Text after second undo:\n", textModel, range); | |
187 range = textModel.undo(); | |
188 dumpTextModel("Text after third undo:\n", textModel, range); | |
189 range = textModel.redo(); | |
190 dumpTextModel("Text after first redo:\n", textModel, range); | |
191 range = textModel.redo(); | |
192 dumpTextModel("Text after second redo:\n", textModel, range); | |
193 range = textModel.redo(); | |
194 dumpTextModel("Text after third redo:\n", textModel, range); | |
195 next(); | |
196 }, | |
197 | |
198 function testSelectionAfterUndoRedo(next) | |
199 { | |
200 var textModel = new WebInspector.TextEditorModel(); | |
201 var functionText = " bar();\n baz();\n foo();"; | |
202 textModel.setText("function foo()\n{\n\n}\n"); | |
203 dumpTextModel("Text before edit:\n", textModel); | |
204 range = typeBackspace(textModel, new WebInspector.TextRange(2, 0, 2,
0), 1); | |
205 dumpTextModel("Text after backspace:\n", textModel, range); | |
206 range = textModel.undo(); | |
207 dumpTextModel("Text after first undo:\n", textModel, range); | |
208 range = textModel.redo(); | |
209 dumpTextModel("Text after first redo:\n", textModel, range); | |
210 range = textModel.undo(); | |
211 dumpTextModel("Text after second undo:\n", textModel, range); | |
212 range = typeBackspace(textModel, new WebInspector.TextRange(1, 1, 2,
0), 1); | |
213 dumpTextModel("Text after deleting selection:\n", textModel, range); | |
214 range = textModel.undo(); | |
215 dumpTextModel("Text after first undo:\n", textModel, range); | |
216 range = textModel.redo(); | |
217 dumpTextModel("Text after first redo:\n", textModel, range); | |
218 range = textModel.undo(); | |
219 dumpTextModel("Text after second undo:\n", textModel, range); | |
220 next(); | |
221 } | |
222 ]); | |
223 } | |
224 </script> | |
225 </head> | |
226 <body onload="runTest()"> | |
227 <p>Tests undo/redo operations in the editor model.</p> | |
228 </body> | |
229 </html> | |
OLD | NEW |