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

Side by Side Diff: pkg/analysis_server/test/services/refactoring/extract_local_test.dart

Issue 1431673003: Compute covering offsets/lengths. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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/analysis_server/lib/src/services/refactoring/refactoring.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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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 test.services.refactoring.extract_local; 5 library test.services.refactoring.extract_local;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/plugin/protocol/protocol.dart'; 9 import 'package:analysis_server/plugin/protocol/protocol.dart';
10 import 'package:analysis_server/src/services/correction/status.dart'; 10 import 'package:analysis_server/src/services/correction/status.dart';
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 main(); 75 main();
76 } 76 }
77 '''); 77 ''');
78 _createRefactoringWithSuffix('main', '();'); 78 _createRefactoringWithSuffix('main', '();');
79 // check conditions 79 // check conditions
80 RefactoringStatus status = await refactoring.checkAllConditions(); 80 RefactoringStatus status = await refactoring.checkAllConditions();
81 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL, 81 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
82 expectedMessage: 'Cannot extract a single method name.'); 82 expectedMessage: 'Cannot extract a single method name.');
83 } 83 }
84 84
85 test_checkInitialConditions_nameOfProperty_prefixedIdentifier() async {
86 indexTestUnit('''
87 main(p) {
88 p.value; // marker
89 }
90 ''');
91 _createRefactoringWithSuffix('value', '; // marker');
92 // check conditions
93 RefactoringStatus status = await refactoring.checkAllConditions();
94 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
95 expectedMessage: 'Cannot extract name part of a property access.');
96 }
97
98 test_checkInitialConditions_nameOfProperty_propertyAccess() async {
99 indexTestUnit('''
100 main() {
101 foo().length; // marker
102 }
103 String foo() => '';
104 ''');
105 _createRefactoringWithSuffix('length', '; // marker');
106 // check conditions
107 RefactoringStatus status = await refactoring.checkAllConditions();
108 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
109 expectedMessage: 'Cannot extract name part of a property access.');
110 }
111
112 test_checkInitialConditions_namePartOfDeclaration_variable() async { 85 test_checkInitialConditions_namePartOfDeclaration_variable() async {
113 indexTestUnit(''' 86 indexTestUnit('''
114 main() { 87 main() {
115 int vvv = 0; 88 int vvv = 0;
116 } 89 }
117 '''); 90 ''');
118 _createRefactoringWithSuffix('vvv', ' = 0;'); 91 _createRefactoringWithSuffix('vvv', ' = 0;');
119 // check conditions 92 // check conditions
120 RefactoringStatus status = await refactoring.checkAllConditions(); 93 RefactoringStatus status = await refactoring.checkAllConditions();
121 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL, 94 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
122 expectedMessage: 'Cannot extract the name part of a declaration.'); 95 expectedMessage: 'Cannot extract the name part of a declaration.');
123 } 96 }
124 97
98 test_checkInitialConditions_noExpression() async {
99 indexTestUnit('''
100 main() {
101 // abc
102 }
103 ''');
104 _createRefactoringForString('abc');
105 // check conditions
106 _assertInitialConditions_fatal_selection();
107 }
108
125 test_checkInitialConditions_notPartOfFunction() async { 109 test_checkInitialConditions_notPartOfFunction() async {
126 indexTestUnit(''' 110 indexTestUnit('''
127 int a = 1 + 2; 111 int a = 1 + 2;
128 '''); 112 ''');
129 _createRefactoringForString('1 + 2'); 113 _createRefactoringForString('1 + 2');
130 // check conditions 114 // check conditions
131 RefactoringStatus status = await refactoring.checkAllConditions(); 115 RefactoringStatus status = await refactoring.checkAllConditions();
132 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL, 116 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
133 expectedMessage: 117 expectedMessage:
134 'Expression inside of function must be selected to activate this ref actoring.'); 118 'Expression inside of function must be selected to activate this ref actoring.');
135 } 119 }
136 120
137 test_checkInitialConditions_stringSelection_leadingQuote() async { 121 test_checkInitialConditions_stringSelection_leadingQuote() async {
138 indexTestUnit(''' 122 indexTestUnit('''
139 main() { 123 main() {
140 var vvv = 'abc'; 124 var vvv = 'abc';
141 } 125 }
142 '''); 126 ''');
143 _createRefactoringForString("'a"); 127 _createRefactoringForString("'a");
144 // check conditions 128 // apply refactoring
145 RefactoringStatus status = await refactoring.checkAllConditions(); 129 return _assertSuccessfulRefactoring('''
146 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL, 130 main() {
147 expectedMessage: 131 var res = 'abc';
148 'Cannot extract only leading or trailing quote of string literal.'); 132 var vvv = res;
133 }
134 ''');
149 } 135 }
150 136
151 test_checkInitialConditions_stringSelection_trailingQuote() async { 137 test_checkInitialConditions_stringSelection_trailingQuote() async {
152 indexTestUnit(''' 138 indexTestUnit('''
153 main() { 139 main() {
154 var vvv = 'abc'; 140 var vvv = 'abc';
155 } 141 }
156 '''); 142 ''');
157 _createRefactoringForString("c'"); 143 _createRefactoringForString("c'");
158 // check conditions 144 // apply refactoring
159 RefactoringStatus status = await refactoring.checkAllConditions(); 145 return _assertSuccessfulRefactoring('''
160 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL, 146 main() {
161 expectedMessage: 147 var res = 'abc';
162 'Cannot extract only leading or trailing quote of string literal.'); 148 var vvv = res;
149 }
150 ''');
163 } 151 }
164 152
165 test_checkLocalName() { 153 test_checkLocalName() {
166 indexTestUnit(''' 154 indexTestUnit('''
167 main() { 155 main() {
168 int a = 1 + 2; 156 int a = 1 + 2;
169 } 157 }
170 '''); 158 ''');
171 _createRefactoringForString('1 + 2'); 159 _createRefactoringForString('1 + 2');
172 expect(refactoring.refactoringName, 'Extract Local Variable'); 160 expect(refactoring.refactoringName, 'Extract Local Variable');
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 _createRefactoringForString('2'); 315 _createRefactoringForString('2');
328 // apply refactoring 316 // apply refactoring
329 return _assertSuccessfulRefactoring(''' 317 return _assertSuccessfulRefactoring('''
330 main() { 318 main() {
331 const res = 2; 319 const res = 2;
332 const {1: res}; 320 const {1: res};
333 } 321 }
334 '''); 322 ''');
335 } 323 }
336 324
325 test_coveringExpressions() async {
326 indexTestUnit('''
327 main() {
328 int aaa = 1;
329 int bbb = 2;
330 var c = aaa + bbb * 2 + 3;
331 }
332 ''');
333 _createRefactoring(testCode.indexOf('bb * 2'), 0);
334 // check conditions
335 await refactoring.checkInitialConditions();
336 List<String> subExpressions = <String>[];
337 for (int i = 0; i < refactoring.coveringExpressionOffsets.length; i++) {
338 int offset = refactoring.coveringExpressionOffsets[i];
339 int length = refactoring.coveringExpressionLengths[i];
340 subExpressions.add(testCode.substring(offset, offset + length));
341 }
342 expect(subExpressions,
343 ['bbb', 'bbb * 2', 'aaa + bbb * 2', 'aaa + bbb * 2 + 3']);
344 }
345
337 test_fragmentExpression() { 346 test_fragmentExpression() {
338 indexTestUnit(''' 347 indexTestUnit('''
339 main() { 348 main() {
340 int a = 1 + 2 + 3 + 4; 349 int a = 1 + 2 + 3 + 4;
341 } 350 }
342 '''); 351 ''');
343 _createRefactoringForString('2 + 3'); 352 _createRefactoringForString('2 + 3');
344 // apply refactoring 353 // apply refactoring
345 return _assertSuccessfulRefactoring(''' 354 return _assertSuccessfulRefactoring('''
346 main() { 355 main() {
347 var res = 2 + 3; 356 var res = 1 + 2 + 3;
348 int a = 1 + res + 4; 357 int a = res + 4;
349 } 358 }
350 '''); 359 ''');
351 } 360 }
352 361
353 test_fragmentExpression_leadingNotWhitespace() { 362 test_fragmentExpression_leadingNotWhitespace() {
354 indexTestUnit(''' 363 indexTestUnit('''
355 main() { 364 main() {
356 int a = 1 + 2 + 3 + 4; 365 int a = 1 + 2 + 3 + 4;
357 } 366 }
358 '''); 367 ''');
359 _createRefactoringForString('+ 2'); 368 _createRefactoringForString('+ 2');
360 // check conditions 369 // apply refactoring
361 return _assertInitialConditions_fatal_selection(); 370 return _assertSuccessfulRefactoring('''
371 main() {
372 var res = 1 + 2;
373 int a = res + 3 + 4;
374 }
375 ''');
362 } 376 }
363 377
364 test_fragmentExpression_leadingPartialSelection() { 378 test_fragmentExpression_leadingPartialSelection() {
365 indexTestUnit(''' 379 indexTestUnit('''
366 main() { 380 main() {
367 int a = 111 + 2 + 3 + 4; 381 int a = 111 + 2 + 3 + 4;
368 } 382 }
369 '''); 383 ''');
370 _createRefactoringForString('11 + 2'); 384 _createRefactoringForString('11 + 2');
371 // check conditions 385 // apply refactoring
372 return _assertInitialConditions_fatal_selection(); 386 return _assertSuccessfulRefactoring('''
387 main() {
388 var res = 111 + 2;
389 int a = res + 3 + 4;
390 }
391 ''');
373 } 392 }
374 393
375 test_fragmentExpression_leadingWhitespace() { 394 test_fragmentExpression_leadingWhitespace() {
376 indexTestUnit(''' 395 indexTestUnit('''
377 main() { 396 main() {
378 int a = 1 + 2 + 3 + 4; 397 int a = 1 + 2 + 3 + 4;
379 } 398 }
380 '''); 399 ''');
381 _createRefactoringForString(' 2 + 3'); 400 _createRefactoringForString(' 2 + 3');
382 // apply refactoring 401 // apply refactoring
383 return _assertSuccessfulRefactoring(''' 402 return _assertSuccessfulRefactoring('''
384 main() { 403 main() {
385 var res = 2 + 3; 404 var res = 1 + 2 + 3;
386 int a = 1 +res + 4; 405 int a = res + 4;
387 } 406 }
388 '''); 407 ''');
389 } 408 }
390 409
391 test_fragmentExpression_notAssociativeOperator() { 410 test_fragmentExpression_notAssociativeOperator() {
392 indexTestUnit(''' 411 indexTestUnit('''
393 main() { 412 main() {
394 int a = 1 - 2 - 3 - 4; 413 int a = 1 - 2 - 3 - 4;
395 } 414 }
396 '''); 415 ''');
397 _createRefactoringForString('2 - 3'); 416 _createRefactoringForString('2 - 3');
398 // check conditions 417 // apply refactoring
399 return _assertInitialConditions_fatal_selection(); 418 return _assertSuccessfulRefactoring('''
419 main() {
420 var res = 1 - 2 - 3;
421 int a = res - 4;
422 }
423 ''');
400 } 424 }
401 425
402 test_fragmentExpression_trailingNotWhitespace() { 426 test_fragmentExpression_trailingNotWhitespace() {
403 indexTestUnit(''' 427 indexTestUnit('''
404 main() { 428 main() {
405 int a = 1 + 2 + 3 + 4; 429 int a = 1 + 2 + 3 + 4;
406 } 430 }
407 '''); 431 ''');
408 _createRefactoringForString('2 + 3 +'); 432 _createRefactoringForString('1 + 2 +');
409 // check conditions 433 // apply refactoring
410 return _assertInitialConditions_fatal_selection(); 434 return _assertSuccessfulRefactoring('''
435 main() {
436 var res = 1 + 2 + 3;
437 int a = res + 4;
438 }
439 ''');
411 } 440 }
412 441
413 test_fragmentExpression_trailingPartialSelection() { 442 test_fragmentExpression_trailingPartialSelection() {
414 indexTestUnit(''' 443 indexTestUnit('''
415 main() { 444 main() {
416 int a = 1 + 2 + 3 + 444; 445 int a = 1 + 2 + 333 + 4;
417 } 446 }
418 '''); 447 ''');
419 _createRefactoringForString('2 + 3 + 44'); 448 _createRefactoringForString('2 + 33');
420 // check conditions 449 // apply refactoring
421 return _assertInitialConditions_fatal_selection(); 450 return _assertSuccessfulRefactoring('''
451 main() {
452 var res = 1 + 2 + 333;
453 int a = res + 4;
454 }
455 ''');
422 } 456 }
423 457
424 test_fragmentExpression_trailingWhitespace() { 458 test_fragmentExpression_trailingWhitespace() {
425 indexTestUnit(''' 459 indexTestUnit('''
426 main() { 460 main() {
427 int a = 1 + 2 + 3 + 4; 461 int a = 1 + 2 + 3 + 4;
428 } 462 }
429 '''); 463 ''');
430 _createRefactoringForString('2 + 3 '); 464 _createRefactoringForString('2 + 3 ');
431 // apply refactoring 465 // apply refactoring
432 return _assertSuccessfulRefactoring(''' 466 return _assertSuccessfulRefactoring('''
433 main() { 467 main() {
434 var res = 2 + 3 ; 468 var res = 1 + 2 + 3;
435 int a = 1 + res+ 4; 469 int a = res + 4;
436 } 470 }
437 '''); 471 ''');
438 } 472 }
439 473
440 test_guessNames_fragmentExpression() async { 474 test_guessNames_fragmentExpression() async {
441 indexTestUnit(''' 475 indexTestUnit('''
442 main() { 476 main() {
443 var a = 111 + 222 + 333 + 444; 477 var a = 111 + 222 + 333 + 444;
444 } 478 }
445 '''); 479 ''');
446 _createRefactoringForString('222 + 333'); 480 _createRefactoringForString('222 + 333');
447 // check guesses 481 // check guesses
448 await refactoring.checkInitialConditions(); 482 await refactoring.checkInitialConditions();
449 expect(refactoring.names, isEmpty); 483 expect(refactoring.names, unorderedEquals(['i']));
450 } 484 }
451 485
452 test_guessNames_singleExpression() async { 486 test_guessNames_singleExpression() async {
453 indexTestUnit(''' 487 indexTestUnit('''
454 class TreeItem {} 488 class TreeItem {}
455 TreeItem getSelectedItem() => null; 489 TreeItem getSelectedItem() => null;
456 process(my) {} 490 process(my) {}
457 main() { 491 main() {
458 process(getSelectedItem()); // marker 492 process(getSelectedItem()); // marker
459 } 493 }
(...skipping 10 matching lines...) Expand all
470 main() { 504 main() {
471 var s = 'Hello Bob... welcome to Dart!'; 505 var s = 'Hello Bob... welcome to Dart!';
472 } 506 }
473 '''); 507 ''');
474 _createRefactoringForString('Hello Bob'); 508 _createRefactoringForString('Hello Bob');
475 // check guesses 509 // check guesses
476 await refactoring.checkInitialConditions(); 510 await refactoring.checkInitialConditions();
477 expect(refactoring.names, unorderedEquals(['helloBob', 'bob'])); 511 expect(refactoring.names, unorderedEquals(['helloBob', 'bob']));
478 } 512 }
479 513
480 test_occurences_differentVariable() { 514 test_occurrences_differentVariable() {
481 indexTestUnit(''' 515 indexTestUnit('''
482 main() { 516 main() {
483 { 517 {
484 int v = 1; 518 int v = 1;
485 print(v + 1); // marker 519 print(v + 1); // marker
486 print(v + 1); 520 print(v + 1);
487 } 521 }
488 { 522 {
489 int v = 2; 523 int v = 2;
490 print(v + 1); 524 print(v + 1);
(...skipping 11 matching lines...) Expand all
502 print(res); 536 print(res);
503 } 537 }
504 { 538 {
505 int v = 2; 539 int v = 2;
506 print(v + 1); 540 print(v + 1);
507 } 541 }
508 } 542 }
509 '''); 543 ''');
510 } 544 }
511 545
512 test_occurences_disableOccurences() { 546 test_occurrences_disableOccurrences() {
513 indexTestUnit(''' 547 indexTestUnit('''
514 int foo() => 42; 548 int foo() => 42;
515 main() { 549 main() {
516 int a = 1 + foo(); 550 int a = 1 + foo();
517 int b = 2 + foo(); // marker 551 int b = 2 + foo(); // marker
518 } 552 }
519 '''); 553 ''');
520 _createRefactoringWithSuffix('foo()', '; // marker'); 554 _createRefactoringWithSuffix('foo()', '; // marker');
521 refactoring.extractAll = false; 555 refactoring.extractAll = false;
522 // apply refactoring 556 // apply refactoring
523 return _assertSuccessfulRefactoring(''' 557 return _assertSuccessfulRefactoring('''
524 int foo() => 42; 558 int foo() => 42;
525 main() { 559 main() {
526 int a = 1 + foo(); 560 int a = 1 + foo();
527 var res = foo(); 561 var res = foo();
528 int b = 2 + res; // marker 562 int b = 2 + res; // marker
529 } 563 }
530 '''); 564 ''');
531 } 565 }
532 566
533 test_occurences_ignore_assignmentLeftHandSize() { 567 test_occurrences_ignore_assignmentLeftHandSize() {
534 indexTestUnit(''' 568 indexTestUnit('''
535 main() { 569 main() {
536 int v = 1; 570 int v = 1;
537 v = 2; 571 v = 2;
538 print(() {v = 2;}); 572 print(() {v = 2;});
539 print(1 + (() {v = 2; return 3;})()); 573 print(1 + (() {v = 2; return 3;})());
540 print(v); // marker 574 print(v); // marker
541 } 575 }
542 '''); 576 ''');
543 _createRefactoringWithSuffix('v', '); // marker'); 577 _createRefactoringWithSuffix('v', '); // marker');
544 // apply refactoring 578 // apply refactoring
545 return _assertSuccessfulRefactoring(''' 579 return _assertSuccessfulRefactoring('''
546 main() { 580 main() {
547 int v = 1; 581 int v = 1;
548 v = 2; 582 v = 2;
549 print(() {v = 2;}); 583 print(() {v = 2;});
550 print(1 + (() {v = 2; return 3;})()); 584 print(1 + (() {v = 2; return 3;})());
551 var res = v; 585 var res = v;
552 print(res); // marker 586 print(res); // marker
553 } 587 }
554 '''); 588 ''');
555 } 589 }
556 590
557 test_occurences_ignore_nameOfVariableDeclariton() { 591 test_occurrences_ignore_nameOfVariableDeclaration() {
558 indexTestUnit(''' 592 indexTestUnit('''
559 main() { 593 main() {
560 int v = 1; 594 int v = 1;
561 print(v); // marker 595 print(v); // marker
562 } 596 }
563 '''); 597 ''');
564 _createRefactoringWithSuffix('v', '); // marker'); 598 _createRefactoringWithSuffix('v', '); // marker');
565 // apply refactoring 599 // apply refactoring
566 return _assertSuccessfulRefactoring(''' 600 return _assertSuccessfulRefactoring('''
567 main() { 601 main() {
568 int v = 1; 602 int v = 1;
569 var res = v; 603 var res = v;
570 print(res); // marker 604 print(res); // marker
571 } 605 }
572 '''); 606 ''');
573 } 607 }
574 608
575 test_occurences_singleExpression() { 609 test_occurrences_singleExpression() {
576 indexTestUnit(''' 610 indexTestUnit('''
577 int foo() => 42; 611 int foo() => 42;
578 main() { 612 main() {
579 int a = 1 + foo(); 613 int a = 1 + foo();
580 int b = 2 + foo(); // marker 614 int b = 2 + foo(); // marker
581 } 615 }
582 '''); 616 ''');
583 _createRefactoringWithSuffix('foo()', '; // marker'); 617 _createRefactoringWithSuffix('foo()', '; // marker');
584 // apply refactoring 618 // apply refactoring
585 return _assertSuccessfulRefactoring(''' 619 return _assertSuccessfulRefactoring('''
586 int foo() => 42; 620 int foo() => 42;
587 main() { 621 main() {
588 var res = foo(); 622 var res = foo();
589 int a = 1 + res; 623 int a = 1 + res;
590 int b = 2 + res; // marker 624 int b = 2 + res; // marker
591 } 625 }
592 '''); 626 ''');
593 } 627 }
594 628
595 test_occurences_useDominator() { 629 test_occurrences_useDominator() {
596 indexTestUnit(''' 630 indexTestUnit('''
597 main() { 631 main() {
598 if (true) { 632 if (true) {
599 print(42); 633 print(42);
600 } else { 634 } else {
601 print(42); 635 print(42);
602 } 636 }
603 } 637 }
604 '''); 638 ''');
605 _createRefactoringForString('42'); 639 _createRefactoringForString('42');
606 // apply refactoring 640 // apply refactoring
607 return _assertSuccessfulRefactoring(''' 641 return _assertSuccessfulRefactoring('''
608 main() { 642 main() {
609 var res = 42; 643 var res = 42;
610 if (true) { 644 if (true) {
611 print(res); 645 print(res);
612 } else { 646 } else {
613 print(res); 647 print(res);
614 } 648 }
615 } 649 }
616 '''); 650 ''');
617 } 651 }
618 652
619 test_occurences_whenComment() { 653 test_occurrences_whenComment() {
620 indexTestUnit(''' 654 indexTestUnit('''
621 int foo() => 42; 655 int foo() => 42;
622 main() { 656 main() {
623 /*int a = 1 + foo();*/ 657 /*int a = 1 + foo();*/
624 int b = 2 + foo(); // marker 658 int b = 2 + foo(); // marker
625 } 659 }
626 '''); 660 ''');
627 _createRefactoringWithSuffix('foo()', '; // marker'); 661 _createRefactoringWithSuffix('foo()', '; // marker');
628 // apply refactoring 662 // apply refactoring
629 return _assertSuccessfulRefactoring(''' 663 return _assertSuccessfulRefactoring('''
630 int foo() => 42; 664 int foo() => 42;
631 main() { 665 main() {
632 /*int a = 1 + foo();*/ 666 /*int a = 1 + foo();*/
633 var res = foo(); 667 var res = foo();
634 int b = 2 + res; // marker 668 int b = 2 + res; // marker
635 } 669 }
636 '''); 670 ''');
637 } 671 }
638 672
639 test_occurences_withSpace() { 673 test_occurrences_withSpace() {
640 indexTestUnit(''' 674 indexTestUnit('''
641 int foo(String s) => 42; 675 int foo(String s) => 42;
642 main() { 676 main() {
643 int a = 1 + foo('has space'); 677 int a = 1 + foo('has space');
644 int b = 2 + foo('has space'); // marker 678 int b = 2 + foo('has space'); // marker
645 } 679 }
646 '''); 680 ''');
647 _createRefactoringWithSuffix("foo('has space')", '; // marker'); 681 _createRefactoringWithSuffix("foo('has space')", '; // marker');
648 // apply refactoring 682 // apply refactoring
649 return _assertSuccessfulRefactoring(''' 683 return _assertSuccessfulRefactoring('''
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 '''); 827 ''');
794 } 828 }
795 829
796 test_singleExpression_leadingNotWhitespace() { 830 test_singleExpression_leadingNotWhitespace() {
797 indexTestUnit(''' 831 indexTestUnit('''
798 main() { 832 main() {
799 int a = 12 + 345; 833 int a = 12 + 345;
800 } 834 }
801 '''); 835 ''');
802 _createRefactoringForString('+ 345'); 836 _createRefactoringForString('+ 345');
803 // check conditions 837 // apply refactoring
804 return _assertInitialConditions_fatal_selection(); 838 return _assertSuccessfulRefactoring('''
839 main() {
840 var res = 12 + 345;
841 int a = res;
842 }
843 ''');
805 } 844 }
806 845
807 test_singleExpression_leadingWhitespace() { 846 test_singleExpression_leadingWhitespace() {
808 indexTestUnit(''' 847 indexTestUnit('''
809 main() { 848 main() {
810 int a = 12 /*abc*/ + 345; 849 int a = 1 /*abc*/ + 2 + 345;
811 } 850 }
812 '''); 851 ''');
813 _createRefactoringForString('12 /*abc*/'); 852 _createRefactoringForString('1 /*abc*/');
814 // apply refactoring 853 // apply refactoring
815 return _assertSuccessfulRefactoring(''' 854 return _assertSuccessfulRefactoring('''
816 main() { 855 main() {
817 var res = 12 /*abc*/; 856 var res = 1 /*abc*/ + 2;
818 int a = res + 345; 857 int a = res + 345;
819 } 858 }
820 '''); 859 ''');
821 } 860 }
822 861
862 test_singleExpression_nameOfProperty_prefixedIdentifier() async {
863 indexTestUnit('''
864 main(p) {
865 var v = p.value; // marker
866 }
867 ''');
868 _createRefactoringWithSuffix('value', '; // marker');
869 // apply refactoring
870 return _assertSuccessfulRefactoring('''
871 main(p) {
872 var res = p.value;
873 var v = res; // marker
874 }
875 ''');
876 }
877
878 test_singleExpression_nameOfProperty_propertyAccess() async {
879 indexTestUnit('''
880 main() {
881 var v = foo().length; // marker
882 }
883 String foo() => '';
884 ''');
885 _createRefactoringWithSuffix('length', '; // marker');
886 // apply refactoring
887 return _assertSuccessfulRefactoring('''
888 main() {
889 var res = foo().length;
890 var v = res; // marker
891 }
892 String foo() => '';
893 ''');
894 }
895
823 /** 896 /**
824 * Here we use knowledge how exactly `1 + 2 + 3 + 41 is parsed. We know that 897 * Here we use knowledge how exactly `1 + 2 + 3 + 41 is parsed. We know that
825 * `1 + 2` will be a separate and complete binary expression, so it can be 898 * `1 + 2` will be a separate and complete binary expression, so it can be
826 * handled as a single expression. 899 * handled as a single expression.
827 */ 900 */
828 test_singleExpression_partOfBinaryExpression() { 901 test_singleExpression_partOfBinaryExpression() {
829 indexTestUnit(''' 902 indexTestUnit('''
830 main() { 903 main() {
831 int a = 1 + 2 + 3 + 4; 904 int a = 1 + 2 + 3 + 4;
832 } 905 }
833 '''); 906 ''');
834 _createRefactoringForString('1 + 2'); 907 _createRefactoringForString('1 + 2');
835 // apply refactoring 908 // apply refactoring
836 return _assertSuccessfulRefactoring(''' 909 return _assertSuccessfulRefactoring('''
837 main() { 910 main() {
838 var res = 1 + 2; 911 var res = 1 + 2;
839 int a = res + 3 + 4; 912 int a = res + 3 + 4;
840 } 913 }
841 '''); 914 ''');
842 } 915 }
843 916
844 test_singleExpression_trailingComment() {
845 indexTestUnit('''
846 main() {
847 int a = 1 + 2;
848 }
849 ''');
850 _createRefactoringForString(' 1 + 2');
851 // apply refactoring
852 return _assertSuccessfulRefactoring('''
853 main() {
854 var res = 1 + 2;
855 int a = res;
856 }
857 ''');
858 }
859
860 test_singleExpression_trailingNotWhitespace() { 917 test_singleExpression_trailingNotWhitespace() {
861 indexTestUnit(''' 918 indexTestUnit('''
862 main() { 919 main() {
863 int a = 12 + 345; 920 int a = 12 + 345;
864 } 921 }
865 '''); 922 ''');
866 _createRefactoringForString('12 +'); 923 _createRefactoringForString('12 +');
867 // check conditions 924 // apply refactoring
868 return _assertInitialConditions_fatal_selection(); 925 return _assertSuccessfulRefactoring('''
926 main() {
927 var res = 12 + 345;
928 int a = res;
929 }
930 ''');
869 } 931 }
870 932
871 test_singleExpression_trailingWhitespace() { 933 test_singleExpression_trailingWhitespace() {
872 indexTestUnit(''' 934 indexTestUnit('''
873 main() { 935 main() {
874 int a = 1 + 2 ; 936 int a = 1 + 2 ;
875 } 937 }
876 '''); 938 ''');
877 _createRefactoringForString('1 + 2 '); 939 _createRefactoringForString('1 + 2 ');
878 // apply refactoring 940 // apply refactoring
879 return _assertSuccessfulRefactoring(''' 941 return _assertSuccessfulRefactoring('''
880 main() { 942 main() {
881 var res = 1 + 2 ; 943 var res = 1 + 2;
882 int a = res; 944 int a = res ;
883 } 945 }
884 '''); 946 ''');
885 } 947 }
886 948
887 test_stringLiteral_part() { 949 test_stringLiteral_part() {
888 indexTestUnit(''' 950 indexTestUnit('''
889 main() { 951 main() {
890 print('abcdefgh'); 952 print('abcdefgh');
891 } 953 }
892 '''); 954 ''');
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 } 999 }
938 1000
939 Future _assertInitialConditions_fatal_selection() async { 1001 Future _assertInitialConditions_fatal_selection() async {
940 RefactoringStatus status = await refactoring.checkInitialConditions(); 1002 RefactoringStatus status = await refactoring.checkInitialConditions();
941 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL, 1003 assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
942 expectedMessage: 1004 expectedMessage:
943 'Expression must be selected to activate this refactoring.'); 1005 'Expression must be selected to activate this refactoring.');
944 } 1006 }
945 1007
946 /** 1008 /**
947 * Checks that all conditions are OK and the result of applying the [Change] 1009 * Checks that all conditions are OK and the result of applying the
948 * to [testUnit] is [expectedCode]. 1010 * [SourceChange] to [testUnit] is [expectedCode].
949 */ 1011 */
950 Future _assertSuccessfulRefactoring(String expectedCode) async { 1012 Future _assertSuccessfulRefactoring(String expectedCode) async {
951 await assertRefactoringConditionsOK(); 1013 await assertRefactoringConditionsOK();
952 SourceChange refactoringChange = await refactoring.createChange(); 1014 SourceChange refactoringChange = await refactoring.createChange();
953 this.refactoringChange = refactoringChange; 1015 this.refactoringChange = refactoringChange;
954 assertTestChangeResult(expectedCode); 1016 assertTestChangeResult(expectedCode);
955 } 1017 }
956 1018
957 void _createRefactoring(int offset, int length) { 1019 void _createRefactoring(int offset, int length) {
958 refactoring = new ExtractLocalRefactoring(testUnit, offset, length); 1020 refactoring = new ExtractLocalRefactoring(testUnit, offset, length);
959 refactoring.name = 'res'; 1021 refactoring.name = 'res';
960 } 1022 }
961 1023
962 /** 1024 /**
963 * Creates a new refactoring in [refactoring] for the selection range of the 1025 * Creates a new refactoring in [refactoring] for the selection range of the
964 * given [search] pattern. 1026 * given [search] pattern.
965 */ 1027 */
966 void _createRefactoringForString(String search) { 1028 void _createRefactoringForString(String search) {
967 int offset = findOffset(search); 1029 int offset = findOffset(search);
968 int length = search.length; 1030 int length = search.length;
969 _createRefactoring(offset, length); 1031 _createRefactoring(offset, length);
970 } 1032 }
971 1033
972 void _createRefactoringWithSuffix(String selectionSearch, String suffix) { 1034 void _createRefactoringWithSuffix(String selectionSearch, String suffix) {
973 int offset = findOffset(selectionSearch + suffix); 1035 int offset = findOffset(selectionSearch + suffix);
974 int length = selectionSearch.length; 1036 int length = selectionSearch.length;
975 _createRefactoring(offset, length); 1037 _createRefactoring(offset, length);
976 } 1038 }
977 } 1039 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/services/refactoring/refactoring.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698