OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library analysis_server.test.src.utilities.change_builder_dart_test; | 5 library analysis_server.test.src.utilities.change_builder_dart_test; |
6 | 6 |
7 import 'package:analysis_server/plugin/protocol/protocol.dart'; | 7 import 'package:analysis_server/plugin/protocol/protocol.dart'; |
8 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_co
re.dart'; | 8 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_co
re.dart'; |
9 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_da
rt.dart'; | 9 import 'package:analysis_server/src/provisional/edit/utilities/change_builder_da
rt.dart'; |
10 import 'package:analysis_server/src/utilities/change_builder_dart.dart'; | 10 import 'package:analysis_server/src/utilities/change_builder_dart.dart'; |
11 import 'package:analyzer/dart/ast/ast.dart'; | 11 import 'package:analyzer/dart/ast/ast.dart'; |
| 12 import 'package:analyzer/dart/ast/resolution_accessors.dart'; |
12 import 'package:analyzer/dart/element/element.dart'; | 13 import 'package:analyzer/dart/element/element.dart'; |
13 import 'package:analyzer/src/generated/source.dart'; | 14 import 'package:analyzer/src/generated/source.dart'; |
14 import 'package:test/test.dart'; | 15 import 'package:test/test.dart'; |
15 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 16 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
16 | 17 |
17 import '../../abstract_context.dart'; | 18 import '../../abstract_context.dart'; |
18 | 19 |
19 main() { | 20 main() { |
20 defineReflectiveSuite(() { | 21 defineReflectiveSuite(() { |
21 defineReflectiveTests(DartChangeBuilderImplTest); | 22 defineReflectiveTests(DartChangeBuilderImplTest); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 } | 56 } |
56 | 57 |
57 void test_writeClassDeclaration_interfaces() { | 58 void test_writeClassDeclaration_interfaces() { |
58 Source source = addSource('/test.dart', 'class A {}'); | 59 Source source = addSource('/test.dart', 'class A {}'); |
59 CompilationUnit unit = resolveLibraryUnit(source); | 60 CompilationUnit unit = resolveLibraryUnit(source); |
60 ClassDeclaration declaration = unit.declarations[0]; | 61 ClassDeclaration declaration = unit.declarations[0]; |
61 | 62 |
62 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 63 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
63 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 64 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
64 builder.addInsertion(0, (EditBuilder builder) { | 65 builder.addInsertion(0, (EditBuilder builder) { |
65 (builder as DartEditBuilder) | 66 (builder as DartEditBuilder).writeClassDeclaration('C', |
66 .writeClassDeclaration('C', interfaces: [declaration.element.type]); | 67 interfaces: [elementForClassDeclaration(declaration).type]); |
67 }); | 68 }); |
68 }); | 69 }); |
69 SourceEdit edit = getEdit(builder); | 70 SourceEdit edit = getEdit(builder); |
70 expect( | 71 expect( |
71 edit.replacement, equalsIgnoringWhitespace('class C implements A { }')); | 72 edit.replacement, equalsIgnoringWhitespace('class C implements A { }')); |
72 } | 73 } |
73 | 74 |
74 void test_writeClassDeclaration_isAbstract() { | 75 void test_writeClassDeclaration_isAbstract() { |
75 Source source = addSource('/test.dart', ''); | 76 Source source = addSource('/test.dart', ''); |
76 resolveLibraryUnit(source); | 77 resolveLibraryUnit(source); |
(...skipping 27 matching lines...) Expand all Loading... |
104 } | 105 } |
105 | 106 |
106 void test_writeClassDeclaration_mixins_noSuperclass() { | 107 void test_writeClassDeclaration_mixins_noSuperclass() { |
107 Source source = addSource('/test.dart', 'class A {}'); | 108 Source source = addSource('/test.dart', 'class A {}'); |
108 CompilationUnit unit = resolveLibraryUnit(source); | 109 CompilationUnit unit = resolveLibraryUnit(source); |
109 ClassDeclaration classA = unit.declarations[0]; | 110 ClassDeclaration classA = unit.declarations[0]; |
110 | 111 |
111 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 112 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
112 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 113 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
113 builder.addInsertion(0, (EditBuilder builder) { | 114 builder.addInsertion(0, (EditBuilder builder) { |
114 (builder as DartEditBuilder) | 115 (builder as DartEditBuilder).writeClassDeclaration('C', |
115 .writeClassDeclaration('C', mixins: [classA.element.type]); | 116 mixins: [elementForClassDeclaration(classA).type]); |
116 }); | 117 }); |
117 }); | 118 }); |
118 SourceEdit edit = getEdit(builder); | 119 SourceEdit edit = getEdit(builder); |
119 expect(edit.replacement, | 120 expect(edit.replacement, |
120 equalsIgnoringWhitespace('class C extends Object with A { }')); | 121 equalsIgnoringWhitespace('class C extends Object with A { }')); |
121 } | 122 } |
122 | 123 |
123 void test_writeClassDeclaration_mixins_superclass() { | 124 void test_writeClassDeclaration_mixins_superclass() { |
124 Source source = addSource('/test.dart', 'class A {} class B {}'); | 125 Source source = addSource('/test.dart', 'class A {} class B {}'); |
125 CompilationUnit unit = resolveLibraryUnit(source); | 126 CompilationUnit unit = resolveLibraryUnit(source); |
126 ClassDeclaration classA = unit.declarations[0]; | 127 ClassDeclaration classA = unit.declarations[0]; |
127 ClassDeclaration classB = unit.declarations[1]; | 128 ClassDeclaration classB = unit.declarations[1]; |
128 | 129 |
129 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 130 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
130 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 131 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
131 builder.addInsertion(0, (EditBuilder builder) { | 132 builder.addInsertion(0, (EditBuilder builder) { |
132 (builder as DartEditBuilder).writeClassDeclaration('C', | 133 (builder as DartEditBuilder).writeClassDeclaration('C', |
133 mixins: [classB.element.type], superclass: classA.element.type); | 134 mixins: [elementForClassDeclaration(classB).type], |
| 135 superclass: elementForClassDeclaration(classA).type); |
134 }); | 136 }); |
135 }); | 137 }); |
136 SourceEdit edit = getEdit(builder); | 138 SourceEdit edit = getEdit(builder); |
137 expect(edit.replacement, | 139 expect(edit.replacement, |
138 equalsIgnoringWhitespace('class C extends A with B { }')); | 140 equalsIgnoringWhitespace('class C extends A with B { }')); |
139 } | 141 } |
140 | 142 |
141 void test_writeClassDeclaration_nameGroupName() { | 143 void test_writeClassDeclaration_nameGroupName() { |
142 Source source = addSource('/test.dart', ''); | 144 Source source = addSource('/test.dart', ''); |
143 resolveLibraryUnit(source); | 145 resolveLibraryUnit(source); |
(...skipping 17 matching lines...) Expand all Loading... |
161 } | 163 } |
162 | 164 |
163 void test_writeClassDeclaration_superclass() { | 165 void test_writeClassDeclaration_superclass() { |
164 Source source = addSource('/test.dart', 'class B {}'); | 166 Source source = addSource('/test.dart', 'class B {}'); |
165 CompilationUnit unit = resolveLibraryUnit(source); | 167 CompilationUnit unit = resolveLibraryUnit(source); |
166 ClassDeclaration declaration = unit.declarations[0]; | 168 ClassDeclaration declaration = unit.declarations[0]; |
167 | 169 |
168 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 170 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
169 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 171 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
170 builder.addInsertion(0, (EditBuilder builder) { | 172 builder.addInsertion(0, (EditBuilder builder) { |
171 (builder as DartEditBuilder) | 173 (builder as DartEditBuilder).writeClassDeclaration('C', |
172 .writeClassDeclaration('C', superclass: declaration.element.type); | 174 superclass: elementForClassDeclaration(declaration).type); |
173 }); | 175 }); |
174 }); | 176 }); |
175 SourceEdit edit = getEdit(builder); | 177 SourceEdit edit = getEdit(builder); |
176 expect(edit.replacement, equalsIgnoringWhitespace('class C extends B { }')); | 178 expect(edit.replacement, equalsIgnoringWhitespace('class C extends B { }')); |
177 } | 179 } |
178 | 180 |
179 void test_writeFieldDeclaration_initializerWriter() { | 181 void test_writeFieldDeclaration_initializerWriter() { |
180 String content = 'class A {}'; | 182 String content = 'class A {}'; |
181 Source source = addSource('/test.dart', content); | 183 Source source = addSource('/test.dart', content); |
182 resolveLibraryUnit(source); | 184 resolveLibraryUnit(source); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 void test_writeFieldDeclaration_type_typeGroupName() { | 285 void test_writeFieldDeclaration_type_typeGroupName() { |
284 String content = 'class A {} class B {}'; | 286 String content = 'class A {} class B {}'; |
285 Source source = addSource('/test.dart', content); | 287 Source source = addSource('/test.dart', content); |
286 CompilationUnit unit = resolveLibraryUnit(source); | 288 CompilationUnit unit = resolveLibraryUnit(source); |
287 ClassDeclaration declaration = unit.declarations[0]; | 289 ClassDeclaration declaration = unit.declarations[0]; |
288 | 290 |
289 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 291 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
290 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 292 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
291 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 293 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
292 (builder as DartEditBuilder).writeFieldDeclaration('f', | 294 (builder as DartEditBuilder).writeFieldDeclaration('f', |
293 type: declaration.element.type, typeGroupName: 'type'); | 295 type: elementForClassDeclaration(declaration).type, |
| 296 typeGroupName: 'type'); |
294 }); | 297 }); |
295 }); | 298 }); |
296 SourceEdit edit = getEdit(builder); | 299 SourceEdit edit = getEdit(builder); |
297 expect(edit.replacement, equalsIgnoringWhitespace('A f;')); | 300 expect(edit.replacement, equalsIgnoringWhitespace('A f;')); |
298 | 301 |
299 List<LinkedEditGroup> linkedEditGroups = | 302 List<LinkedEditGroup> linkedEditGroups = |
300 builder.sourceChange.linkedEditGroups; | 303 builder.sourceChange.linkedEditGroups; |
301 expect(linkedEditGroups, hasLength(1)); | 304 expect(linkedEditGroups, hasLength(1)); |
302 LinkedEditGroup group = linkedEditGroups[0]; | 305 LinkedEditGroup group = linkedEditGroups[0]; |
303 expect(group.length, 1); | 306 expect(group.length, 1); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 void test_writeGetterDeclaration_returnType() { | 371 void test_writeGetterDeclaration_returnType() { |
369 String content = 'class A {} class B {}'; | 372 String content = 'class A {} class B {}'; |
370 Source source = addSource('/test.dart', content); | 373 Source source = addSource('/test.dart', content); |
371 CompilationUnit unit = resolveLibraryUnit(source); | 374 CompilationUnit unit = resolveLibraryUnit(source); |
372 ClassDeclaration classA = unit.declarations[0]; | 375 ClassDeclaration classA = unit.declarations[0]; |
373 | 376 |
374 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 377 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
375 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 378 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
376 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 379 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
377 (builder as DartEditBuilder).writeGetterDeclaration('g', | 380 (builder as DartEditBuilder).writeGetterDeclaration('g', |
378 returnType: classA.element.type, returnTypeGroupName: 'returnType'); | 381 returnType: elementForClassDeclaration(classA).type, |
| 382 returnTypeGroupName: 'returnType'); |
379 }); | 383 }); |
380 }); | 384 }); |
381 SourceEdit edit = getEdit(builder); | 385 SourceEdit edit = getEdit(builder); |
382 expect(edit.replacement, equalsIgnoringWhitespace('A get g => null;')); | 386 expect(edit.replacement, equalsIgnoringWhitespace('A get g => null;')); |
383 | 387 |
384 List<LinkedEditGroup> linkedEditGroups = | 388 List<LinkedEditGroup> linkedEditGroups = |
385 builder.sourceChange.linkedEditGroups; | 389 builder.sourceChange.linkedEditGroups; |
386 expect(linkedEditGroups, hasLength(1)); | 390 expect(linkedEditGroups, hasLength(1)); |
387 LinkedEditGroup group = linkedEditGroups[0]; | 391 LinkedEditGroup group = linkedEditGroups[0]; |
388 expect(group.length, 1); | 392 expect(group.length, 1); |
389 expect(group.positions, hasLength(1)); | 393 expect(group.positions, hasLength(1)); |
390 Position position = group.positions[0]; | 394 Position position = group.positions[0]; |
391 expect(position.offset, equals(20)); | 395 expect(position.offset, equals(20)); |
392 } | 396 } |
393 | 397 |
394 void test_writeOverrideOfInheritedMember() { | 398 void test_writeOverrideOfInheritedMember() { |
395 String content = ''' | 399 String content = ''' |
396 class A { | 400 class A { |
397 A add(A a) => null; | 401 A add(A a) => null; |
398 } | 402 } |
399 class B extends A { | 403 class B extends A { |
400 }'''; | 404 }'''; |
401 Source source = addSource('/test.dart', content); | 405 Source source = addSource('/test.dart', content); |
402 CompilationUnit unit = resolveLibraryUnit(source); | 406 CompilationUnit unit = resolveLibraryUnit(source); |
403 ClassDeclaration declaration = unit.declarations[0]; | 407 ClassDeclaration declaration = unit.declarations[0]; |
404 | 408 |
405 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 409 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
406 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 410 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
407 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 411 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
408 (builder as DartEditBuilder) | 412 (builder as DartEditBuilder).writeOverrideOfInheritedMember( |
409 .writeOverrideOfInheritedMember(declaration.element.methods[0]); | 413 elementForClassDeclaration(declaration).methods[0]); |
410 }); | 414 }); |
411 }); | 415 }); |
412 SourceEdit edit = getEdit(builder); | 416 SourceEdit edit = getEdit(builder); |
413 expect(edit.replacement, equalsIgnoringWhitespace(''' | 417 expect(edit.replacement, equalsIgnoringWhitespace(''' |
414 @override | 418 @override |
415 A add(A a) { | 419 A add(A a) { |
416 // TODO: implement add | 420 // TODO: implement add |
417 return null; | 421 return null; |
418 }''')); | 422 }''')); |
419 } | 423 } |
420 | 424 |
421 void test_writeParameters_named() { | 425 void test_writeParameters_named() { |
422 String content = 'f(int i, {String s}) {}'; | 426 String content = 'f(int i, {String s}) {}'; |
423 Source source = addSource('/test.dart', content); | 427 Source source = addSource('/test.dart', content); |
424 CompilationUnit unit = resolveLibraryUnit(source); | 428 CompilationUnit unit = resolveLibraryUnit(source); |
425 FunctionDeclaration f = unit.declarations[0]; | 429 FunctionDeclaration f = unit.declarations[0]; |
426 FormalParameterList parameters = f.functionExpression.parameters; | 430 FormalParameterList parameters = f.functionExpression.parameters; |
427 Iterable<ParameterElement> elements = parameters.parameters | 431 Iterable<ParameterElement> elements = |
428 .map((FormalParameter parameter) => parameter.element); | 432 parameters.parameters.map(elementForFormalParameter); |
429 | 433 |
430 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 434 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
431 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 435 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
432 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 436 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
433 (builder as DartEditBuilder).writeParameters(elements); | 437 (builder as DartEditBuilder).writeParameters(elements); |
434 }); | 438 }); |
435 }); | 439 }); |
436 SourceEdit edit = getEdit(builder); | 440 SourceEdit edit = getEdit(builder); |
437 expect(edit.replacement, equalsIgnoringWhitespace('(int i, {String s})')); | 441 expect(edit.replacement, equalsIgnoringWhitespace('(int i, {String s})')); |
438 } | 442 } |
439 | 443 |
440 void test_writeParameters_positional() { | 444 void test_writeParameters_positional() { |
441 String content = 'f(int i, [String s]) {}'; | 445 String content = 'f(int i, [String s]) {}'; |
442 Source source = addSource('/test.dart', content); | 446 Source source = addSource('/test.dart', content); |
443 CompilationUnit unit = resolveLibraryUnit(source); | 447 CompilationUnit unit = resolveLibraryUnit(source); |
444 FunctionDeclaration f = unit.declarations[0]; | 448 FunctionDeclaration f = unit.declarations[0]; |
445 FormalParameterList parameters = f.functionExpression.parameters; | 449 FormalParameterList parameters = f.functionExpression.parameters; |
446 Iterable<ParameterElement> elements = parameters.parameters | 450 Iterable<ParameterElement> elements = |
447 .map((FormalParameter parameter) => parameter.element); | 451 parameters.parameters.map(elementForFormalParameter); |
448 | 452 |
449 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 453 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
450 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 454 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
451 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 455 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
452 (builder as DartEditBuilder).writeParameters(elements); | 456 (builder as DartEditBuilder).writeParameters(elements); |
453 }); | 457 }); |
454 }); | 458 }); |
455 SourceEdit edit = getEdit(builder); | 459 SourceEdit edit = getEdit(builder); |
456 expect(edit.replacement, equalsIgnoringWhitespace('(int i, [String s])')); | 460 expect(edit.replacement, equalsIgnoringWhitespace('(int i, [String s])')); |
457 } | 461 } |
458 | 462 |
459 void test_writeParameters_required() { | 463 void test_writeParameters_required() { |
460 String content = 'f(int i, String s) {}'; | 464 String content = 'f(int i, String s) {}'; |
461 Source source = addSource('/test.dart', content); | 465 Source source = addSource('/test.dart', content); |
462 CompilationUnit unit = resolveLibraryUnit(source); | 466 CompilationUnit unit = resolveLibraryUnit(source); |
463 FunctionDeclaration f = unit.declarations[0]; | 467 FunctionDeclaration f = unit.declarations[0]; |
464 FormalParameterList parameters = f.functionExpression.parameters; | 468 FormalParameterList parameters = f.functionExpression.parameters; |
465 Iterable<ParameterElement> elements = parameters.parameters | 469 Iterable<ParameterElement> elements = |
466 .map((FormalParameter parameter) => parameter.element); | 470 parameters.parameters.map(elementForFormalParameter); |
467 | 471 |
468 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 472 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
469 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 473 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
470 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 474 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
471 (builder as DartEditBuilder).writeParameters(elements); | 475 (builder as DartEditBuilder).writeParameters(elements); |
472 }); | 476 }); |
473 }); | 477 }); |
474 SourceEdit edit = getEdit(builder); | 478 SourceEdit edit = getEdit(builder); |
475 expect(edit.replacement, equalsIgnoringWhitespace('(int i, String s)')); | 479 expect(edit.replacement, equalsIgnoringWhitespace('(int i, String s)')); |
476 } | 480 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 void test_writeParameterSource() { | 529 void test_writeParameterSource() { |
526 String content = 'class A {}'; | 530 String content = 'class A {}'; |
527 Source source = addSource('/test.dart', content); | 531 Source source = addSource('/test.dart', content); |
528 CompilationUnit unit = resolveLibraryUnit(source); | 532 CompilationUnit unit = resolveLibraryUnit(source); |
529 ClassDeclaration classA = unit.declarations[0]; | 533 ClassDeclaration classA = unit.declarations[0]; |
530 | 534 |
531 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 535 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
532 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 536 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
533 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 537 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
534 (builder as DartEditBuilder) | 538 (builder as DartEditBuilder) |
535 .writeParameterSource(classA.element.type, 'a'); | 539 .writeParameterSource(elementForClassDeclaration(classA).type, 'a'); |
536 }); | 540 }); |
537 }); | 541 }); |
538 SourceEdit edit = getEdit(builder); | 542 SourceEdit edit = getEdit(builder); |
539 expect(edit.replacement, equalsIgnoringWhitespace('A a')); | 543 expect(edit.replacement, equalsIgnoringWhitespace('A a')); |
540 } | 544 } |
541 | 545 |
542 void test_writeType_dymanic() { | 546 void test_writeType_dymanic() { |
543 String content = 'class A {}'; | 547 String content = 'class A {}'; |
544 Source source = addSource('/test.dart', content); | 548 Source source = addSource('/test.dart', content); |
545 CompilationUnit unit = resolveLibraryUnit(source); | 549 CompilationUnit unit = resolveLibraryUnit(source); |
546 | 550 |
547 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 551 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
548 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 552 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
549 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 553 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
550 (builder as DartEditBuilder) | 554 (builder as DartEditBuilder).writeType( |
551 .writeType(unit.element.context.typeProvider.dynamicType); | 555 elementForCompilationUnit(unit).context.typeProvider.dynamicType); |
552 }); | 556 }); |
553 }); | 557 }); |
554 SourceEdit edit = getEdit(builder); | 558 SourceEdit edit = getEdit(builder); |
555 expect(edit.replacement, equalsIgnoringWhitespace('')); | 559 expect(edit.replacement, equalsIgnoringWhitespace('')); |
556 } | 560 } |
557 | 561 |
558 void test_writeType_genericType() { | 562 void test_writeType_genericType() { |
559 String content = 'class A {} class B<E> {}'; | 563 String content = 'class A {} class B<E> {}'; |
560 Source source = addSource('/test.dart', content); | 564 Source source = addSource('/test.dart', content); |
561 CompilationUnit unit = resolveLibraryUnit(source); | 565 CompilationUnit unit = resolveLibraryUnit(source); |
562 ClassDeclaration classA = unit.declarations[0]; | 566 ClassDeclaration classA = unit.declarations[0]; |
563 ClassDeclaration classB = unit.declarations[1]; | 567 ClassDeclaration classB = unit.declarations[1]; |
564 | 568 |
565 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 569 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
566 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 570 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
567 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 571 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
568 (builder as DartEditBuilder) | 572 (builder as DartEditBuilder).writeType( |
569 .writeType(classB.element.type.instantiate([classA.element.type])); | 573 elementForClassDeclaration(classB) |
| 574 .type |
| 575 .instantiate([elementForClassDeclaration(classA).type])); |
570 }); | 576 }); |
571 }); | 577 }); |
572 SourceEdit edit = getEdit(builder); | 578 SourceEdit edit = getEdit(builder); |
573 expect(edit.replacement, equalsIgnoringWhitespace('B<A>')); | 579 expect(edit.replacement, equalsIgnoringWhitespace('B<A>')); |
574 } | 580 } |
575 | 581 |
576 void test_writeType_groupName() { | 582 void test_writeType_groupName() { |
577 String content = 'class A {} class B extends A {} class C extends B {}'; | 583 String content = 'class A {} class B extends A {} class C extends B {}'; |
578 Source source = addSource('/test.dart', content); | 584 Source source = addSource('/test.dart', content); |
579 CompilationUnit unit = resolveLibraryUnit(source); | 585 CompilationUnit unit = resolveLibraryUnit(source); |
580 ClassDeclaration classC = unit.declarations[2]; | 586 ClassDeclaration classC = unit.declarations[2]; |
581 | 587 |
582 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 588 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
583 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 589 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
584 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 590 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
585 (builder as DartEditBuilder) | 591 (builder as DartEditBuilder).writeType( |
586 .writeType(classC.element.type, groupName: 'type'); | 592 elementForClassDeclaration(classC).type, |
| 593 groupName: 'type'); |
587 }); | 594 }); |
588 }); | 595 }); |
589 SourceEdit edit = getEdit(builder); | 596 SourceEdit edit = getEdit(builder); |
590 expect(edit.replacement, equalsIgnoringWhitespace('C')); | 597 expect(edit.replacement, equalsIgnoringWhitespace('C')); |
591 | 598 |
592 List<LinkedEditGroup> linkedEditGroups = | 599 List<LinkedEditGroup> linkedEditGroups = |
593 builder.sourceChange.linkedEditGroups; | 600 builder.sourceChange.linkedEditGroups; |
594 expect(linkedEditGroups, hasLength(1)); | 601 expect(linkedEditGroups, hasLength(1)); |
595 LinkedEditGroup group = linkedEditGroups[0]; | 602 LinkedEditGroup group = linkedEditGroups[0]; |
596 expect(group, isNotNull); | 603 expect(group, isNotNull); |
597 } | 604 } |
598 | 605 |
599 void test_writeType_groupName_addSupertypeProposals() { | 606 void test_writeType_groupName_addSupertypeProposals() { |
600 String content = 'class A {} class B extends A {} class C extends B {}'; | 607 String content = 'class A {} class B extends A {} class C extends B {}'; |
601 Source source = addSource('/test.dart', content); | 608 Source source = addSource('/test.dart', content); |
602 CompilationUnit unit = resolveLibraryUnit(source); | 609 CompilationUnit unit = resolveLibraryUnit(source); |
603 ClassDeclaration classC = unit.declarations[2]; | 610 ClassDeclaration classC = unit.declarations[2]; |
604 | 611 |
605 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 612 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
606 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 613 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
607 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 614 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
608 (builder as DartEditBuilder).writeType(classC.element.type, | 615 (builder as DartEditBuilder).writeType( |
609 addSupertypeProposals: true, groupName: 'type'); | 616 elementForClassDeclaration(classC).type, |
| 617 addSupertypeProposals: true, |
| 618 groupName: 'type'); |
610 }); | 619 }); |
611 }); | 620 }); |
612 SourceEdit edit = getEdit(builder); | 621 SourceEdit edit = getEdit(builder); |
613 expect(edit.replacement, equalsIgnoringWhitespace('C')); | 622 expect(edit.replacement, equalsIgnoringWhitespace('C')); |
614 | 623 |
615 List<LinkedEditGroup> linkedEditGroups = | 624 List<LinkedEditGroup> linkedEditGroups = |
616 builder.sourceChange.linkedEditGroups; | 625 builder.sourceChange.linkedEditGroups; |
617 expect(linkedEditGroups, hasLength(1)); | 626 expect(linkedEditGroups, hasLength(1)); |
618 LinkedEditGroup group = linkedEditGroups[0]; | 627 LinkedEditGroup group = linkedEditGroups[0]; |
619 List<LinkedEditSuggestion> suggestions = group.suggestions; | 628 List<LinkedEditSuggestion> suggestions = group.suggestions; |
(...skipping 26 matching lines...) Expand all Loading... |
646 | 655 |
647 void test_writeType_required_dymanic() { | 656 void test_writeType_required_dymanic() { |
648 String content = 'class A {}'; | 657 String content = 'class A {}'; |
649 Source source = addSource('/test.dart', content); | 658 Source source = addSource('/test.dart', content); |
650 CompilationUnit unit = resolveLibraryUnit(source); | 659 CompilationUnit unit = resolveLibraryUnit(source); |
651 | 660 |
652 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 661 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
653 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 662 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
654 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 663 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
655 (builder as DartEditBuilder).writeType( | 664 (builder as DartEditBuilder).writeType( |
656 unit.element.context.typeProvider.dynamicType, | 665 elementForCompilationUnit(unit).context.typeProvider.dynamicType, |
657 required: true); | 666 required: true); |
658 }); | 667 }); |
659 }); | 668 }); |
660 SourceEdit edit = getEdit(builder); | 669 SourceEdit edit = getEdit(builder); |
661 expect(edit.replacement, equalsIgnoringWhitespace('var')); | 670 expect(edit.replacement, equalsIgnoringWhitespace('var')); |
662 } | 671 } |
663 | 672 |
664 void test_writeType_required_notNull() { | 673 void test_writeType_required_notNull() { |
665 String content = 'class A {}'; | 674 String content = 'class A {}'; |
666 Source source = addSource('/test.dart', content); | 675 Source source = addSource('/test.dart', content); |
667 CompilationUnit unit = resolveLibraryUnit(source); | 676 CompilationUnit unit = resolveLibraryUnit(source); |
668 ClassDeclaration classA = unit.declarations[0]; | 677 ClassDeclaration classA = unit.declarations[0]; |
669 | 678 |
670 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 679 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
671 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 680 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
672 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 681 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
673 (builder as DartEditBuilder) | 682 (builder as DartEditBuilder) |
674 .writeType(classA.element.type, required: true); | 683 .writeType(elementForClassDeclaration(classA).type, required: true); |
675 }); | 684 }); |
676 }); | 685 }); |
677 SourceEdit edit = getEdit(builder); | 686 SourceEdit edit = getEdit(builder); |
678 expect(edit.replacement, equalsIgnoringWhitespace('A')); | 687 expect(edit.replacement, equalsIgnoringWhitespace('A')); |
679 } | 688 } |
680 | 689 |
681 void test_writeType_required_null() { | 690 void test_writeType_required_null() { |
682 String content = 'class A {}'; | 691 String content = 'class A {}'; |
683 Source source = addSource('/test.dart', content); | 692 Source source = addSource('/test.dart', content); |
684 resolveLibraryUnit(source); | 693 resolveLibraryUnit(source); |
(...skipping 10 matching lines...) Expand all Loading... |
695 | 704 |
696 void test_writeType_simpleType() { | 705 void test_writeType_simpleType() { |
697 String content = 'class A {}'; | 706 String content = 'class A {}'; |
698 Source source = addSource('/test.dart', content); | 707 Source source = addSource('/test.dart', content); |
699 CompilationUnit unit = resolveLibraryUnit(source); | 708 CompilationUnit unit = resolveLibraryUnit(source); |
700 ClassDeclaration classA = unit.declarations[0]; | 709 ClassDeclaration classA = unit.declarations[0]; |
701 | 710 |
702 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 711 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
703 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 712 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
704 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 713 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
705 (builder as DartEditBuilder).writeType(classA.element.type); | 714 (builder as DartEditBuilder) |
| 715 .writeType(elementForClassDeclaration(classA).type); |
706 }); | 716 }); |
707 }); | 717 }); |
708 SourceEdit edit = getEdit(builder); | 718 SourceEdit edit = getEdit(builder); |
709 expect(edit.replacement, equalsIgnoringWhitespace('A')); | 719 expect(edit.replacement, equalsIgnoringWhitespace('A')); |
710 } | 720 } |
711 | 721 |
712 void test_writeTypes_empty() { | 722 void test_writeTypes_empty() { |
713 String content = 'class A {}'; | 723 String content = 'class A {}'; |
714 Source source = addSource('/test.dart', content); | 724 Source source = addSource('/test.dart', content); |
715 resolveLibraryUnit(source); | 725 resolveLibraryUnit(source); |
(...skipping 11 matching lines...) Expand all Loading... |
727 void test_writeTypes_noPrefix() { | 737 void test_writeTypes_noPrefix() { |
728 String content = 'class A {} class B {}'; | 738 String content = 'class A {} class B {}'; |
729 Source source = addSource('/test.dart', content); | 739 Source source = addSource('/test.dart', content); |
730 CompilationUnit unit = resolveLibraryUnit(source); | 740 CompilationUnit unit = resolveLibraryUnit(source); |
731 ClassDeclaration classA = unit.declarations[0]; | 741 ClassDeclaration classA = unit.declarations[0]; |
732 ClassDeclaration classB = unit.declarations[1]; | 742 ClassDeclaration classB = unit.declarations[1]; |
733 | 743 |
734 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 744 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
735 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 745 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
736 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 746 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
737 (builder as DartEditBuilderImpl) | 747 (builder as DartEditBuilderImpl).writeTypes([ |
738 .writeTypes([classA.element.type, classB.element.type]); | 748 elementForClassDeclaration(classA).type, |
| 749 elementForClassDeclaration(classB).type |
| 750 ]); |
739 }); | 751 }); |
740 }); | 752 }); |
741 SourceEdit edit = getEdit(builder); | 753 SourceEdit edit = getEdit(builder); |
742 expect(edit.replacement, equalsIgnoringWhitespace('A, B')); | 754 expect(edit.replacement, equalsIgnoringWhitespace('A, B')); |
743 } | 755 } |
744 | 756 |
745 void test_writeTypes_null() { | 757 void test_writeTypes_null() { |
746 String content = 'class A {}'; | 758 String content = 'class A {}'; |
747 Source source = addSource('/test.dart', content); | 759 Source source = addSource('/test.dart', content); |
748 resolveLibraryUnit(source); | 760 resolveLibraryUnit(source); |
(...skipping 11 matching lines...) Expand all Loading... |
760 void test_writeTypes_prefix() { | 772 void test_writeTypes_prefix() { |
761 String content = 'class A {} class B {}'; | 773 String content = 'class A {} class B {}'; |
762 Source source = addSource('/test.dart', content); | 774 Source source = addSource('/test.dart', content); |
763 CompilationUnit unit = resolveLibraryUnit(source); | 775 CompilationUnit unit = resolveLibraryUnit(source); |
764 ClassDeclaration classA = unit.declarations[0]; | 776 ClassDeclaration classA = unit.declarations[0]; |
765 ClassDeclaration classB = unit.declarations[1]; | 777 ClassDeclaration classB = unit.declarations[1]; |
766 | 778 |
767 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 779 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
768 builder.addFileEdit(source, 1, (FileEditBuilder builder) { | 780 builder.addFileEdit(source, 1, (FileEditBuilder builder) { |
769 builder.addInsertion(content.length - 1, (EditBuilder builder) { | 781 builder.addInsertion(content.length - 1, (EditBuilder builder) { |
770 (builder as DartEditBuilderImpl).writeTypes( | 782 (builder as DartEditBuilderImpl).writeTypes([ |
771 [classA.element.type, classB.element.type], | 783 elementForClassDeclaration(classA).type, |
772 prefix: 'implements '); | 784 elementForClassDeclaration(classB).type |
| 785 ], prefix: 'implements '); |
773 }); | 786 }); |
774 }); | 787 }); |
775 SourceEdit edit = getEdit(builder); | 788 SourceEdit edit = getEdit(builder); |
776 expect(edit.replacement, equalsIgnoringWhitespace('implements A, B')); | 789 expect(edit.replacement, equalsIgnoringWhitespace('implements A, B')); |
777 } | 790 } |
778 } | 791 } |
779 | 792 |
780 @reflectiveTest | 793 @reflectiveTest |
781 class DartFileEditBuilderImplTest extends AbstractContextTest { | 794 class DartFileEditBuilderImplTest extends AbstractContextTest { |
782 void test_createEditBuilder() { | 795 void test_createEditBuilder() { |
783 Source source = addSource('/test.dart', 'library test;'); | 796 Source source = addSource('/test.dart', 'library test;'); |
784 resolveLibraryUnit(source); | 797 resolveLibraryUnit(source); |
785 int timeStamp = 65; | 798 int timeStamp = 65; |
786 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); | 799 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(context); |
787 builder.addFileEdit(source, timeStamp, (FileEditBuilder builder) { | 800 builder.addFileEdit(source, timeStamp, (FileEditBuilder builder) { |
788 int offset = 4; | 801 int offset = 4; |
789 int length = 5; | 802 int length = 5; |
790 DartEditBuilderImpl editBuilder = (builder as DartFileEditBuilderImpl) | 803 DartEditBuilderImpl editBuilder = (builder as DartFileEditBuilderImpl) |
791 .createEditBuilder(offset, length); | 804 .createEditBuilder(offset, length); |
792 expect(editBuilder, new isInstanceOf<DartEditBuilder>()); | 805 expect(editBuilder, new isInstanceOf<DartEditBuilder>()); |
793 SourceEdit sourceEdit = editBuilder.sourceEdit; | 806 SourceEdit sourceEdit = editBuilder.sourceEdit; |
794 expect(sourceEdit.length, length); | 807 expect(sourceEdit.length, length); |
795 expect(sourceEdit.offset, offset); | 808 expect(sourceEdit.offset, offset); |
796 expect(sourceEdit.replacement, isEmpty); | 809 expect(sourceEdit.replacement, isEmpty); |
797 }); | 810 }); |
798 } | 811 } |
799 } | 812 } |
OLD | NEW |