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

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

Issue 2962223002: Remove timeStamp from the ChangeBuilder API (Closed)
Patch Set: Created 3 years, 5 months 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
« no previous file with comments | « pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_core_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; 8 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
9 import 'package:analyzer/dart/element/element.dart'; 9 import 'package:analyzer/dart/element/element.dart';
10 import 'package:analyzer/dart/element/type.dart'; 10 import 'package:analyzer/dart/element/type.dart';
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 expect(fileEdit, isNotNull); 54 expect(fileEdit, isNotNull);
55 return fileEdit.edits; 55 return fileEdit.edits;
56 } 56 }
57 } 57 }
58 58
59 @reflectiveTest 59 @reflectiveTest
60 class DartChangeBuilderImplTest extends AbstractContextTest { 60 class DartChangeBuilderImplTest extends AbstractContextTest {
61 test_createFileEditBuilder() async { 61 test_createFileEditBuilder() async {
62 String path = provider.convertPath('/test.dart'); 62 String path = provider.convertPath('/test.dart');
63 addSource(path, 'library test;'); 63 addSource(path, 'library test;');
64 int timeStamp = 54;
65 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 64 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
66 DartFileEditBuilderImpl fileEditBuilder = 65 DartFileEditBuilderImpl fileEditBuilder =
67 await builder.createFileEditBuilder(path, timeStamp); 66 await builder.createFileEditBuilder(path);
68 expect(fileEditBuilder, new isInstanceOf<DartFileEditBuilder>()); 67 expect(fileEditBuilder, new isInstanceOf<DartFileEditBuilder>());
69 SourceFileEdit fileEdit = fileEditBuilder.fileEdit; 68 SourceFileEdit fileEdit = fileEditBuilder.fileEdit;
70 expect(fileEdit.file, path); 69 expect(fileEdit.file, path);
71 expect(fileEdit.fileStamp, timeStamp);
72 } 70 }
73 } 71 }
74 72
75 @reflectiveTest 73 @reflectiveTest
76 class DartEditBuilderImplTest extends AbstractContextTest 74 class DartEditBuilderImplTest extends AbstractContextTest
77 with BuilderTestMixin { 75 with BuilderTestMixin {
78 test_importLibraries_DP() async { 76 test_importLibraries_DP() async {
79 await _assertImportLibraries( 77 await _assertImportLibraries(
80 ''' 78 '''
81 import 'dart:aaa'; 79 import 'dart:aaa';
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 import 'aaa.dart'; 332 import 'aaa.dart';
335 '''); 333 ''');
336 } 334 }
337 335
338 test_writeClassDeclaration_interfaces() async { 336 test_writeClassDeclaration_interfaces() async {
339 String path = provider.convertPath('/test.dart'); 337 String path = provider.convertPath('/test.dart');
340 addSource(path, 'class A {}'); 338 addSource(path, 'class A {}');
341 DartType typeA = await _getType(path, 'A'); 339 DartType typeA = await _getType(path, 'A');
342 340
343 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 341 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
344 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 342 await builder.addFileEdit(path, (FileEditBuilder builder) {
345 builder.addInsertion(0, (EditBuilder builder) { 343 builder.addInsertion(0, (EditBuilder builder) {
346 (builder as DartEditBuilder) 344 (builder as DartEditBuilder)
347 .writeClassDeclaration('C', interfaces: [typeA]); 345 .writeClassDeclaration('C', interfaces: [typeA]);
348 }); 346 });
349 }); 347 });
350 SourceEdit edit = getEdit(builder); 348 SourceEdit edit = getEdit(builder);
351 expect( 349 expect(
352 edit.replacement, equalsIgnoringWhitespace('class C implements A { }')); 350 edit.replacement, equalsIgnoringWhitespace('class C implements A { }'));
353 } 351 }
354 352
355 test_writeClassDeclaration_isAbstract() async { 353 test_writeClassDeclaration_isAbstract() async {
356 String path = provider.convertPath('/test.dart'); 354 String path = provider.convertPath('/test.dart');
357 addSource(path, ''); 355 addSource(path, '');
358 356
359 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 357 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
360 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 358 await builder.addFileEdit(path, (FileEditBuilder builder) {
361 builder.addInsertion(0, (EditBuilder builder) { 359 builder.addInsertion(0, (EditBuilder builder) {
362 (builder as DartEditBuilder) 360 (builder as DartEditBuilder)
363 .writeClassDeclaration('C', isAbstract: true); 361 .writeClassDeclaration('C', isAbstract: true);
364 }); 362 });
365 }); 363 });
366 SourceEdit edit = getEdit(builder); 364 SourceEdit edit = getEdit(builder);
367 expect(edit.replacement, equalsIgnoringWhitespace('abstract class C { }')); 365 expect(edit.replacement, equalsIgnoringWhitespace('abstract class C { }'));
368 } 366 }
369 367
370 test_writeClassDeclaration_memberWriter() async { 368 test_writeClassDeclaration_memberWriter() async {
371 String path = provider.convertPath('/test.dart'); 369 String path = provider.convertPath('/test.dart');
372 addSource(path, ''); 370 addSource(path, '');
373 371
374 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 372 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
375 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 373 await builder.addFileEdit(path, (FileEditBuilder builder) {
376 builder.addInsertion(0, (EditBuilder builder) { 374 builder.addInsertion(0, (EditBuilder builder) {
377 (builder as DartEditBuilder).writeClassDeclaration('C', 375 (builder as DartEditBuilder).writeClassDeclaration('C',
378 memberWriter: () { 376 memberWriter: () {
379 builder.write('/**/'); 377 builder.write('/**/');
380 }); 378 });
381 }); 379 });
382 }); 380 });
383 SourceEdit edit = getEdit(builder); 381 SourceEdit edit = getEdit(builder);
384 expect(edit.replacement, equalsIgnoringWhitespace('class C { /**/ }')); 382 expect(edit.replacement, equalsIgnoringWhitespace('class C { /**/ }'));
385 } 383 }
386 384
387 test_writeClassDeclaration_mixins_noSuperclass() async { 385 test_writeClassDeclaration_mixins_noSuperclass() async {
388 String path = provider.convertPath('/test.dart'); 386 String path = provider.convertPath('/test.dart');
389 addSource(path, 'class A {}'); 387 addSource(path, 'class A {}');
390 DartType typeA = await _getType(path, 'A'); 388 DartType typeA = await _getType(path, 'A');
391 389
392 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 390 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
393 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 391 await builder.addFileEdit(path, (FileEditBuilder builder) {
394 builder.addInsertion(0, (EditBuilder builder) { 392 builder.addInsertion(0, (EditBuilder builder) {
395 (builder as DartEditBuilder) 393 (builder as DartEditBuilder)
396 .writeClassDeclaration('C', mixins: [typeA]); 394 .writeClassDeclaration('C', mixins: [typeA]);
397 }); 395 });
398 }); 396 });
399 SourceEdit edit = getEdit(builder); 397 SourceEdit edit = getEdit(builder);
400 expect(edit.replacement, 398 expect(edit.replacement,
401 equalsIgnoringWhitespace('class C extends Object with A { }')); 399 equalsIgnoringWhitespace('class C extends Object with A { }'));
402 } 400 }
403 401
404 test_writeClassDeclaration_mixins_superclass() async { 402 test_writeClassDeclaration_mixins_superclass() async {
405 String path = provider.convertPath('/test.dart'); 403 String path = provider.convertPath('/test.dart');
406 addSource(path, 'class A {} class B {}'); 404 addSource(path, 'class A {} class B {}');
407 DartType typeA = await _getType(path, 'A'); 405 DartType typeA = await _getType(path, 'A');
408 DartType typeB = await _getType(path, 'B'); 406 DartType typeB = await _getType(path, 'B');
409 407
410 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 408 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
411 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 409 await builder.addFileEdit(path, (FileEditBuilder builder) {
412 builder.addInsertion(0, (EditBuilder builder) { 410 builder.addInsertion(0, (EditBuilder builder) {
413 (builder as DartEditBuilder) 411 (builder as DartEditBuilder)
414 .writeClassDeclaration('C', mixins: [typeB], superclass: typeA); 412 .writeClassDeclaration('C', mixins: [typeB], superclass: typeA);
415 }); 413 });
416 }); 414 });
417 SourceEdit edit = getEdit(builder); 415 SourceEdit edit = getEdit(builder);
418 expect(edit.replacement, 416 expect(edit.replacement,
419 equalsIgnoringWhitespace('class C extends A with B { }')); 417 equalsIgnoringWhitespace('class C extends A with B { }'));
420 } 418 }
421 419
422 test_writeClassDeclaration_nameGroupName() async { 420 test_writeClassDeclaration_nameGroupName() async {
423 String path = provider.convertPath('/test.dart'); 421 String path = provider.convertPath('/test.dart');
424 addSource(path, ''); 422 addSource(path, '');
425 423
426 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 424 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
427 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 425 await builder.addFileEdit(path, (FileEditBuilder builder) {
428 builder.addInsertion(0, (EditBuilder builder) { 426 builder.addInsertion(0, (EditBuilder builder) {
429 (builder as DartEditBuilder) 427 (builder as DartEditBuilder)
430 .writeClassDeclaration('C', nameGroupName: 'name'); 428 .writeClassDeclaration('C', nameGroupName: 'name');
431 }); 429 });
432 }); 430 });
433 SourceEdit edit = getEdit(builder); 431 SourceEdit edit = getEdit(builder);
434 expect(edit.replacement, equalsIgnoringWhitespace('class C { }')); 432 expect(edit.replacement, equalsIgnoringWhitespace('class C { }'));
435 433
436 List<LinkedEditGroup> linkedEditGroups = 434 List<LinkedEditGroup> linkedEditGroups =
437 builder.sourceChange.linkedEditGroups; 435 builder.sourceChange.linkedEditGroups;
438 expect(linkedEditGroups, hasLength(1)); 436 expect(linkedEditGroups, hasLength(1));
439 LinkedEditGroup group = linkedEditGroups[0]; 437 LinkedEditGroup group = linkedEditGroups[0];
440 expect(group.length, 1); 438 expect(group.length, 1);
441 expect(group.positions, hasLength(1)); 439 expect(group.positions, hasLength(1));
442 } 440 }
443 441
444 test_writeClassDeclaration_superclass() async { 442 test_writeClassDeclaration_superclass() async {
445 String path = provider.convertPath('/test.dart'); 443 String path = provider.convertPath('/test.dart');
446 addSource(path, 'class B {}'); 444 addSource(path, 'class B {}');
447 DartType typeB = await _getType(path, 'B'); 445 DartType typeB = await _getType(path, 'B');
448 446
449 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 447 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
450 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 448 await builder.addFileEdit(path, (FileEditBuilder builder) {
451 builder.addInsertion(0, (EditBuilder builder) { 449 builder.addInsertion(0, (EditBuilder builder) {
452 (builder as DartEditBuilder).writeClassDeclaration('C', 450 (builder as DartEditBuilder).writeClassDeclaration('C',
453 superclass: typeB, superclassGroupName: 'superclass'); 451 superclass: typeB, superclassGroupName: 'superclass');
454 }); 452 });
455 }); 453 });
456 SourceEdit edit = getEdit(builder); 454 SourceEdit edit = getEdit(builder);
457 expect(edit.replacement, equalsIgnoringWhitespace('class C extends B { }')); 455 expect(edit.replacement, equalsIgnoringWhitespace('class C extends B { }'));
458 456
459 List<LinkedEditGroup> linkedEditGroups = 457 List<LinkedEditGroup> linkedEditGroups =
460 builder.sourceChange.linkedEditGroups; 458 builder.sourceChange.linkedEditGroups;
461 expect(linkedEditGroups, hasLength(1)); 459 expect(linkedEditGroups, hasLength(1));
462 LinkedEditGroup group = linkedEditGroups[0]; 460 LinkedEditGroup group = linkedEditGroups[0];
463 expect(group.length, 1); 461 expect(group.length, 1);
464 expect(group.positions, hasLength(1)); 462 expect(group.positions, hasLength(1));
465 } 463 }
466 464
467 test_writeFieldDeclaration_initializerWriter() async { 465 test_writeFieldDeclaration_initializerWriter() async {
468 String path = provider.convertPath('/test.dart'); 466 String path = provider.convertPath('/test.dart');
469 String content = 'class A {}'; 467 String content = 'class A {}';
470 addSource(path, content); 468 addSource(path, content);
471 469
472 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 470 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
473 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 471 await builder.addFileEdit(path, (FileEditBuilder builder) {
474 builder.addInsertion(content.length - 1, (EditBuilder builder) { 472 builder.addInsertion(content.length - 1, (EditBuilder builder) {
475 (builder as DartEditBuilder).writeFieldDeclaration('f', 473 (builder as DartEditBuilder).writeFieldDeclaration('f',
476 initializerWriter: () { 474 initializerWriter: () {
477 builder.write('e'); 475 builder.write('e');
478 }); 476 });
479 }); 477 });
480 }); 478 });
481 SourceEdit edit = getEdit(builder); 479 SourceEdit edit = getEdit(builder);
482 expect(edit.replacement, equalsIgnoringWhitespace('var f = e;')); 480 expect(edit.replacement, equalsIgnoringWhitespace('var f = e;'));
483 } 481 }
484 482
485 test_writeFieldDeclaration_isConst() async { 483 test_writeFieldDeclaration_isConst() async {
486 String path = provider.convertPath('/test.dart'); 484 String path = provider.convertPath('/test.dart');
487 String content = 'class A {}'; 485 String content = 'class A {}';
488 addSource(path, content); 486 addSource(path, content);
489 487
490 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 488 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
491 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 489 await builder.addFileEdit(path, (FileEditBuilder builder) {
492 builder.addInsertion(content.length - 1, (EditBuilder builder) { 490 builder.addInsertion(content.length - 1, (EditBuilder builder) {
493 (builder as DartEditBuilder).writeFieldDeclaration('f', isConst: true); 491 (builder as DartEditBuilder).writeFieldDeclaration('f', isConst: true);
494 }); 492 });
495 }); 493 });
496 SourceEdit edit = getEdit(builder); 494 SourceEdit edit = getEdit(builder);
497 expect(edit.replacement, equalsIgnoringWhitespace('const f;')); 495 expect(edit.replacement, equalsIgnoringWhitespace('const f;'));
498 } 496 }
499 497
500 test_writeFieldDeclaration_isConst_isFinal() async { 498 test_writeFieldDeclaration_isConst_isFinal() async {
501 String path = provider.convertPath('/test.dart'); 499 String path = provider.convertPath('/test.dart');
502 String content = 'class A {}'; 500 String content = 'class A {}';
503 addSource(path, content); 501 addSource(path, content);
504 502
505 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 503 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
506 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 504 await builder.addFileEdit(path, (FileEditBuilder builder) {
507 builder.addInsertion(content.length - 1, (EditBuilder builder) { 505 builder.addInsertion(content.length - 1, (EditBuilder builder) {
508 (builder as DartEditBuilder) 506 (builder as DartEditBuilder)
509 .writeFieldDeclaration('f', isConst: true, isFinal: true); 507 .writeFieldDeclaration('f', isConst: true, isFinal: true);
510 }); 508 });
511 }); 509 });
512 SourceEdit edit = getEdit(builder); 510 SourceEdit edit = getEdit(builder);
513 expect(edit.replacement, equalsIgnoringWhitespace('const f;')); 511 expect(edit.replacement, equalsIgnoringWhitespace('const f;'));
514 } 512 }
515 513
516 test_writeFieldDeclaration_isFinal() async { 514 test_writeFieldDeclaration_isFinal() async {
517 String path = provider.convertPath('/test.dart'); 515 String path = provider.convertPath('/test.dart');
518 String content = 'class A {}'; 516 String content = 'class A {}';
519 addSource(path, content); 517 addSource(path, content);
520 518
521 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 519 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
522 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 520 await builder.addFileEdit(path, (FileEditBuilder builder) {
523 builder.addInsertion(content.length - 1, (EditBuilder builder) { 521 builder.addInsertion(content.length - 1, (EditBuilder builder) {
524 (builder as DartEditBuilder).writeFieldDeclaration('f', isFinal: true); 522 (builder as DartEditBuilder).writeFieldDeclaration('f', isFinal: true);
525 }); 523 });
526 }); 524 });
527 SourceEdit edit = getEdit(builder); 525 SourceEdit edit = getEdit(builder);
528 expect(edit.replacement, equalsIgnoringWhitespace('final f;')); 526 expect(edit.replacement, equalsIgnoringWhitespace('final f;'));
529 } 527 }
530 528
531 test_writeFieldDeclaration_isStatic() async { 529 test_writeFieldDeclaration_isStatic() async {
532 String path = provider.convertPath('/test.dart'); 530 String path = provider.convertPath('/test.dart');
533 String content = 'class A {}'; 531 String content = 'class A {}';
534 addSource(path, content); 532 addSource(path, content);
535 533
536 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 534 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
537 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 535 await builder.addFileEdit(path, (FileEditBuilder builder) {
538 builder.addInsertion(content.length - 1, (EditBuilder builder) { 536 builder.addInsertion(content.length - 1, (EditBuilder builder) {
539 (builder as DartEditBuilder).writeFieldDeclaration('f', isStatic: true); 537 (builder as DartEditBuilder).writeFieldDeclaration('f', isStatic: true);
540 }); 538 });
541 }); 539 });
542 SourceEdit edit = getEdit(builder); 540 SourceEdit edit = getEdit(builder);
543 expect(edit.replacement, equalsIgnoringWhitespace('static var f;')); 541 expect(edit.replacement, equalsIgnoringWhitespace('static var f;'));
544 } 542 }
545 543
546 test_writeFieldDeclaration_nameGroupName() async { 544 test_writeFieldDeclaration_nameGroupName() async {
547 String path = provider.convertPath('/test.dart'); 545 String path = provider.convertPath('/test.dart');
548 String content = 'class A {}'; 546 String content = 'class A {}';
549 addSource(path, content); 547 addSource(path, content);
550 548
551 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 549 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
552 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 550 await builder.addFileEdit(path, (FileEditBuilder builder) {
553 builder.addInsertion(content.length - 1, (EditBuilder builder) { 551 builder.addInsertion(content.length - 1, (EditBuilder builder) {
554 (builder as DartEditBuilder) 552 (builder as DartEditBuilder)
555 .writeFieldDeclaration('f', nameGroupName: 'name'); 553 .writeFieldDeclaration('f', nameGroupName: 'name');
556 }); 554 });
557 }); 555 });
558 SourceEdit edit = getEdit(builder); 556 SourceEdit edit = getEdit(builder);
559 expect(edit.replacement, equalsIgnoringWhitespace('var f;')); 557 expect(edit.replacement, equalsIgnoringWhitespace('var f;'));
560 558
561 List<LinkedEditGroup> linkedEditGroups = 559 List<LinkedEditGroup> linkedEditGroups =
562 builder.sourceChange.linkedEditGroups; 560 builder.sourceChange.linkedEditGroups;
563 expect(linkedEditGroups, hasLength(1)); 561 expect(linkedEditGroups, hasLength(1));
564 LinkedEditGroup group = linkedEditGroups[0]; 562 LinkedEditGroup group = linkedEditGroups[0];
565 expect(group.length, 1); 563 expect(group.length, 1);
566 expect(group.positions, hasLength(1)); 564 expect(group.positions, hasLength(1));
567 Position position = group.positions[0]; 565 Position position = group.positions[0];
568 expect(position.offset, equals(13)); 566 expect(position.offset, equals(13));
569 } 567 }
570 568
571 test_writeFieldDeclaration_type_typeGroupName() async { 569 test_writeFieldDeclaration_type_typeGroupName() async {
572 String path = provider.convertPath('/test.dart'); 570 String path = provider.convertPath('/test.dart');
573 String content = 'class A {} class B {}'; 571 String content = 'class A {} class B {}';
574 addSource(path, content); 572 addSource(path, content);
575 DartType typeA = await _getType(path, 'A'); 573 DartType typeA = await _getType(path, 'A');
576 574
577 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 575 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
578 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 576 await builder.addFileEdit(path, (FileEditBuilder builder) {
579 builder.addInsertion(content.length - 1, (EditBuilder builder) { 577 builder.addInsertion(content.length - 1, (EditBuilder builder) {
580 (builder as DartEditBuilder) 578 (builder as DartEditBuilder)
581 .writeFieldDeclaration('f', type: typeA, typeGroupName: 'type'); 579 .writeFieldDeclaration('f', type: typeA, typeGroupName: 'type');
582 }); 580 });
583 }); 581 });
584 SourceEdit edit = getEdit(builder); 582 SourceEdit edit = getEdit(builder);
585 expect(edit.replacement, equalsIgnoringWhitespace('A f;')); 583 expect(edit.replacement, equalsIgnoringWhitespace('A f;'));
586 584
587 List<LinkedEditGroup> linkedEditGroups = 585 List<LinkedEditGroup> linkedEditGroups =
588 builder.sourceChange.linkedEditGroups; 586 builder.sourceChange.linkedEditGroups;
589 expect(linkedEditGroups, hasLength(1)); 587 expect(linkedEditGroups, hasLength(1));
590 LinkedEditGroup group = linkedEditGroups[0]; 588 LinkedEditGroup group = linkedEditGroups[0];
591 expect(group.length, 1); 589 expect(group.length, 1);
592 expect(group.positions, hasLength(1)); 590 expect(group.positions, hasLength(1));
593 Position position = group.positions[0]; 591 Position position = group.positions[0];
594 expect(position.offset, equals(20)); 592 expect(position.offset, equals(20));
595 } 593 }
596 594
597 test_writeFunctionDeclaration_noReturnType_noParams_body() async { 595 test_writeFunctionDeclaration_noReturnType_noParams_body() async {
598 String path = provider.convertPath('/test.dart'); 596 String path = provider.convertPath('/test.dart');
599 String content = ''; 597 String content = '';
600 addSource(path, content); 598 addSource(path, content);
601 599
602 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 600 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
603 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 601 await builder.addFileEdit(path, (FileEditBuilder builder) {
604 builder.addInsertion(0, (EditBuilder builder) { 602 builder.addInsertion(0, (EditBuilder builder) {
605 (builder as DartEditBuilder).writeFunctionDeclaration('fib', 603 (builder as DartEditBuilder).writeFunctionDeclaration('fib',
606 bodyWriter: () { 604 bodyWriter: () {
607 builder.write('{ ... }'); 605 builder.write('{ ... }');
608 }); 606 });
609 }); 607 });
610 }); 608 });
611 SourceEdit edit = getEdit(builder); 609 SourceEdit edit = getEdit(builder);
612 expect(edit.replacement, equalsIgnoringWhitespace('fib() { ... }')); 610 expect(edit.replacement, equalsIgnoringWhitespace('fib() { ... }'));
613 } 611 }
614 612
615 test_writeFunctionDeclaration_noReturnType_noParams_noBody() async { 613 test_writeFunctionDeclaration_noReturnType_noParams_noBody() async {
616 String path = provider.convertPath('/test.dart'); 614 String path = provider.convertPath('/test.dart');
617 String content = ''; 615 String content = '';
618 addSource(path, content); 616 addSource(path, content);
619 617
620 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 618 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
621 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 619 await builder.addFileEdit(path, (FileEditBuilder builder) {
622 builder.addInsertion(0, (EditBuilder builder) { 620 builder.addInsertion(0, (EditBuilder builder) {
623 (builder as DartEditBuilder) 621 (builder as DartEditBuilder)
624 .writeFunctionDeclaration('fib', nameGroupName: 'name'); 622 .writeFunctionDeclaration('fib', nameGroupName: 'name');
625 }); 623 });
626 }); 624 });
627 SourceEdit edit = getEdit(builder); 625 SourceEdit edit = getEdit(builder);
628 expect(edit.replacement, equalsIgnoringWhitespace('fib() {}')); 626 expect(edit.replacement, equalsIgnoringWhitespace('fib() {}'));
629 627
630 List<LinkedEditGroup> linkedEditGroups = 628 List<LinkedEditGroup> linkedEditGroups =
631 builder.sourceChange.linkedEditGroups; 629 builder.sourceChange.linkedEditGroups;
632 expect(linkedEditGroups, hasLength(1)); 630 expect(linkedEditGroups, hasLength(1));
633 LinkedEditGroup group = linkedEditGroups[0]; 631 LinkedEditGroup group = linkedEditGroups[0];
634 expect(group.length, 3); 632 expect(group.length, 3);
635 expect(group.positions, hasLength(1)); 633 expect(group.positions, hasLength(1));
636 } 634 }
637 635
638 test_writeFunctionDeclaration_noReturnType_params_noBody() async { 636 test_writeFunctionDeclaration_noReturnType_params_noBody() async {
639 String path = provider.convertPath('/test.dart'); 637 String path = provider.convertPath('/test.dart');
640 String content = ''; 638 String content = '';
641 addSource(path, content); 639 addSource(path, content);
642 640
643 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 641 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
644 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 642 await builder.addFileEdit(path, (FileEditBuilder builder) {
645 builder.addInsertion(0, (EditBuilder builder) { 643 builder.addInsertion(0, (EditBuilder builder) {
646 (builder as DartEditBuilder).writeFunctionDeclaration('fib', 644 (builder as DartEditBuilder).writeFunctionDeclaration('fib',
647 parameterWriter: () { 645 parameterWriter: () {
648 builder.write('p, q, r'); 646 builder.write('p, q, r');
649 }); 647 });
650 }); 648 });
651 }); 649 });
652 SourceEdit edit = getEdit(builder); 650 SourceEdit edit = getEdit(builder);
653 expect(edit.replacement, equalsIgnoringWhitespace('fib(p, q, r) {}')); 651 expect(edit.replacement, equalsIgnoringWhitespace('fib(p, q, r) {}'));
654 } 652 }
655 653
656 test_writeFunctionDeclaration_returnType_noParams_noBody() async { 654 test_writeFunctionDeclaration_returnType_noParams_noBody() async {
657 String path = provider.convertPath('/test.dart'); 655 String path = provider.convertPath('/test.dart');
658 String content = 'class A {}'; 656 String content = 'class A {}';
659 addSource(path, content); 657 addSource(path, content);
660 658
661 DartType typeA = await _getType(path, 'A'); 659 DartType typeA = await _getType(path, 'A');
662 660
663 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 661 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
664 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 662 await builder.addFileEdit(path, (FileEditBuilder builder) {
665 builder.addInsertion(0, (EditBuilder builder) { 663 builder.addInsertion(0, (EditBuilder builder) {
666 (builder as DartEditBuilder).writeFunctionDeclaration('fib', 664 (builder as DartEditBuilder).writeFunctionDeclaration('fib',
667 returnType: typeA, returnTypeGroupName: 'type'); 665 returnType: typeA, returnTypeGroupName: 'type');
668 }); 666 });
669 }); 667 });
670 SourceEdit edit = getEdit(builder); 668 SourceEdit edit = getEdit(builder);
671 expect(edit.replacement, equalsIgnoringWhitespace('A fib() => null;')); 669 expect(edit.replacement, equalsIgnoringWhitespace('A fib() => null;'));
672 670
673 List<LinkedEditGroup> linkedEditGroups = 671 List<LinkedEditGroup> linkedEditGroups =
674 builder.sourceChange.linkedEditGroups; 672 builder.sourceChange.linkedEditGroups;
675 expect(linkedEditGroups, hasLength(1)); 673 expect(linkedEditGroups, hasLength(1));
676 LinkedEditGroup group = linkedEditGroups[0]; 674 LinkedEditGroup group = linkedEditGroups[0];
677 expect(group.length, 1); 675 expect(group.length, 1);
678 expect(group.positions, hasLength(1)); 676 expect(group.positions, hasLength(1));
679 } 677 }
680 678
681 test_writeGetterDeclaration_bodyWriter() async { 679 test_writeGetterDeclaration_bodyWriter() async {
682 String path = provider.convertPath('/test.dart'); 680 String path = provider.convertPath('/test.dart');
683 String content = 'class A {}'; 681 String content = 'class A {}';
684 addSource(path, content); 682 addSource(path, content);
685 683
686 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 684 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
687 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 685 await builder.addFileEdit(path, (FileEditBuilder builder) {
688 builder.addInsertion(content.length - 1, (EditBuilder builder) { 686 builder.addInsertion(content.length - 1, (EditBuilder builder) {
689 (builder as DartEditBuilder).writeGetterDeclaration('g', 687 (builder as DartEditBuilder).writeGetterDeclaration('g',
690 bodyWriter: () { 688 bodyWriter: () {
691 builder.write('{}'); 689 builder.write('{}');
692 }); 690 });
693 }); 691 });
694 }); 692 });
695 SourceEdit edit = getEdit(builder); 693 SourceEdit edit = getEdit(builder);
696 expect(edit.replacement, equalsIgnoringWhitespace('get g {}')); 694 expect(edit.replacement, equalsIgnoringWhitespace('get g {}'));
697 } 695 }
698 696
699 test_writeGetterDeclaration_isStatic() async { 697 test_writeGetterDeclaration_isStatic() async {
700 String path = provider.convertPath('/test.dart'); 698 String path = provider.convertPath('/test.dart');
701 String content = 'class A {}'; 699 String content = 'class A {}';
702 addSource(path, content); 700 addSource(path, content);
703 701
704 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 702 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
705 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 703 await builder.addFileEdit(path, (FileEditBuilder builder) {
706 builder.addInsertion(content.length - 1, (EditBuilder builder) { 704 builder.addInsertion(content.length - 1, (EditBuilder builder) {
707 (builder as DartEditBuilder) 705 (builder as DartEditBuilder)
708 .writeGetterDeclaration('g', isStatic: true); 706 .writeGetterDeclaration('g', isStatic: true);
709 }); 707 });
710 }); 708 });
711 SourceEdit edit = getEdit(builder); 709 SourceEdit edit = getEdit(builder);
712 expect(edit.replacement, equalsIgnoringWhitespace('static get g => null;')); 710 expect(edit.replacement, equalsIgnoringWhitespace('static get g => null;'));
713 } 711 }
714 712
715 test_writeGetterDeclaration_nameGroupName() async { 713 test_writeGetterDeclaration_nameGroupName() async {
716 String path = provider.convertPath('/test.dart'); 714 String path = provider.convertPath('/test.dart');
717 String content = 'class A {}'; 715 String content = 'class A {}';
718 addSource(path, content); 716 addSource(path, content);
719 717
720 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 718 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
721 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 719 await builder.addFileEdit(path, (FileEditBuilder builder) {
722 builder.addInsertion(content.length - 1, (EditBuilder builder) { 720 builder.addInsertion(content.length - 1, (EditBuilder builder) {
723 (builder as DartEditBuilder) 721 (builder as DartEditBuilder)
724 .writeGetterDeclaration('g', nameGroupName: 'name'); 722 .writeGetterDeclaration('g', nameGroupName: 'name');
725 }); 723 });
726 }); 724 });
727 SourceEdit edit = getEdit(builder); 725 SourceEdit edit = getEdit(builder);
728 expect(edit.replacement, equalsIgnoringWhitespace('get g => null;')); 726 expect(edit.replacement, equalsIgnoringWhitespace('get g => null;'));
729 727
730 List<LinkedEditGroup> linkedEditGroups = 728 List<LinkedEditGroup> linkedEditGroups =
731 builder.sourceChange.linkedEditGroups; 729 builder.sourceChange.linkedEditGroups;
732 expect(linkedEditGroups, hasLength(1)); 730 expect(linkedEditGroups, hasLength(1));
733 LinkedEditGroup group = linkedEditGroups[0]; 731 LinkedEditGroup group = linkedEditGroups[0];
734 expect(group.length, 1); 732 expect(group.length, 1);
735 expect(group.positions, hasLength(1)); 733 expect(group.positions, hasLength(1));
736 Position position = group.positions[0]; 734 Position position = group.positions[0];
737 expect(position.offset, equals(13)); 735 expect(position.offset, equals(13));
738 } 736 }
739 737
740 test_writeGetterDeclaration_returnType() async { 738 test_writeGetterDeclaration_returnType() async {
741 String path = provider.convertPath('/test.dart'); 739 String path = provider.convertPath('/test.dart');
742 String content = 'class A {} class B {}'; 740 String content = 'class A {} class B {}';
743 addSource(path, content); 741 addSource(path, content);
744 DartType typeA = await _getType(path, 'A'); 742 DartType typeA = await _getType(path, 'A');
745 743
746 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 744 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
747 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 745 await builder.addFileEdit(path, (FileEditBuilder builder) {
748 builder.addInsertion(content.length - 1, (EditBuilder builder) { 746 builder.addInsertion(content.length - 1, (EditBuilder builder) {
749 (builder as DartEditBuilder).writeGetterDeclaration('g', 747 (builder as DartEditBuilder).writeGetterDeclaration('g',
750 returnType: typeA, returnTypeGroupName: 'returnType'); 748 returnType: typeA, returnTypeGroupName: 'returnType');
751 }); 749 });
752 }); 750 });
753 SourceEdit edit = getEdit(builder); 751 SourceEdit edit = getEdit(builder);
754 expect(edit.replacement, equalsIgnoringWhitespace('A get g => null;')); 752 expect(edit.replacement, equalsIgnoringWhitespace('A get g => null;'));
755 753
756 List<LinkedEditGroup> linkedEditGroups = 754 List<LinkedEditGroup> linkedEditGroups =
757 builder.sourceChange.linkedEditGroups; 755 builder.sourceChange.linkedEditGroups;
758 expect(linkedEditGroups, hasLength(1)); 756 expect(linkedEditGroups, hasLength(1));
759 LinkedEditGroup group = linkedEditGroups[0]; 757 LinkedEditGroup group = linkedEditGroups[0];
760 expect(group.length, 1); 758 expect(group.length, 1);
761 expect(group.positions, hasLength(1)); 759 expect(group.positions, hasLength(1));
762 Position position = group.positions[0]; 760 Position position = group.positions[0];
763 expect(position.offset, equals(20)); 761 expect(position.offset, equals(20));
764 } 762 }
765 763
766 test_writeLocalVariableDeclaration_noType_initializer() async { 764 test_writeLocalVariableDeclaration_noType_initializer() async {
767 String path = provider.convertPath('/test.dart'); 765 String path = provider.convertPath('/test.dart');
768 String content = ''' 766 String content = '''
769 void f() { 767 void f() {
770 768
771 }'''; 769 }''';
772 addSource(path, content); 770 addSource(path, content);
773 await driver.getResult(path); 771 await driver.getResult(path);
774 772
775 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 773 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
776 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 774 await builder.addFileEdit(path, (FileEditBuilder builder) {
777 builder.addInsertion(11, (EditBuilder builder) { 775 builder.addInsertion(11, (EditBuilder builder) {
778 (builder as DartEditBuilder).writeLocalVariableDeclaration('foo', 776 (builder as DartEditBuilder).writeLocalVariableDeclaration('foo',
779 initializerWriter: () { 777 initializerWriter: () {
780 builder.write('null'); 778 builder.write('null');
781 }); 779 });
782 }); 780 });
783 }); 781 });
784 SourceEdit edit = getEdit(builder); 782 SourceEdit edit = getEdit(builder);
785 expect(edit.replacement, equalsIgnoringWhitespace('var foo = null;')); 783 expect(edit.replacement, equalsIgnoringWhitespace('var foo = null;'));
786 } 784 }
787 785
788 test_writeLocalVariableDeclaration_noType_noInitializer() async { 786 test_writeLocalVariableDeclaration_noType_noInitializer() async {
789 String path = provider.convertPath('/test.dart'); 787 String path = provider.convertPath('/test.dart');
790 String content = ''' 788 String content = '''
791 void f() { 789 void f() {
792 790
793 }'''; 791 }''';
794 addSource(path, content); 792 addSource(path, content);
795 await driver.getResult(path); 793 await driver.getResult(path);
796 794
797 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 795 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
798 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 796 await builder.addFileEdit(path, (FileEditBuilder builder) {
799 builder.addInsertion(11, (EditBuilder builder) { 797 builder.addInsertion(11, (EditBuilder builder) {
800 (builder as DartEditBuilder) 798 (builder as DartEditBuilder)
801 .writeLocalVariableDeclaration('foo', nameGroupName: 'name'); 799 .writeLocalVariableDeclaration('foo', nameGroupName: 'name');
802 }); 800 });
803 }); 801 });
804 SourceEdit edit = getEdit(builder); 802 SourceEdit edit = getEdit(builder);
805 expect(edit.replacement, equalsIgnoringWhitespace('var foo;')); 803 expect(edit.replacement, equalsIgnoringWhitespace('var foo;'));
806 804
807 List<LinkedEditGroup> linkedEditGroups = 805 List<LinkedEditGroup> linkedEditGroups =
808 builder.sourceChange.linkedEditGroups; 806 builder.sourceChange.linkedEditGroups;
809 expect(linkedEditGroups, hasLength(1)); 807 expect(linkedEditGroups, hasLength(1));
810 LinkedEditGroup group = linkedEditGroups[0]; 808 LinkedEditGroup group = linkedEditGroups[0];
811 expect(group.length, 3); 809 expect(group.length, 3);
812 expect(group.positions, hasLength(1)); 810 expect(group.positions, hasLength(1));
813 } 811 }
814 812
815 test_writeLocalVariableDeclaration_noType_noInitializer_const() async { 813 test_writeLocalVariableDeclaration_noType_noInitializer_const() async {
816 String path = provider.convertPath('/test.dart'); 814 String path = provider.convertPath('/test.dart');
817 String content = ''' 815 String content = '''
818 void f() { 816 void f() {
819 817
820 }'''; 818 }''';
821 addSource(path, content); 819 addSource(path, content);
822 await driver.getResult(path); 820 await driver.getResult(path);
823 821
824 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 822 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
825 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 823 await builder.addFileEdit(path, (FileEditBuilder builder) {
826 builder.addInsertion(11, (EditBuilder builder) { 824 builder.addInsertion(11, (EditBuilder builder) {
827 (builder as DartEditBuilder) 825 (builder as DartEditBuilder)
828 .writeLocalVariableDeclaration('foo', isConst: true); 826 .writeLocalVariableDeclaration('foo', isConst: true);
829 }); 827 });
830 }); 828 });
831 SourceEdit edit = getEdit(builder); 829 SourceEdit edit = getEdit(builder);
832 expect(edit.replacement, equalsIgnoringWhitespace('const foo;')); 830 expect(edit.replacement, equalsIgnoringWhitespace('const foo;'));
833 } 831 }
834 832
835 test_writeLocalVariableDeclaration_noType_noInitializer_final() async { 833 test_writeLocalVariableDeclaration_noType_noInitializer_final() async {
836 String path = provider.convertPath('/test.dart'); 834 String path = provider.convertPath('/test.dart');
837 String content = ''' 835 String content = '''
838 void f() { 836 void f() {
839 837
840 }'''; 838 }''';
841 addSource(path, content); 839 addSource(path, content);
842 await driver.getResult(path); 840 await driver.getResult(path);
843 841
844 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 842 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
845 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 843 await builder.addFileEdit(path, (FileEditBuilder builder) {
846 builder.addInsertion(11, (EditBuilder builder) { 844 builder.addInsertion(11, (EditBuilder builder) {
847 (builder as DartEditBuilder) 845 (builder as DartEditBuilder)
848 .writeLocalVariableDeclaration('foo', isFinal: true); 846 .writeLocalVariableDeclaration('foo', isFinal: true);
849 }); 847 });
850 }); 848 });
851 SourceEdit edit = getEdit(builder); 849 SourceEdit edit = getEdit(builder);
852 expect(edit.replacement, equalsIgnoringWhitespace('final foo;')); 850 expect(edit.replacement, equalsIgnoringWhitespace('final foo;'));
853 } 851 }
854 852
855 test_writeLocalVariableDeclaration_type_initializer() async { 853 test_writeLocalVariableDeclaration_type_initializer() async {
856 String path = provider.convertPath('/test.dart'); 854 String path = provider.convertPath('/test.dart');
857 String content = ''' 855 String content = '''
858 void f() { 856 void f() {
859 857
860 } 858 }
861 class MyClass {}'''; 859 class MyClass {}''';
862 addSource(path, content); 860 addSource(path, content);
863 CompilationUnit unit = (await driver.getResult(path))?.unit; 861 CompilationUnit unit = (await driver.getResult(path))?.unit;
864 862
865 ClassDeclaration A = unit.declarations[1]; 863 ClassDeclaration A = unit.declarations[1];
866 864
867 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 865 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
868 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 866 await builder.addFileEdit(path, (FileEditBuilder builder) {
869 builder.addInsertion(11, (EditBuilder builder) { 867 builder.addInsertion(11, (EditBuilder builder) {
870 (builder as DartEditBuilder).writeLocalVariableDeclaration('foo', 868 (builder as DartEditBuilder).writeLocalVariableDeclaration('foo',
871 initializerWriter: () { 869 initializerWriter: () {
872 builder.write('null'); 870 builder.write('null');
873 }, type: A.element.type); 871 }, type: A.element.type);
874 }); 872 });
875 }); 873 });
876 SourceEdit edit = getEdit(builder); 874 SourceEdit edit = getEdit(builder);
877 expect(edit.replacement, equalsIgnoringWhitespace('MyClass foo = null;')); 875 expect(edit.replacement, equalsIgnoringWhitespace('MyClass foo = null;'));
878 } 876 }
879 877
880 test_writeLocalVariableDeclaration_type_noInitializer() async { 878 test_writeLocalVariableDeclaration_type_noInitializer() async {
881 String path = provider.convertPath('/test.dart'); 879 String path = provider.convertPath('/test.dart');
882 String content = ''' 880 String content = '''
883 void f() { 881 void f() {
884 882
885 } 883 }
886 class MyClass {}'''; 884 class MyClass {}''';
887 addSource(path, content); 885 addSource(path, content);
888 CompilationUnit unit = (await driver.getResult(path))?.unit; 886 CompilationUnit unit = (await driver.getResult(path))?.unit;
889 887
890 ClassDeclaration A = unit.declarations[1]; 888 ClassDeclaration A = unit.declarations[1];
891 889
892 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 890 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
893 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 891 await builder.addFileEdit(path, (FileEditBuilder builder) {
894 builder.addInsertion(11, (EditBuilder builder) { 892 builder.addInsertion(11, (EditBuilder builder) {
895 (builder as DartEditBuilder).writeLocalVariableDeclaration('foo', 893 (builder as DartEditBuilder).writeLocalVariableDeclaration('foo',
896 type: A.element.type, typeGroupName: 'type'); 894 type: A.element.type, typeGroupName: 'type');
897 }); 895 });
898 }); 896 });
899 SourceEdit edit = getEdit(builder); 897 SourceEdit edit = getEdit(builder);
900 expect(edit.replacement, equalsIgnoringWhitespace('MyClass foo;')); 898 expect(edit.replacement, equalsIgnoringWhitespace('MyClass foo;'));
901 899
902 List<LinkedEditGroup> linkedEditGroups = 900 List<LinkedEditGroup> linkedEditGroups =
903 builder.sourceChange.linkedEditGroups; 901 builder.sourceChange.linkedEditGroups;
904 expect(linkedEditGroups, hasLength(1)); 902 expect(linkedEditGroups, hasLength(1));
905 LinkedEditGroup group = linkedEditGroups[0]; 903 LinkedEditGroup group = linkedEditGroups[0];
906 expect(group.length, 7); 904 expect(group.length, 7);
907 expect(group.positions, hasLength(1)); 905 expect(group.positions, hasLength(1));
908 } 906 }
909 907
910 test_writeLocalVariableDeclaration_type_noInitializer_final() async { 908 test_writeLocalVariableDeclaration_type_noInitializer_final() async {
911 String path = provider.convertPath('/test.dart'); 909 String path = provider.convertPath('/test.dart');
912 String content = ''' 910 String content = '''
913 void f() { 911 void f() {
914 912
915 } 913 }
916 class MyClass {}'''; 914 class MyClass {}''';
917 addSource(path, content); 915 addSource(path, content);
918 CompilationUnit unit = (await driver.getResult(path))?.unit; 916 CompilationUnit unit = (await driver.getResult(path))?.unit;
919 917
920 ClassDeclaration A = unit.declarations[1]; 918 ClassDeclaration A = unit.declarations[1];
921 919
922 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 920 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
923 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 921 await builder.addFileEdit(path, (FileEditBuilder builder) {
924 builder.addInsertion(11, (EditBuilder builder) { 922 builder.addInsertion(11, (EditBuilder builder) {
925 (builder as DartEditBuilder).writeLocalVariableDeclaration('foo', 923 (builder as DartEditBuilder).writeLocalVariableDeclaration('foo',
926 isFinal: true, type: A.element.type, typeGroupName: 'type'); 924 isFinal: true, type: A.element.type, typeGroupName: 'type');
927 }); 925 });
928 }); 926 });
929 SourceEdit edit = getEdit(builder); 927 SourceEdit edit = getEdit(builder);
930 expect(edit.replacement, equalsIgnoringWhitespace('final MyClass foo;')); 928 expect(edit.replacement, equalsIgnoringWhitespace('final MyClass foo;'));
931 929
932 List<LinkedEditGroup> linkedEditGroups = 930 List<LinkedEditGroup> linkedEditGroups =
933 builder.sourceChange.linkedEditGroups; 931 builder.sourceChange.linkedEditGroups;
934 expect(linkedEditGroups, hasLength(1)); 932 expect(linkedEditGroups, hasLength(1));
935 LinkedEditGroup group = linkedEditGroups[0]; 933 LinkedEditGroup group = linkedEditGroups[0];
936 expect(group.length, 7); 934 expect(group.length, 7);
937 expect(group.positions, hasLength(1)); 935 expect(group.positions, hasLength(1));
938 } 936 }
939 937
940 test_writeOverrideOfInheritedMember() async { 938 test_writeOverrideOfInheritedMember() async {
941 String path = provider.convertPath('/test.dart'); 939 String path = provider.convertPath('/test.dart');
942 String content = ''' 940 String content = '''
943 class A { 941 class A {
944 A add(A a) => null; 942 A add(A a) => null;
945 } 943 }
946 class B extends A { 944 class B extends A {
947 }'''; 945 }''';
948 addSource(path, content); 946 addSource(path, content);
949 ClassElement classA = await _getClassElement(path, 'A'); 947 ClassElement classA = await _getClassElement(path, 'A');
950 948
951 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 949 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
952 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 950 await builder.addFileEdit(path, (FileEditBuilder builder) {
953 builder.addInsertion(content.length - 1, (EditBuilder builder) { 951 builder.addInsertion(content.length - 1, (EditBuilder builder) {
954 (builder as DartEditBuilder) 952 (builder as DartEditBuilder)
955 .writeOverrideOfInheritedMember(classA.methods[0]); 953 .writeOverrideOfInheritedMember(classA.methods[0]);
956 }); 954 });
957 }); 955 });
958 SourceEdit edit = getEdit(builder); 956 SourceEdit edit = getEdit(builder);
959 expect(edit.replacement, equalsIgnoringWhitespace(''' 957 expect(edit.replacement, equalsIgnoringWhitespace('''
960 @override 958 @override
961 A add(A a) { 959 A add(A a) {
962 // TODO: implement add 960 // TODO: implement add
(...skipping 12 matching lines...) Expand all
975 '''; 973 ''';
976 addSource(path, content); 974 addSource(path, content);
977 CompilationUnit unit = (await driver.getResult(path))?.unit; 975 CompilationUnit unit = (await driver.getResult(path))?.unit;
978 FunctionDeclaration g = unit.declarations[1]; 976 FunctionDeclaration g = unit.declarations[1];
979 BlockFunctionBody body = g.functionExpression.body; 977 BlockFunctionBody body = g.functionExpression.body;
980 ExpressionStatement statement = body.block.statements[0]; 978 ExpressionStatement statement = body.block.statements[0];
981 MethodInvocation invocation = statement.expression; 979 MethodInvocation invocation = statement.expression;
982 Expression argument = invocation.argumentList.arguments[0]; 980 Expression argument = invocation.argumentList.arguments[0];
983 981
984 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 982 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
985 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 983 await builder.addFileEdit(path, (FileEditBuilder builder) {
986 builder.addInsertion(2, (EditBuilder builder) { 984 builder.addInsertion(2, (EditBuilder builder) {
987 (builder as DartEditBuilder) 985 (builder as DartEditBuilder)
988 .writeParameterMatchingArgument(argument, 0, new Set<String>()); 986 .writeParameterMatchingArgument(argument, 0, new Set<String>());
989 }); 987 });
990 }); 988 });
991 SourceEdit edit = getEdit(builder); 989 SourceEdit edit = getEdit(builder);
992 expect(edit.replacement, equalsIgnoringWhitespace('A a')); 990 expect(edit.replacement, equalsIgnoringWhitespace('A a'));
993 } 991 }
994 992
995 test_writeParameters_named() async { 993 test_writeParameters_named() async {
996 String path = provider.convertPath('/test.dart'); 994 String path = provider.convertPath('/test.dart');
997 String content = 'f(int i, {String s}) {}'; 995 String content = 'f(int i, {String s}) {}';
998 addSource(path, content); 996 addSource(path, content);
999 997
1000 CompilationUnit unit = (await driver.getResult(path))?.unit; 998 CompilationUnit unit = (await driver.getResult(path))?.unit;
1001 FunctionDeclaration f = unit.declarations[0]; 999 FunctionDeclaration f = unit.declarations[0];
1002 FormalParameterList parameters = f.functionExpression.parameters; 1000 FormalParameterList parameters = f.functionExpression.parameters;
1003 Iterable<ParameterElement> elements = parameters.parameters 1001 Iterable<ParameterElement> elements = parameters.parameters
1004 .map(resolutionMap.elementDeclaredByFormalParameter); 1002 .map(resolutionMap.elementDeclaredByFormalParameter);
1005 1003
1006 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1004 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1007 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1005 await builder.addFileEdit(path, (FileEditBuilder builder) {
1008 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1006 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1009 (builder as DartEditBuilder).writeParameters(elements); 1007 (builder as DartEditBuilder).writeParameters(elements);
1010 }); 1008 });
1011 }); 1009 });
1012 SourceEdit edit = getEdit(builder); 1010 SourceEdit edit = getEdit(builder);
1013 expect(edit.replacement, equalsIgnoringWhitespace('(int i, {String s})')); 1011 expect(edit.replacement, equalsIgnoringWhitespace('(int i, {String s})'));
1014 } 1012 }
1015 1013
1016 test_writeParameters_positional() async { 1014 test_writeParameters_positional() async {
1017 String path = provider.convertPath('/test.dart'); 1015 String path = provider.convertPath('/test.dart');
1018 String content = 'f(int i, [String s]) {}'; 1016 String content = 'f(int i, [String s]) {}';
1019 addSource(path, content); 1017 addSource(path, content);
1020 CompilationUnit unit = (await driver.getResult(path))?.unit; 1018 CompilationUnit unit = (await driver.getResult(path))?.unit;
1021 FunctionDeclaration f = unit.declarations[0]; 1019 FunctionDeclaration f = unit.declarations[0];
1022 FormalParameterList parameters = f.functionExpression.parameters; 1020 FormalParameterList parameters = f.functionExpression.parameters;
1023 Iterable<ParameterElement> elements = parameters.parameters 1021 Iterable<ParameterElement> elements = parameters.parameters
1024 .map(resolutionMap.elementDeclaredByFormalParameter); 1022 .map(resolutionMap.elementDeclaredByFormalParameter);
1025 1023
1026 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1024 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1027 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1025 await builder.addFileEdit(path, (FileEditBuilder builder) {
1028 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1026 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1029 (builder as DartEditBuilder).writeParameters(elements); 1027 (builder as DartEditBuilder).writeParameters(elements);
1030 }); 1028 });
1031 }); 1029 });
1032 SourceEdit edit = getEdit(builder); 1030 SourceEdit edit = getEdit(builder);
1033 expect(edit.replacement, equalsIgnoringWhitespace('(int i, [String s])')); 1031 expect(edit.replacement, equalsIgnoringWhitespace('(int i, [String s])'));
1034 } 1032 }
1035 1033
1036 test_writeParameters_required() async { 1034 test_writeParameters_required() async {
1037 String path = provider.convertPath('/test.dart'); 1035 String path = provider.convertPath('/test.dart');
1038 String content = 'f(int i, String s) {}'; 1036 String content = 'f(int i, String s) {}';
1039 addSource(path, content); 1037 addSource(path, content);
1040 CompilationUnit unit = (await driver.getResult(path))?.unit; 1038 CompilationUnit unit = (await driver.getResult(path))?.unit;
1041 FunctionDeclaration f = unit.declarations[0]; 1039 FunctionDeclaration f = unit.declarations[0];
1042 FormalParameterList parameters = f.functionExpression.parameters; 1040 FormalParameterList parameters = f.functionExpression.parameters;
1043 Iterable<ParameterElement> elements = parameters.parameters 1041 Iterable<ParameterElement> elements = parameters.parameters
1044 .map(resolutionMap.elementDeclaredByFormalParameter); 1042 .map(resolutionMap.elementDeclaredByFormalParameter);
1045 1043
1046 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1044 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1047 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1045 await builder.addFileEdit(path, (FileEditBuilder builder) {
1048 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1046 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1049 (builder as DartEditBuilder).writeParameters(elements); 1047 (builder as DartEditBuilder).writeParameters(elements);
1050 }); 1048 });
1051 }); 1049 });
1052 SourceEdit edit = getEdit(builder); 1050 SourceEdit edit = getEdit(builder);
1053 expect(edit.replacement, equalsIgnoringWhitespace('(int i, String s)')); 1051 expect(edit.replacement, equalsIgnoringWhitespace('(int i, String s)'));
1054 } 1052 }
1055 1053
1056 test_writeParametersMatchingArguments_named() async { 1054 test_writeParametersMatchingArguments_named() async {
1057 String path = provider.convertPath('/test.dart'); 1055 String path = provider.convertPath('/test.dart');
1058 String content = ''' 1056 String content = '''
1059 f(int i, String s) { 1057 f(int i, String s) {
1060 g(s, index: i); 1058 g(s, index: i);
1061 }'''; 1059 }''';
1062 addSource(path, content); 1060 addSource(path, content);
1063 CompilationUnit unit = (await driver.getResult(path))?.unit; 1061 CompilationUnit unit = (await driver.getResult(path))?.unit;
1064 FunctionDeclaration f = unit.declarations[0]; 1062 FunctionDeclaration f = unit.declarations[0];
1065 BlockFunctionBody body = f.functionExpression.body; 1063 BlockFunctionBody body = f.functionExpression.body;
1066 ExpressionStatement statement = body.block.statements[0]; 1064 ExpressionStatement statement = body.block.statements[0];
1067 MethodInvocation invocation = statement.expression; 1065 MethodInvocation invocation = statement.expression;
1068 1066
1069 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1067 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1070 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1068 await builder.addFileEdit(path, (FileEditBuilder builder) {
1071 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1069 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1072 (builder as DartEditBuilder) 1070 (builder as DartEditBuilder)
1073 .writeParametersMatchingArguments(invocation.argumentList); 1071 .writeParametersMatchingArguments(invocation.argumentList);
1074 }); 1072 });
1075 }); 1073 });
1076 SourceEdit edit = getEdit(builder); 1074 SourceEdit edit = getEdit(builder);
1077 expect(edit.replacement, equalsIgnoringWhitespace('String s, {int index}')); 1075 expect(edit.replacement, equalsIgnoringWhitespace('String s, {int index}'));
1078 } 1076 }
1079 1077
1080 test_writeParametersMatchingArguments_required() async { 1078 test_writeParametersMatchingArguments_required() async {
1081 String path = provider.convertPath('/test.dart'); 1079 String path = provider.convertPath('/test.dart');
1082 String content = ''' 1080 String content = '''
1083 f(int i, String s) { 1081 f(int i, String s) {
1084 g(s, i); 1082 g(s, i);
1085 }'''; 1083 }''';
1086 addSource(path, content); 1084 addSource(path, content);
1087 CompilationUnit unit = (await driver.getResult(path))?.unit; 1085 CompilationUnit unit = (await driver.getResult(path))?.unit;
1088 FunctionDeclaration f = unit.declarations[0]; 1086 FunctionDeclaration f = unit.declarations[0];
1089 BlockFunctionBody body = f.functionExpression.body; 1087 BlockFunctionBody body = f.functionExpression.body;
1090 ExpressionStatement statement = body.block.statements[0]; 1088 ExpressionStatement statement = body.block.statements[0];
1091 MethodInvocation invocation = statement.expression; 1089 MethodInvocation invocation = statement.expression;
1092 1090
1093 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1091 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1094 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1092 await builder.addFileEdit(path, (FileEditBuilder builder) {
1095 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1093 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1096 (builder as DartEditBuilder) 1094 (builder as DartEditBuilder)
1097 .writeParametersMatchingArguments(invocation.argumentList); 1095 .writeParametersMatchingArguments(invocation.argumentList);
1098 }); 1096 });
1099 }); 1097 });
1100 SourceEdit edit = getEdit(builder); 1098 SourceEdit edit = getEdit(builder);
1101 expect(edit.replacement, equalsIgnoringWhitespace('String s, int i')); 1099 expect(edit.replacement, equalsIgnoringWhitespace('String s, int i'));
1102 } 1100 }
1103 1101
1104 test_writeParameterSource() async { 1102 test_writeParameterSource() async {
1105 String path = provider.convertPath('/test.dart'); 1103 String path = provider.convertPath('/test.dart');
1106 String content = 'class A {}'; 1104 String content = 'class A {}';
1107 addSource(path, content); 1105 addSource(path, content);
1108 DartType typeA = await _getType(path, 'A'); 1106 DartType typeA = await _getType(path, 'A');
1109 1107
1110 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1108 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1111 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1109 await builder.addFileEdit(path, (FileEditBuilder builder) {
1112 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1110 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1113 (builder as DartEditBuilder).writeParameterSource(typeA, 'a'); 1111 (builder as DartEditBuilder).writeParameterSource(typeA, 'a');
1114 }); 1112 });
1115 }); 1113 });
1116 SourceEdit edit = getEdit(builder); 1114 SourceEdit edit = getEdit(builder);
1117 expect(edit.replacement, equalsIgnoringWhitespace('A a')); 1115 expect(edit.replacement, equalsIgnoringWhitespace('A a'));
1118 } 1116 }
1119 1117
1120 test_writeType_dynamic() async { 1118 test_writeType_dynamic() async {
1121 String path = provider.convertPath('/test.dart'); 1119 String path = provider.convertPath('/test.dart');
1122 String content = 'class A {}'; 1120 String content = 'class A {}';
1123 addSource(path, content); 1121 addSource(path, content);
1124 CompilationUnit unit = (await driver.getResult(path))?.unit; 1122 CompilationUnit unit = (await driver.getResult(path))?.unit;
1125 1123
1126 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1124 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1127 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1125 await builder.addFileEdit(path, (FileEditBuilder builder) {
1128 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1126 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1129 (builder as DartEditBuilder).writeType(resolutionMap 1127 (builder as DartEditBuilder).writeType(resolutionMap
1130 .elementDeclaredByCompilationUnit(unit) 1128 .elementDeclaredByCompilationUnit(unit)
1131 .context 1129 .context
1132 .typeProvider 1130 .typeProvider
1133 .dynamicType); 1131 .dynamicType);
1134 }); 1132 });
1135 }); 1133 });
1136 SourceEdit edit = getEdit(builder); 1134 SourceEdit edit = getEdit(builder);
1137 expect(edit.replacement, equalsIgnoringWhitespace('')); 1135 expect(edit.replacement, equalsIgnoringWhitespace(''));
1138 } 1136 }
1139 1137
1140 test_writeType_genericType() async { 1138 test_writeType_genericType() async {
1141 String path = provider.convertPath('/test.dart'); 1139 String path = provider.convertPath('/test.dart');
1142 String content = 'class A {} class B<E> {}'; 1140 String content = 'class A {} class B<E> {}';
1143 addSource(path, content); 1141 addSource(path, content);
1144 InterfaceType typeA = await _getType(path, 'A'); 1142 InterfaceType typeA = await _getType(path, 'A');
1145 InterfaceType typeB = await _getType(path, 'B'); 1143 InterfaceType typeB = await _getType(path, 'B');
1146 1144
1147 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1145 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1148 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1146 await builder.addFileEdit(path, (FileEditBuilder builder) {
1149 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1147 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1150 (builder as DartEditBuilder).writeType(typeB.instantiate([typeA])); 1148 (builder as DartEditBuilder).writeType(typeB.instantiate([typeA]));
1151 }); 1149 });
1152 }); 1150 });
1153 SourceEdit edit = getEdit(builder); 1151 SourceEdit edit = getEdit(builder);
1154 expect(edit.replacement, equalsIgnoringWhitespace('B<A>')); 1152 expect(edit.replacement, equalsIgnoringWhitespace('B<A>'));
1155 } 1153 }
1156 1154
1157 test_writeType_groupName() async { 1155 test_writeType_groupName() async {
1158 String path = provider.convertPath('/test.dart'); 1156 String path = provider.convertPath('/test.dart');
1159 String content = 'class A {} class B extends A {} class C extends B {}'; 1157 String content = 'class A {} class B extends A {} class C extends B {}';
1160 addSource(path, content); 1158 addSource(path, content);
1161 DartType typeC = await _getType(path, 'C'); 1159 DartType typeC = await _getType(path, 'C');
1162 1160
1163 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1161 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1164 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1162 await builder.addFileEdit(path, (FileEditBuilder builder) {
1165 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1163 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1166 (builder as DartEditBuilder).writeType(typeC, groupName: 'type'); 1164 (builder as DartEditBuilder).writeType(typeC, groupName: 'type');
1167 }); 1165 });
1168 }); 1166 });
1169 SourceEdit edit = getEdit(builder); 1167 SourceEdit edit = getEdit(builder);
1170 expect(edit.replacement, equalsIgnoringWhitespace('C')); 1168 expect(edit.replacement, equalsIgnoringWhitespace('C'));
1171 1169
1172 List<LinkedEditGroup> linkedEditGroups = 1170 List<LinkedEditGroup> linkedEditGroups =
1173 builder.sourceChange.linkedEditGroups; 1171 builder.sourceChange.linkedEditGroups;
1174 expect(linkedEditGroups, hasLength(1)); 1172 expect(linkedEditGroups, hasLength(1));
1175 LinkedEditGroup group = linkedEditGroups[0]; 1173 LinkedEditGroup group = linkedEditGroups[0];
1176 expect(group, isNotNull); 1174 expect(group, isNotNull);
1177 } 1175 }
1178 1176
1179 test_writeType_groupName_addSupertypeProposals() async { 1177 test_writeType_groupName_addSupertypeProposals() async {
1180 String path = provider.convertPath('/test.dart'); 1178 String path = provider.convertPath('/test.dart');
1181 String content = 'class A {} class B extends A {} class C extends B {}'; 1179 String content = 'class A {} class B extends A {} class C extends B {}';
1182 addSource(path, content); 1180 addSource(path, content);
1183 DartType typeC = await _getType(path, 'C'); 1181 DartType typeC = await _getType(path, 'C');
1184 1182
1185 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1183 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1186 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1184 await builder.addFileEdit(path, (FileEditBuilder builder) {
1187 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1185 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1188 (builder as DartEditBuilder) 1186 (builder as DartEditBuilder)
1189 .writeType(typeC, addSupertypeProposals: true, groupName: 'type'); 1187 .writeType(typeC, addSupertypeProposals: true, groupName: 'type');
1190 }); 1188 });
1191 }); 1189 });
1192 SourceEdit edit = getEdit(builder); 1190 SourceEdit edit = getEdit(builder);
1193 expect(edit.replacement, equalsIgnoringWhitespace('C')); 1191 expect(edit.replacement, equalsIgnoringWhitespace('C'));
1194 1192
1195 List<LinkedEditGroup> linkedEditGroups = 1193 List<LinkedEditGroup> linkedEditGroups =
1196 builder.sourceChange.linkedEditGroups; 1194 builder.sourceChange.linkedEditGroups;
(...skipping 11 matching lines...) Expand all
1208 expect(values, contains('B')); 1206 expect(values, contains('B'));
1209 expect(values, contains('C')); 1207 expect(values, contains('C'));
1210 } 1208 }
1211 1209
1212 test_writeType_null() async { 1210 test_writeType_null() async {
1213 String path = provider.convertPath('/test.dart'); 1211 String path = provider.convertPath('/test.dart');
1214 String content = 'class A {}'; 1212 String content = 'class A {}';
1215 addSource(path, content); 1213 addSource(path, content);
1216 1214
1217 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1215 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1218 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1216 await builder.addFileEdit(path, (FileEditBuilder builder) {
1219 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1217 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1220 (builder as DartEditBuilder).writeType(null); 1218 (builder as DartEditBuilder).writeType(null);
1221 }); 1219 });
1222 }); 1220 });
1223 SourceEdit edit = getEdit(builder); 1221 SourceEdit edit = getEdit(builder);
1224 expect(edit.replacement, equalsIgnoringWhitespace('')); 1222 expect(edit.replacement, equalsIgnoringWhitespace(''));
1225 } 1223 }
1226 1224
1227 test_writeType_required_dynamic() async { 1225 test_writeType_required_dynamic() async {
1228 String path = provider.convertPath('/test.dart'); 1226 String path = provider.convertPath('/test.dart');
1229 String content = 'class A {}'; 1227 String content = 'class A {}';
1230 addSource(path, content); 1228 addSource(path, content);
1231 CompilationUnit unit = (await driver.getResult(path))?.unit; 1229 CompilationUnit unit = (await driver.getResult(path))?.unit;
1232 1230
1233 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1231 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1234 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1232 await builder.addFileEdit(path, (FileEditBuilder builder) {
1235 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1233 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1236 (builder as DartEditBuilder).writeType( 1234 (builder as DartEditBuilder).writeType(
1237 resolutionMap 1235 resolutionMap
1238 .elementDeclaredByCompilationUnit(unit) 1236 .elementDeclaredByCompilationUnit(unit)
1239 .context 1237 .context
1240 .typeProvider 1238 .typeProvider
1241 .dynamicType, 1239 .dynamicType,
1242 required: true); 1240 required: true);
1243 }); 1241 });
1244 }); 1242 });
1245 SourceEdit edit = getEdit(builder); 1243 SourceEdit edit = getEdit(builder);
1246 expect(edit.replacement, equalsIgnoringWhitespace('var')); 1244 expect(edit.replacement, equalsIgnoringWhitespace('var'));
1247 } 1245 }
1248 1246
1249 test_writeType_required_notNull() async { 1247 test_writeType_required_notNull() async {
1250 String path = provider.convertPath('/test.dart'); 1248 String path = provider.convertPath('/test.dart');
1251 String content = 'class A {}'; 1249 String content = 'class A {}';
1252 addSource(path, content); 1250 addSource(path, content);
1253 DartType typeA = await _getType(path, 'A'); 1251 DartType typeA = await _getType(path, 'A');
1254 1252
1255 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1253 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1256 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1254 await builder.addFileEdit(path, (FileEditBuilder builder) {
1257 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1255 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1258 (builder as DartEditBuilder).writeType(typeA, required: true); 1256 (builder as DartEditBuilder).writeType(typeA, required: true);
1259 }); 1257 });
1260 }); 1258 });
1261 SourceEdit edit = getEdit(builder); 1259 SourceEdit edit = getEdit(builder);
1262 expect(edit.replacement, equalsIgnoringWhitespace('A')); 1260 expect(edit.replacement, equalsIgnoringWhitespace('A'));
1263 } 1261 }
1264 1262
1265 test_writeType_required_null() async { 1263 test_writeType_required_null() async {
1266 String path = provider.convertPath('/test.dart'); 1264 String path = provider.convertPath('/test.dart');
1267 String content = 'class A {}'; 1265 String content = 'class A {}';
1268 addSource(path, content); 1266 addSource(path, content);
1269 1267
1270 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1268 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1271 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1269 await builder.addFileEdit(path, (FileEditBuilder builder) {
1272 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1270 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1273 (builder as DartEditBuilder).writeType(null, required: true); 1271 (builder as DartEditBuilder).writeType(null, required: true);
1274 }); 1272 });
1275 }); 1273 });
1276 SourceEdit edit = getEdit(builder); 1274 SourceEdit edit = getEdit(builder);
1277 expect(edit.replacement, equalsIgnoringWhitespace('var')); 1275 expect(edit.replacement, equalsIgnoringWhitespace('var'));
1278 } 1276 }
1279 1277
1280 test_writeType_simpleType() async { 1278 test_writeType_simpleType() async {
1281 String path = provider.convertPath('/test.dart'); 1279 String path = provider.convertPath('/test.dart');
1282 String content = 'class A {}'; 1280 String content = 'class A {}';
1283 addSource(path, content); 1281 addSource(path, content);
1284 DartType typeA = await _getType(path, 'A'); 1282 DartType typeA = await _getType(path, 'A');
1285 1283
1286 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1284 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1287 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1285 await builder.addFileEdit(path, (FileEditBuilder builder) {
1288 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1286 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1289 (builder as DartEditBuilder).writeType(typeA); 1287 (builder as DartEditBuilder).writeType(typeA);
1290 }); 1288 });
1291 }); 1289 });
1292 SourceEdit edit = getEdit(builder); 1290 SourceEdit edit = getEdit(builder);
1293 expect(edit.replacement, equalsIgnoringWhitespace('A')); 1291 expect(edit.replacement, equalsIgnoringWhitespace('A'));
1294 } 1292 }
1295 1293
1296 test_writeTypes_empty() async { 1294 test_writeTypes_empty() async {
1297 String path = provider.convertPath('/test.dart'); 1295 String path = provider.convertPath('/test.dart');
1298 String content = 'class A {}'; 1296 String content = 'class A {}';
1299 addSource(path, content); 1297 addSource(path, content);
1300 1298
1301 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1299 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1302 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1300 await builder.addFileEdit(path, (FileEditBuilder builder) {
1303 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1301 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1304 (builder as DartEditBuilderImpl).writeTypes([]); 1302 (builder as DartEditBuilderImpl).writeTypes([]);
1305 }); 1303 });
1306 }); 1304 });
1307 SourceEdit edit = getEdit(builder); 1305 SourceEdit edit = getEdit(builder);
1308 expect(edit.replacement, isEmpty); 1306 expect(edit.replacement, isEmpty);
1309 } 1307 }
1310 1308
1311 test_writeTypes_noPrefix() async { 1309 test_writeTypes_noPrefix() async {
1312 String path = provider.convertPath('/test.dart'); 1310 String path = provider.convertPath('/test.dart');
1313 String content = 'class A {} class B {}'; 1311 String content = 'class A {} class B {}';
1314 addSource(path, content); 1312 addSource(path, content);
1315 DartType typeA = await _getType(path, 'A'); 1313 DartType typeA = await _getType(path, 'A');
1316 DartType typeB = await _getType(path, 'B'); 1314 DartType typeB = await _getType(path, 'B');
1317 1315
1318 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1316 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1319 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1317 await builder.addFileEdit(path, (FileEditBuilder builder) {
1320 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1318 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1321 (builder as DartEditBuilderImpl).writeTypes([typeA, typeB]); 1319 (builder as DartEditBuilderImpl).writeTypes([typeA, typeB]);
1322 }); 1320 });
1323 }); 1321 });
1324 SourceEdit edit = getEdit(builder); 1322 SourceEdit edit = getEdit(builder);
1325 expect(edit.replacement, equalsIgnoringWhitespace('A, B')); 1323 expect(edit.replacement, equalsIgnoringWhitespace('A, B'));
1326 } 1324 }
1327 1325
1328 test_writeTypes_null() async { 1326 test_writeTypes_null() async {
1329 String path = provider.convertPath('/test.dart'); 1327 String path = provider.convertPath('/test.dart');
1330 String content = 'class A {}'; 1328 String content = 'class A {}';
1331 addSource(path, content); 1329 addSource(path, content);
1332 1330
1333 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1331 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1334 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1332 await builder.addFileEdit(path, (FileEditBuilder builder) {
1335 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1333 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1336 (builder as DartEditBuilderImpl).writeTypes(null); 1334 (builder as DartEditBuilderImpl).writeTypes(null);
1337 }); 1335 });
1338 }); 1336 });
1339 SourceEdit edit = getEdit(builder); 1337 SourceEdit edit = getEdit(builder);
1340 expect(edit.replacement, isEmpty); 1338 expect(edit.replacement, isEmpty);
1341 } 1339 }
1342 1340
1343 test_writeTypes_prefix() async { 1341 test_writeTypes_prefix() async {
1344 String path = provider.convertPath('/test.dart'); 1342 String path = provider.convertPath('/test.dart');
1345 String content = 'class A {} class B {}'; 1343 String content = 'class A {} class B {}';
1346 addSource(path, content); 1344 addSource(path, content);
1347 DartType typeA = await _getType(path, 'A'); 1345 DartType typeA = await _getType(path, 'A');
1348 DartType typeB = await _getType(path, 'B'); 1346 DartType typeB = await _getType(path, 'B');
1349 1347
1350 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1348 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1351 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1349 await builder.addFileEdit(path, (FileEditBuilder builder) {
1352 builder.addInsertion(content.length - 1, (EditBuilder builder) { 1350 builder.addInsertion(content.length - 1, (EditBuilder builder) {
1353 (builder as DartEditBuilderImpl) 1351 (builder as DartEditBuilderImpl)
1354 .writeTypes([typeA, typeB], prefix: 'implements '); 1352 .writeTypes([typeA, typeB], prefix: 'implements ');
1355 }); 1353 });
1356 }); 1354 });
1357 SourceEdit edit = getEdit(builder); 1355 SourceEdit edit = getEdit(builder);
1358 expect(edit.replacement, equalsIgnoringWhitespace('implements A, B')); 1356 expect(edit.replacement, equalsIgnoringWhitespace('implements A, B'));
1359 } 1357 }
1360 1358
1361 Future<Null> _assertImportLibraries( 1359 Future<Null> _assertImportLibraries(
1362 String initialCode, List<String> newUris, String expectedCode) async { 1360 String initialCode, List<String> newUris, String expectedCode) async {
1363 String path = provider.convertPath('/test.dart'); 1361 String path = provider.convertPath('/test.dart');
1364 addSource(path, initialCode); 1362 addSource(path, initialCode);
1365 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1363 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1366 await builder.addFileEdit(path, 1, (DartFileEditBuilder builder) { 1364 await builder.addFileEdit(path, (DartFileEditBuilder builder) {
1367 Iterable<_MockSource> sources = newUris.map((newUri) { 1365 Iterable<_MockSource> sources = newUris.map((newUri) {
1368 String path = 1366 String path =
1369 newUri.contains(':') ? null : provider.convertPath('/$newUri'); 1367 newUri.contains(':') ? null : provider.convertPath('/$newUri');
1370 return new _MockSource(path, Uri.parse(newUri)); 1368 return new _MockSource(path, Uri.parse(newUri));
1371 }); 1369 });
1372 builder.importLibraries(sources); 1370 builder.importLibraries(sources);
1373 }); 1371 });
1374 1372
1375 String resultCode = initialCode; 1373 String resultCode = initialCode;
1376 List<SourceEdit> edits = getEdits(builder); 1374 List<SourceEdit> edits = getEdits(builder);
(...skipping 25 matching lines...) Expand all
1402 1400
1403 test_convertFunctionFromSyncToAsync() async { 1401 test_convertFunctionFromSyncToAsync() async {
1404 String path = provider.convertPath('/test.dart'); 1402 String path = provider.convertPath('/test.dart');
1405 addSource(path, 'String f() {}'); 1403 addSource(path, 'String f() {}');
1406 1404
1407 CompilationUnit unit = (await driver.getResult(path))?.unit; 1405 CompilationUnit unit = (await driver.getResult(path))?.unit;
1408 FunctionDeclaration function = unit.declarations[0]; 1406 FunctionDeclaration function = unit.declarations[0];
1409 FunctionBody body = function.functionExpression.body; 1407 FunctionBody body = function.functionExpression.body;
1410 1408
1411 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1409 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1412 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1410 await builder.addFileEdit(path, (FileEditBuilder builder) {
1413 (builder as DartFileEditBuilder) 1411 (builder as DartFileEditBuilder)
1414 .convertFunctionFromSyncToAsync(body, typeProvider); 1412 .convertFunctionFromSyncToAsync(body, typeProvider);
1415 }); 1413 });
1416 List<SourceEdit> edits = getEdits(builder); 1414 List<SourceEdit> edits = getEdits(builder);
1417 expect(edits, hasLength(3)); 1415 expect(edits, hasLength(3));
1418 expect(edits[0].replacement, equalsIgnoringWhitespace('async')); 1416 expect(edits[0].replacement, equalsIgnoringWhitespace('async'));
1419 expect( 1417 expect(
1420 edits[1].replacement, equalsIgnoringWhitespace("import 'dart:async';")); 1418 edits[1].replacement, equalsIgnoringWhitespace("import 'dart:async';"));
1421 expect(edits[2].replacement, equalsIgnoringWhitespace('Future<String>')); 1419 expect(edits[2].replacement, equalsIgnoringWhitespace('Future<String>'));
1422 } 1420 }
1423 1421
1424 test_createEditBuilder() async { 1422 test_createEditBuilder() async {
1425 String path = provider.convertPath('/test.dart'); 1423 String path = provider.convertPath('/test.dart');
1426 addSource(path, 'library test;'); 1424 addSource(path, 'library test;');
1427 int timeStamp = 65;
1428 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1425 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1429 await builder.addFileEdit(path, timeStamp, (FileEditBuilder builder) { 1426 await builder.addFileEdit(path, (FileEditBuilder builder) {
1430 int offset = 4; 1427 int offset = 4;
1431 int length = 5; 1428 int length = 5;
1432 DartEditBuilderImpl editBuilder = (builder as DartFileEditBuilderImpl) 1429 DartEditBuilderImpl editBuilder = (builder as DartFileEditBuilderImpl)
1433 .createEditBuilder(offset, length); 1430 .createEditBuilder(offset, length);
1434 expect(editBuilder, new isInstanceOf<DartEditBuilder>()); 1431 expect(editBuilder, new isInstanceOf<DartEditBuilder>());
1435 SourceEdit sourceEdit = editBuilder.sourceEdit; 1432 SourceEdit sourceEdit = editBuilder.sourceEdit;
1436 expect(sourceEdit.length, length); 1433 expect(sourceEdit.length, length);
1437 expect(sourceEdit.offset, offset); 1434 expect(sourceEdit.offset, offset);
1438 expect(sourceEdit.replacement, isEmpty); 1435 expect(sourceEdit.replacement, isEmpty);
1439 }); 1436 });
1440 } 1437 }
1441 1438
1442 test_replaceTypeWithFuture() async { 1439 test_replaceTypeWithFuture() async {
1443 String path = provider.convertPath('/test.dart'); 1440 String path = provider.convertPath('/test.dart');
1444 addSource(path, 'String f() {}'); 1441 addSource(path, 'String f() {}');
1445 1442
1446 CompilationUnit unit = (await driver.getResult(path))?.unit; 1443 CompilationUnit unit = (await driver.getResult(path))?.unit;
1447 FunctionDeclaration function = unit.declarations[0]; 1444 FunctionDeclaration function = unit.declarations[0];
1448 TypeAnnotation type = function.returnType; 1445 TypeAnnotation type = function.returnType;
1449 1446
1450 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver); 1447 DartChangeBuilderImpl builder = new DartChangeBuilderImpl(driver);
1451 await builder.addFileEdit(path, 1, (FileEditBuilder builder) { 1448 await builder.addFileEdit(path, (FileEditBuilder builder) {
1452 (builder as DartFileEditBuilder) 1449 (builder as DartFileEditBuilder)
1453 .replaceTypeWithFuture(type, typeProvider); 1450 .replaceTypeWithFuture(type, typeProvider);
1454 }); 1451 });
1455 List<SourceEdit> edits = getEdits(builder); 1452 List<SourceEdit> edits = getEdits(builder);
1456 expect(edits, hasLength(2)); 1453 expect(edits, hasLength(2));
1457 expect( 1454 expect(
1458 edits[0].replacement, equalsIgnoringWhitespace("import 'dart:async';")); 1455 edits[0].replacement, equalsIgnoringWhitespace("import 'dart:async';"));
1459 expect(edits[1].replacement, equalsIgnoringWhitespace('Future<String>')); 1456 expect(edits[1].replacement, equalsIgnoringWhitespace('Future<String>'));
1460 } 1457 }
1461 } 1458 }
(...skipping 25 matching lines...) Expand all
1487 final String fullName; 1484 final String fullName;
1488 1485
1489 @override 1486 @override
1490 final Uri uri; 1487 final Uri uri;
1491 1488
1492 _MockSource(this.fullName, this.uri); 1489 _MockSource(this.fullName, this.uri);
1493 1490
1494 @override 1491 @override
1495 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); 1492 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
1496 } 1493 }
OLDNEW
« no previous file with comments | « pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_core_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698