| 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 |