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