Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(267)

Side by Side Diff: pkg/analysis_server/test/src/utilities/change_builder_dart_test.dart

Issue 2551023005: Prepare for decoupling analyzer ASTs from element model. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698