| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library test.services.correction.change; | |
| 6 | |
| 7 import 'package:analysis_services/constants.dart'; | |
| 8 import 'package:analysis_services/correction/change.dart'; | |
| 9 import 'package:analysis_testing/reflective_tests.dart'; | |
| 10 import 'package:analyzer/src/generated/source.dart'; | |
| 11 import 'package:unittest/unittest.dart'; | |
| 12 | |
| 13 | |
| 14 main() { | |
| 15 groupSep = ' | '; | |
| 16 runReflectiveTests(ChangeTest); | |
| 17 runReflectiveTests(EditTest); | |
| 18 runReflectiveTests(FileEditTest); | |
| 19 runReflectiveTests(LinkedEditGroupTest); | |
| 20 runReflectiveTests(LinkedEditSuggestionTest); | |
| 21 runReflectiveTests(PositionTest); | |
| 22 } | |
| 23 | |
| 24 | |
| 25 @ReflectiveTestCase() | |
| 26 class ChangeTest { | |
| 27 void test_addEdit() { | |
| 28 Change change = new Change('msg'); | |
| 29 Edit edit1 = new Edit(1, 2, 'a'); | |
| 30 Edit edit2 = new Edit(1, 2, 'b'); | |
| 31 expect(change.fileEdits, hasLength(0)); | |
| 32 change.addEdit('/a.dart', edit1); | |
| 33 expect(change.fileEdits, hasLength(1)); | |
| 34 change.addEdit('/a.dart', edit2); | |
| 35 expect(change.fileEdits, hasLength(1)); | |
| 36 { | |
| 37 FileEdit fileEdit = change.getFileEdit('/a.dart'); | |
| 38 expect(fileEdit, isNotNull); | |
| 39 expect(fileEdit.edits, unorderedEquals([edit1, edit2])); | |
| 40 } | |
| 41 } | |
| 42 | |
| 43 void test_getFileEdit() { | |
| 44 Change change = new Change('msg'); | |
| 45 FileEdit fileEdit = new FileEdit('/a.dart'); | |
| 46 change.addFileEdit(fileEdit); | |
| 47 expect(change.getFileEdit('/a.dart'), fileEdit); | |
| 48 } | |
| 49 | |
| 50 void test_getFileEdit_empty() { | |
| 51 Change change = new Change('msg'); | |
| 52 expect(change.getFileEdit('/some.dart'), isNull); | |
| 53 } | |
| 54 | |
| 55 void test_toJson() { | |
| 56 Change change = new Change('msg'); | |
| 57 change.addFileEdit(new FileEdit('/a.dart') | |
| 58 ..add(new Edit(1, 2, 'aaa')) | |
| 59 ..add(new Edit(10, 20, 'bbb'))); | |
| 60 change.addFileEdit(new FileEdit('/b.dart') | |
| 61 ..add(new Edit(21, 22, 'xxx')) | |
| 62 ..add(new Edit(210, 220, 'yyy'))); | |
| 63 { | |
| 64 var group = new LinkedEditGroup('id-a'); | |
| 65 change.addLinkedEditGroup(group | |
| 66 ..addPosition(new Position('/ga.dart', 1), 2) | |
| 67 ..addPosition(new Position('/ga.dart', 10), 2)); | |
| 68 group.addSuggestion( | |
| 69 new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'AA')); | |
| 70 group.addSuggestion( | |
| 71 new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'BB')); | |
| 72 } | |
| 73 change.addLinkedEditGroup(new LinkedEditGroup('id-b') | |
| 74 ..addPosition(new Position('/gb.dart', 10), 5) | |
| 75 ..addPosition(new Position('/gb.dart', 100), 5)); | |
| 76 change.selection = new Position('/selection.dart', 42); | |
| 77 var expectedJson = { | |
| 78 'message': 'msg', | |
| 79 'edits': [{ | |
| 80 'file': '/a.dart', | |
| 81 'edits': [{ | |
| 82 'offset': 10, | |
| 83 'length': 20, | |
| 84 'replacement': 'bbb' | |
| 85 }, { | |
| 86 'offset': 1, | |
| 87 'length': 2, | |
| 88 'replacement': 'aaa' | |
| 89 }] | |
| 90 }, { | |
| 91 'file': '/b.dart', | |
| 92 'edits': [{ | |
| 93 'offset': 210, | |
| 94 'length': 220, | |
| 95 'replacement': 'yyy' | |
| 96 }, { | |
| 97 'offset': 21, | |
| 98 'length': 22, | |
| 99 'replacement': 'xxx' | |
| 100 }] | |
| 101 }], | |
| 102 'linkedEditGroups': [{ | |
| 103 'id': 'id-a', | |
| 104 'length': 2, | |
| 105 'positions': [{ | |
| 106 'file': '/ga.dart', | |
| 107 'offset': 1 | |
| 108 }, { | |
| 109 'file': '/ga.dart', | |
| 110 'offset': 10 | |
| 111 }], | |
| 112 'suggestions': [{ | |
| 113 'kind': 'TYPE', | |
| 114 'value': 'AA' | |
| 115 }, { | |
| 116 'kind': 'TYPE', | |
| 117 'value': 'BB' | |
| 118 }] | |
| 119 }, { | |
| 120 'id': 'id-b', | |
| 121 'length': 5, | |
| 122 'positions': [{ | |
| 123 'file': '/gb.dart', | |
| 124 'offset': 10 | |
| 125 }, { | |
| 126 'file': '/gb.dart', | |
| 127 'offset': 100 | |
| 128 }], | |
| 129 'suggestions': [] | |
| 130 }], | |
| 131 'selection': { | |
| 132 'file': '/selection.dart', | |
| 133 'offset': 42 | |
| 134 } | |
| 135 }; | |
| 136 expect(change.toJson(), expectedJson); | |
| 137 // some toString() | |
| 138 change.toString(); | |
| 139 } | |
| 140 } | |
| 141 | |
| 142 | |
| 143 @ReflectiveTestCase() | |
| 144 class EditTest { | |
| 145 void test_applySequence() { | |
| 146 Edit edit1 = new Edit(5, 2, 'abc'); | |
| 147 Edit edit2 = new Edit(1, 0, '!'); | |
| 148 expect(Edit.applySequence('0123456789', [edit1, edit2]), '0!1234abc789'); | |
| 149 } | |
| 150 | |
| 151 void test_end() { | |
| 152 Edit edit = new Edit(1, 2, 'foo'); | |
| 153 expect(edit.end, 3); | |
| 154 } | |
| 155 | |
| 156 void test_eqEq() { | |
| 157 Edit a = new Edit(1, 2, 'aaa'); | |
| 158 Edit a2 = new Edit(1, 2, 'aaa'); | |
| 159 Edit b = new Edit(1, 2, 'aaa'); | |
| 160 expect(a == a, isTrue); | |
| 161 expect(a == new Edit(1, 2, 'aaa'), isTrue); | |
| 162 expect(a == this, isFalse); | |
| 163 expect(a == new Edit(1, 2, 'bbb'), isFalse); | |
| 164 expect(a == new Edit(10, 2, 'aaa'), isFalse); | |
| 165 } | |
| 166 | |
| 167 void test_new() { | |
| 168 Edit edit = new Edit(1, 2, 'foo'); | |
| 169 edit.id = 'my-id'; | |
| 170 expect(edit.offset, 1); | |
| 171 expect(edit.length, 2); | |
| 172 expect(edit.replacement, 'foo'); | |
| 173 expect( | |
| 174 edit.toString(), | |
| 175 'Edit(offset=1, length=2, replacement=:>foo<:, id=my-id)'); | |
| 176 } | |
| 177 | |
| 178 void test_new_range() { | |
| 179 SourceRange range = new SourceRange(1, 2); | |
| 180 Edit edit = new Edit.range(range, 'foo'); | |
| 181 expect(edit.offset, 1); | |
| 182 expect(edit.length, 2); | |
| 183 expect(edit.replacement, 'foo'); | |
| 184 } | |
| 185 void test_toJson() { | |
| 186 Edit edit = new Edit(1, 2, 'foo'); | |
| 187 var expectedJson = { | |
| 188 OFFSET: 1, | |
| 189 LENGTH: 2, | |
| 190 REPLACEMENT: 'foo' | |
| 191 }; | |
| 192 expect(edit.toJson(), expectedJson); | |
| 193 } | |
| 194 | |
| 195 } | |
| 196 | |
| 197 | |
| 198 @ReflectiveTestCase() | |
| 199 class FileEditTest { | |
| 200 void test_addAll() { | |
| 201 Edit edit1a = new Edit(1, 0, 'a1'); | |
| 202 Edit edit1b = new Edit(1, 0, 'a2'); | |
| 203 Edit edit10 = new Edit(10, 1, 'b'); | |
| 204 Edit edit100 = new Edit(100, 2, 'c'); | |
| 205 FileEdit fileEdit = new FileEdit('/test.dart'); | |
| 206 fileEdit.addAll([edit100, edit1a, edit10, edit1b]); | |
| 207 expect(fileEdit.edits, [edit100, edit10, edit1b, edit1a]); | |
| 208 } | |
| 209 | |
| 210 void test_add_sorts() { | |
| 211 Edit edit1a = new Edit(1, 0, 'a1'); | |
| 212 Edit edit1b = new Edit(1, 0, 'a2'); | |
| 213 Edit edit10 = new Edit(10, 1, 'b'); | |
| 214 Edit edit100 = new Edit(100, 2, 'c'); | |
| 215 FileEdit fileEdit = new FileEdit('/test.dart'); | |
| 216 fileEdit.add(edit100); | |
| 217 fileEdit.add(edit1a); | |
| 218 fileEdit.add(edit1b); | |
| 219 fileEdit.add(edit10); | |
| 220 expect(fileEdit.edits, [edit100, edit10, edit1b, edit1a]); | |
| 221 } | |
| 222 | |
| 223 void test_new() { | |
| 224 FileEdit fileEdit = new FileEdit('/test.dart'); | |
| 225 fileEdit.add(new Edit(1, 2, 'aaa')); | |
| 226 fileEdit.add(new Edit(10, 20, 'bbb')); | |
| 227 expect( | |
| 228 fileEdit.toString(), | |
| 229 'FileEdit(file=/test.dart, edits=[' | |
| 230 'Edit(offset=10, length=20, replacement=:>bbb<:), ' | |
| 231 'Edit(offset=1, length=2, replacement=:>aaa<:)])'); | |
| 232 } | |
| 233 | |
| 234 void test_toJson() { | |
| 235 FileEdit fileEdit = new FileEdit('/test.dart'); | |
| 236 fileEdit.add(new Edit(1, 2, 'aaa')); | |
| 237 fileEdit.add(new Edit(10, 20, 'bbb')); | |
| 238 var expectedJson = { | |
| 239 FILE: '/test.dart', | |
| 240 EDITS: [{ | |
| 241 OFFSET: 10, | |
| 242 LENGTH: 20, | |
| 243 REPLACEMENT: 'bbb' | |
| 244 }, { | |
| 245 OFFSET: 1, | |
| 246 LENGTH: 2, | |
| 247 REPLACEMENT: 'aaa' | |
| 248 },] | |
| 249 }; | |
| 250 expect(fileEdit.toJson(), expectedJson); | |
| 251 } | |
| 252 } | |
| 253 | |
| 254 | |
| 255 @ReflectiveTestCase() | |
| 256 class LinkedEditGroupTest { | |
| 257 void test_new() { | |
| 258 LinkedEditGroup group = new LinkedEditGroup('my-id'); | |
| 259 group.addPosition(new Position('/a.dart', 1), 2); | |
| 260 group.addPosition(new Position('/b.dart', 10), 2); | |
| 261 expect( | |
| 262 group.toString(), | |
| 263 'LinkedEditGroup(id=my-id, length=2, positions=[' | |
| 264 'Position(file=/a.dart, offset=1), ' | |
| 265 'Position(file=/b.dart, offset=10)], suggestions=[])'); | |
| 266 } | |
| 267 | |
| 268 void test_toJson() { | |
| 269 LinkedEditGroup group = new LinkedEditGroup('my-id'); | |
| 270 group.addPosition(new Position('/a.dart', 1), 2); | |
| 271 group.addPosition(new Position('/b.dart', 10), 2); | |
| 272 group.addSuggestion( | |
| 273 new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'AA')); | |
| 274 group.addSuggestion( | |
| 275 new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'BB')); | |
| 276 expect(group.toJson(), { | |
| 277 'id': 'my-id', | |
| 278 'length': 2, | |
| 279 'positions': [{ | |
| 280 'file': '/a.dart', | |
| 281 'offset': 1 | |
| 282 }, { | |
| 283 'file': '/b.dart', | |
| 284 'offset': 10 | |
| 285 }], | |
| 286 'suggestions': [{ | |
| 287 'kind': 'TYPE', | |
| 288 'value': 'AA' | |
| 289 }, { | |
| 290 'kind': 'TYPE', | |
| 291 'value': 'BB' | |
| 292 }] | |
| 293 }); | |
| 294 } | |
| 295 } | |
| 296 | |
| 297 | |
| 298 @ReflectiveTestCase() | |
| 299 class LinkedEditSuggestionTest { | |
| 300 void test_eqEq() { | |
| 301 var a = new LinkedEditSuggestion(LinkedEditSuggestionKind.METHOD, 'a'); | |
| 302 var a2 = new LinkedEditSuggestion(LinkedEditSuggestionKind.METHOD, 'a'); | |
| 303 var b = new LinkedEditSuggestion(LinkedEditSuggestionKind.TYPE, 'a'); | |
| 304 var c = new LinkedEditSuggestion(LinkedEditSuggestionKind.METHOD, 'c'); | |
| 305 expect(a == a, isTrue); | |
| 306 expect(a == a2, isTrue); | |
| 307 expect(a == this, isFalse); | |
| 308 expect(a == b, isFalse); | |
| 309 expect(a == c, isFalse); | |
| 310 } | |
| 311 } | |
| 312 | |
| 313 | |
| 314 @ReflectiveTestCase() | |
| 315 class PositionTest { | |
| 316 void test_eqEq() { | |
| 317 Position a = new Position('/a.dart', 1); | |
| 318 Position a2 = new Position('/a.dart', 1); | |
| 319 Position b = new Position('/b.dart', 1); | |
| 320 expect(a == a, isTrue); | |
| 321 expect(a == a2, isTrue); | |
| 322 expect(a == b, isFalse); | |
| 323 expect(a == this, isFalse); | |
| 324 } | |
| 325 | |
| 326 void test_hashCode() { | |
| 327 Position position = new Position('/test.dart', 1); | |
| 328 position.hashCode; | |
| 329 } | |
| 330 | |
| 331 void test_new() { | |
| 332 Position position = new Position('/test.dart', 1); | |
| 333 expect(position.file, '/test.dart'); | |
| 334 expect(position.offset, 1); | |
| 335 expect(position.toString(), 'Position(file=/test.dart, offset=1)'); | |
| 336 } | |
| 337 | |
| 338 void test_toJson() { | |
| 339 Position position = new Position('/test.dart', 1); | |
| 340 var expectedJson = { | |
| 341 FILE: '/test.dart', | |
| 342 OFFSET: 1 | |
| 343 }; | |
| 344 expect(position.toJson(), expectedJson); | |
| 345 } | |
| 346 } | |
| OLD | NEW |