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

Side by Side Diff: pkg/analysis_services/test/refactoring/rename_class_member_test.dart

Issue 484733003: Import analysis_services.dart into analysis_server.dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library test.services.refactoring.rename_class_member;
6
7 import 'package:analysis_services/correction/status.dart';
8 import 'package:analysis_testing/reflective_tests.dart';
9 import 'package:unittest/unittest.dart';
10
11 import 'abstract_rename.dart';
12
13
14 main() {
15 groupSep = ' | ';
16 runReflectiveTests(RenameClassMemberTest);
17 }
18
19
20 @ReflectiveTestCase()
21 class RenameClassMemberTest extends RenameRefactoringTest {
22 test_checkFinalConditions_OK_noShadow() {
23 indexTestUnit('''
24 class A {
25 int newName;
26 }
27 class B {
28 test() {}
29 }
30 class C extends A {
31 main() {
32 print(newName);
33 }
34 }
35 ''');
36 createRenameRefactoringAtString('test() {}');
37 // check status
38 refactoring.newName = 'newName';
39 return refactoring.checkFinalConditions().then((status) {
40 assertRefactoringStatusOK(status);
41 });
42 }
43
44 test_checkFinalConditions_hasMember_MethodElement() {
45 indexTestUnit('''
46 class A {
47 test() {}
48 newName() {} // existing
49 }
50 ''');
51 createRenameRefactoringAtString('test() {}');
52 // check status
53 refactoring.newName = 'newName';
54 return refactoring.checkFinalConditions().then((status) {
55 assertRefactoringStatus(
56 status,
57 RefactoringStatusSeverity.ERROR,
58 expectedMessage: "Class 'A' already declares method with name 'newName '.",
59 expectedContextSearch: 'newName() {} // existing');
60 });
61 }
62
63 test_checkFinalConditions_shadowed_byLocal_OK_qualifiedReference() {
64 indexTestUnit('''
65 class A {
66 test() {}
67 main() {
68 var newName;
69 this.test(); // marker
70 }
71 }
72 ''');
73 createRenameRefactoringAtString('test() {}');
74 // check status
75 refactoring.newName = 'newName';
76 return refactoring.checkFinalConditions().then((status) {
77 assertRefactoringStatusOK(status);
78 });
79 }
80
81 test_checkFinalConditions_shadowed_byLocal_OK_renamedNotUsed() {
82 indexTestUnit('''
83 class A {
84 test() {}
85 main() {
86 var newName;
87 }
88 }
89 ''');
90 createRenameRefactoringAtString('test() {}');
91 // check status
92 refactoring.newName = 'newName';
93 return refactoring.checkFinalConditions().then((status) {
94 assertRefactoringStatusOK(status);
95 });
96 }
97
98 test_checkFinalConditions_shadowed_byLocal_inSameClass() {
99 indexTestUnit('''
100 class A {
101 test() {}
102 main() {
103 var newName;
104 test(); // marker
105 }
106 }
107 ''');
108 createRenameRefactoringAtString('test() {}');
109 // check status
110 refactoring.newName = 'newName';
111 return refactoring.checkFinalConditions().then((status) {
112 assertRefactoringStatus(
113 status,
114 RefactoringStatusSeverity.ERROR,
115 expectedMessage:
116 "Usage of renamed method will be shadowed by local variable 'newNa me'.",
117 expectedContextSearch: 'test(); // marker');
118 });
119 }
120
121 test_checkFinalConditions_shadowed_byLocal_inSubClass() {
122 indexTestUnit('''
123 class A {
124 test() {}
125 }
126 class B extends A {
127 main() {
128 var newName;
129 test(); // marker
130 }
131 }
132 ''');
133 createRenameRefactoringAtString('test() {}');
134 // check status
135 refactoring.newName = 'newName';
136 return refactoring.checkFinalConditions().then((status) {
137 assertRefactoringStatus(
138 status,
139 RefactoringStatusSeverity.ERROR,
140 expectedMessage:
141 "Usage of renamed method will be shadowed by local variable 'newNa me'.",
142 expectedContextSearch: 'test(); // marker');
143 });
144 }
145
146 test_checkFinalConditions_shadowed_byParameter_inSameClass() {
147 indexTestUnit('''
148 class A {
149 test() {}
150 main(newName) {
151 test(); // marker
152 }
153 }
154 ''');
155 createRenameRefactoringAtString('test() {}');
156 // check status
157 refactoring.newName = 'newName';
158 return refactoring.checkFinalConditions().then((status) {
159 assertRefactoringStatus(
160 status,
161 RefactoringStatusSeverity.ERROR,
162 expectedMessage:
163 "Usage of renamed method will be shadowed by parameter 'newName'." ,
164 expectedContextSearch: 'test(); // marker');
165 });
166 }
167
168 test_checkFinalConditions_shadowed_inSubClass() {
169 indexTestUnit('''
170 class A {
171 newName() {} // marker
172 }
173 class B extends A {
174 test() {}
175 main() {
176 newName();
177 }
178 }
179 ''');
180 createRenameRefactoringAtString('test() {}');
181 // check status
182 refactoring.newName = 'newName';
183 return refactoring.checkFinalConditions().then((status) {
184 assertRefactoringStatus(
185 status,
186 RefactoringStatusSeverity.ERROR,
187 expectedMessage: "Renamed method will shadow method 'A.newName'.",
188 expectedContextSearch: 'newName() {} // marker');
189 });
190 }
191
192 test_checkFinalConditions_shadowsSuper_MethodElement() {
193 indexTestUnit('''
194 class A {
195 test() {}
196 }
197 class B extends A {
198 newName() {} // marker
199 main() {
200 test();
201 }
202 }
203 ''');
204 createRenameRefactoringAtString('test() {}');
205 // check status
206 refactoring.newName = 'newName';
207 return refactoring.checkFinalConditions().then((status) {
208 assertRefactoringStatus(
209 status,
210 RefactoringStatusSeverity.ERROR,
211 expectedMessage: "Renamed method will be shadowed by method 'B.newName '.",
212 expectedContextSearch: 'newName() {} // marker');
213 });
214 }
215
216 test_checkFinalConditions_shadowsSuper_inSubClass_FieldElement() {
217 indexTestUnit('''
218 class A {
219 int newName; // marker
220 }
221 class B extends A {
222 test() {}
223 }
224 class C extends B {
225 main() {
226 print(newName);
227 }
228 }
229 ''');
230 createRenameRefactoringAtString('test() {}');
231 // check status
232 refactoring.newName = 'newName';
233 return refactoring.checkFinalConditions().then((status) {
234 assertRefactoringStatus(
235 status,
236 RefactoringStatusSeverity.ERROR,
237 expectedMessage: "Renamed method will shadow field 'A.newName'.",
238 expectedContextSearch: 'newName; // marker');
239 });
240 }
241
242 test_checkInitialConditions_operator() {
243 indexTestUnit('''
244 class A {
245 operator -(other) => this;
246 }
247 ''');
248 createRenameRefactoringAtString('-(other)');
249 // check status
250 refactoring.newName = 'newName';
251 return refactoring.checkInitialConditions().then((status) {
252 assertRefactoringStatus(status, RefactoringStatusSeverity.FATAL);
253 });
254 }
255
256 test_checkNewName_FieldElement() {
257 indexTestUnit('''
258 class A {
259 int test;
260 }
261 ''');
262 createRenameRefactoringAtString('test;');
263 // null
264 refactoring.newName = null;
265 assertRefactoringStatus(
266 refactoring.checkNewName(),
267 RefactoringStatusSeverity.ERROR,
268 expectedMessage: "Field name must not be null.");
269 // OK
270 refactoring.newName = 'newName';
271 assertRefactoringStatusOK(refactoring.checkNewName());
272 }
273
274 test_checkNewName_FieldElement_const() {
275 indexTestUnit('''
276 class A {
277 static const int TEST = 0;
278 }
279 ''');
280 createRenameRefactoringAtString('TEST =');
281 // null
282 refactoring.newName = null;
283 assertRefactoringStatus(
284 refactoring.checkNewName(),
285 RefactoringStatusSeverity.ERROR,
286 expectedMessage: "Constant name must not be null.");
287 // not upper case
288 refactoring.newName = 'newName';
289 assertRefactoringStatus(
290 refactoring.checkNewName(),
291 RefactoringStatusSeverity.WARNING);
292 // OK
293 refactoring.newName = 'NEW_NAME';
294 assertRefactoringStatusOK(refactoring.checkNewName());
295 }
296
297 test_checkNewName_MethodElement() {
298 indexTestUnit('''
299 class A {
300 test() {}
301 }
302 ''');
303 createRenameRefactoringAtString('test() {}');
304 // null
305 refactoring.newName = null;
306 assertRefactoringStatus(
307 refactoring.checkNewName(),
308 RefactoringStatusSeverity.ERROR,
309 expectedMessage: "Method name must not be null.");
310 // empty
311 refactoring.newName = '';
312 assertRefactoringStatus(
313 refactoring.checkNewName(),
314 RefactoringStatusSeverity.ERROR,
315 expectedMessage: "Method name must not be empty.");
316 // same
317 refactoring.newName = 'test';
318 assertRefactoringStatus(
319 refactoring.checkNewName(),
320 RefactoringStatusSeverity.FATAL,
321 expectedMessage: "The new name must be different than the current name." );
322 // OK
323 refactoring.newName = 'newName';
324 assertRefactoringStatusOK(refactoring.checkNewName());
325 }
326
327 test_createChange_FieldElement() {
328 indexTestUnit('''
329 class A {
330 int test; // marker
331 main() {
332 print(test);
333 test = 1;
334 test += 2;
335 }
336 }
337 class B extends A {
338 }
339 class C extends B {
340 get test => 1;
341 set test(x) {}
342 }
343 main() {
344 A a = new A();
345 B b = new B();
346 C c = new C();
347 print(a.test);
348 a.test = 1;
349 a.test += 2;
350 print(b.test);
351 b.test = 1;
352 print(c.test);
353 c.test = 1;
354 }
355 ''');
356 // configure refactoring
357 createRenameRefactoringAtString('test; // marker');
358 expect(refactoring.refactoringName, 'Rename Field');
359 expect(refactoring.oldName, 'test');
360 refactoring.newName = 'newName';
361 // validate change
362 return assertSuccessfulRename('''
363 class A {
364 int newName; // marker
365 main() {
366 print(newName);
367 newName = 1;
368 newName += 2;
369 }
370 }
371 class B extends A {
372 }
373 class C extends B {
374 get newName => 1;
375 set newName(x) {}
376 }
377 main() {
378 A a = new A();
379 B b = new B();
380 C c = new C();
381 print(a.newName);
382 a.newName = 1;
383 a.newName += 2;
384 print(b.newName);
385 b.newName = 1;
386 print(c.newName);
387 c.newName = 1;
388 }
389 ''');
390 }
391
392 test_createChange_FieldElement_constructorFieldInitializer() {
393 indexTestUnit('''
394 class A {
395 final test;
396 A() : test = 5;
397 }
398 ''');
399 // configure refactoring
400 createRenameRefactoringAtString('test;');
401 expect(refactoring.refactoringName, 'Rename Field');
402 expect(refactoring.oldName, 'test');
403 refactoring.newName = 'newName';
404 // validate change
405 return assertSuccessfulRename('''
406 class A {
407 final newName;
408 A() : newName = 5;
409 }
410 ''');
411 }
412
413 test_createChange_FieldElement_fieldFormalParameter() {
414 indexTestUnit('''
415 class A {
416 final test;
417 A(this.test);
418 }
419 ''');
420 // configure refactoring
421 createRenameRefactoringAtString('test;');
422 expect(refactoring.refactoringName, 'Rename Field');
423 expect(refactoring.oldName, 'test');
424 refactoring.newName = 'newName';
425 // validate change
426 return assertSuccessfulRename('''
427 class A {
428 final newName;
429 A(this.newName);
430 }
431 ''');
432 }
433
434 test_createChange_FieldElement_invocation() {
435 indexTestUnit('''
436 typedef F(a);
437 class A {
438 F test;
439 main() {
440 test(1);
441 }
442 }
443 main() {
444 A a = new A();
445 a.test(2);
446 }
447 ''');
448 // configure refactoring
449 createRenameRefactoringAtString('test(2);');
450 expect(refactoring.refactoringName, 'Rename Field');
451 expect(refactoring.oldName, 'test');
452 refactoring.newName = 'newName';
453 // validate change
454 return assertSuccessfulRename('''
455 typedef F(a);
456 class A {
457 F newName;
458 main() {
459 newName(1);
460 }
461 }
462 main() {
463 A a = new A();
464 a.newName(2);
465 }
466 ''');
467 }
468
469 test_createChange_MethodElement() {
470 indexTestUnit('''
471 class A {
472 test() {}
473 }
474 class B extends A {
475 test() {} // marker
476 }
477 class C extends B {
478 test() {}
479 }
480 class D implements A {
481 test() {}
482 }
483 class E {
484 test() {}
485 }
486 main() {
487 A a = new A();
488 B b = new B();
489 C c = new C();
490 D d = new D();
491 E e = new E();
492 a.test();
493 b.test();
494 c.test();
495 d.test();
496 e.test();
497 }
498 ''');
499 // configure refactoring
500 createRenameRefactoringAtString('test() {} // marker');
501 expect(refactoring.refactoringName, 'Rename Method');
502 expect(refactoring.oldName, 'test');
503 refactoring.newName = 'newName';
504 // validate change
505 return assertSuccessfulRename('''
506 class A {
507 newName() {}
508 }
509 class B extends A {
510 newName() {} // marker
511 }
512 class C extends B {
513 newName() {}
514 }
515 class D implements A {
516 newName() {}
517 }
518 class E {
519 test() {}
520 }
521 main() {
522 A a = new A();
523 B b = new B();
524 C c = new C();
525 D d = new D();
526 E e = new E();
527 a.newName();
528 b.newName();
529 c.newName();
530 d.newName();
531 e.test();
532 }
533 ''');
534 }
535
536 test_createChange_MethodElement_potential() {
537 indexTestUnit('''
538 class A {
539 test() {}
540 }
541 main(var a) {
542 a.test(); // 1
543 new A().test();
544 a.test(); // 2
545 }
546 ''');
547 // configure refactoring
548 createRenameRefactoringAtString('test() {}');
549 expect(refactoring.refactoringName, 'Rename Method');
550 expect(refactoring.oldName, 'test');
551 refactoring.newName = 'newName';
552 // validate change
553 return assertSuccessfulRename('''
554 class A {
555 newName() {}
556 }
557 main(var a) {
558 a.newName(); // 1
559 new A().newName();
560 a.newName(); // 2
561 }
562 ''').then((_) {
563 assertPotentialEdits(['test(); // 1', 'test(); // 2']);
564 });
565 }
566
567 test_createChange_MethodElement_potential_private_otherLibrary() {
568 indexUnit('/lib.dart', '''
569 library lib;
570 main(p) {
571 p._test();
572 }
573 ''');
574 indexTestUnit('''
575 class A {
576 _test() {}
577 }
578 main(var a) {
579 a._test();
580 new A()._test();
581 }
582 ''');
583 // configure refactoring
584 createRenameRefactoringAtString('_test() {}');
585 expect(refactoring.refactoringName, 'Rename Method');
586 expect(refactoring.oldName, '_test');
587 refactoring.newName = 'newName';
588 // validate change
589 return assertSuccessfulRename('''
590 class A {
591 newName() {}
592 }
593 main(var a) {
594 a.newName();
595 new A().newName();
596 }
597 ''').then((_) {
598 assertNoFileChange('/lib.dart');
599 });
600 }
601
602 test_createChange_PropertyAccessorElement_getter() {
603 indexTestUnit('''
604 class A {
605 get test {} // marker
606 set test(x) {}
607 main() {
608 print(test);
609 test = 1;
610 }
611 }
612 class B extends A {
613 get test {}
614 set test(x) {}
615 }
616 main() {
617 A a = new A();
618 print(a.test);
619 a.test = 2;
620
621 B b = new B();
622 print(b.test);
623 b.test = 2;
624 }
625 ''');
626 // configure refactoring
627 createRenameRefactoringAtString('test {} // marker');
628 expect(refactoring.refactoringName, 'Rename Field');
629 expect(refactoring.oldName, 'test');
630 refactoring.newName = 'newName';
631 // validate change
632 return assertSuccessfulRename('''
633 class A {
634 get newName {} // marker
635 set newName(x) {}
636 main() {
637 print(newName);
638 newName = 1;
639 }
640 }
641 class B extends A {
642 get newName {}
643 set newName(x) {}
644 }
645 main() {
646 A a = new A();
647 print(a.newName);
648 a.newName = 2;
649
650 B b = new B();
651 print(b.newName);
652 b.newName = 2;
653 }
654 ''');
655 }
656
657 test_createChange_PropertyAccessorElement_setter() {
658 indexTestUnit('''
659 class A {
660 get test {}
661 set test(x) {} // marker
662 main() {
663 print(test);
664 test = 1;
665 }
666 }
667 class B extends A {
668 get test {}
669 set test(x) {}
670 }
671 main() {
672 A a = new A();
673 print(a.test);
674 a.test = 2;
675
676 B b = new B();
677 print(b.test);
678 b.test = 2;
679 }
680 ''');
681 // configure refactoring
682 createRenameRefactoringAtString('test(x) {} // marker');
683 expect(refactoring.refactoringName, 'Rename Field');
684 expect(refactoring.oldName, 'test');
685 refactoring.newName = 'newName';
686 // validate change
687 return assertSuccessfulRename('''
688 class A {
689 get newName {}
690 set newName(x) {} // marker
691 main() {
692 print(newName);
693 newName = 1;
694 }
695 }
696 class B extends A {
697 get newName {}
698 set newName(x) {}
699 }
700 main() {
701 A a = new A();
702 print(a.newName);
703 a.newName = 2;
704
705 B b = new B();
706 print(b.newName);
707 b.newName = 2;
708 }
709 ''');
710 }
711
712 test_createChange_TypeParameterElement() {
713 indexTestUnit('''
714 class A<Test> {
715 Test field;
716 List<Test> items;
717 Test method(Test p) => null;
718 }
719 ''');
720 // configure refactoring
721 createRenameRefactoringAtString('Test> {');
722 expect(refactoring.refactoringName, 'Rename Type Parameter');
723 expect(refactoring.oldName, 'Test');
724 refactoring.newName = 'NewName';
725 // validate change
726 return assertSuccessfulRename('''
727 class A<NewName> {
728 NewName field;
729 List<NewName> items;
730 NewName method(NewName p) => null;
731 }
732 ''');
733 }
734 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698