OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library test.src.task.strong_mode_test; | 5 library test.src.task.strong_mode_test; |
6 | 6 |
7 import 'package:analyzer/src/generated/ast.dart'; | 7 import 'package:analyzer/src/generated/ast.dart'; |
8 import 'package:analyzer/src/generated/element.dart'; | 8 import 'package:analyzer/src/generated/element.dart'; |
9 import 'package:analyzer/src/generated/source.dart'; | 9 import 'package:analyzer/src/generated/source.dart'; |
10 import 'package:analyzer/src/task/strong_mode.dart'; | 10 import 'package:analyzer/src/task/strong_mode.dart'; |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 void test_inferCompilationUnit_invalid_inheritanceCycle() { | 438 void test_inferCompilationUnit_invalid_inheritanceCycle() { |
439 InstanceMemberInferrer inferrer = createInferrer; | 439 InstanceMemberInferrer inferrer = createInferrer; |
440 CompilationUnitElement unit = resolve(''' | 440 CompilationUnitElement unit = resolve(''' |
441 class A extends C {} | 441 class A extends C {} |
442 class B extends A {} | 442 class B extends A {} |
443 class C extends B {} | 443 class C extends B {} |
444 '''); | 444 '''); |
445 inferrer.inferCompilationUnit(unit); | 445 inferrer.inferCompilationUnit(unit); |
446 } | 446 } |
447 | 447 |
448 void test_inferCompilationUnit_method_multiple_different() { | 448 void test_inferCompilationUnit_method_parameter_multiple_different() { |
449 InstanceMemberInferrer inferrer = createInferrer; | 449 InstanceMemberInferrer inferrer = createInferrer; |
450 String methodName = 'm'; | 450 String methodName = 'm'; |
451 CompilationUnitElement unit = resolve(''' | 451 CompilationUnitElement unit = resolve(''' |
| 452 class A { |
| 453 $methodName(int p) => 0; |
| 454 } |
| 455 class B { |
| 456 $methodName(double p) => 0; |
| 457 } |
| 458 class C implements A, B { |
| 459 $methodName(p) => 0; |
| 460 } |
| 461 '''); |
| 462 ClassElement classC = unit.getType('C'); |
| 463 MethodElement methodC = classC.getMethod(methodName); |
| 464 ParameterElement parameterC = methodC.parameters[0]; |
| 465 expect(parameterC.type.isDynamic, isTrue); |
| 466 |
| 467 inferrer.inferCompilationUnit(unit); |
| 468 |
| 469 expect(parameterC.type.isDynamic, isTrue); |
| 470 } |
| 471 |
| 472 void test_inferCompilationUnit_method_parameter_multiple_named_different() { |
| 473 InstanceMemberInferrer inferrer = createInferrer; |
| 474 String methodName = 'm'; |
| 475 CompilationUnitElement unit = resolve(''' |
| 476 class A { |
| 477 $methodName({int p}) => 0; |
| 478 } |
| 479 class B { |
| 480 $methodName({int q}) => 0; |
| 481 } |
| 482 class C implements A, B { |
| 483 $methodName({p}) => 0; |
| 484 } |
| 485 '''); |
| 486 ClassElement classC = unit.getType('C'); |
| 487 MethodElement methodC = classC.getMethod(methodName); |
| 488 ParameterElement parameterC = methodC.parameters[0]; |
| 489 expect(parameterC.type.isDynamic, isTrue); |
| 490 |
| 491 inferrer.inferCompilationUnit(unit); |
| 492 |
| 493 expect(parameterC.type.isDynamic, isTrue); |
| 494 } |
| 495 |
| 496 void test_inferCompilationUnit_method_parameter_multiple_named_same() { |
| 497 InstanceMemberInferrer inferrer = createInferrer; |
| 498 String methodName = 'm'; |
| 499 CompilationUnitElement unit = resolve(''' |
| 500 class A { |
| 501 $methodName({int p}) => 0; |
| 502 } |
| 503 class B { |
| 504 $methodName({int p}) => 0; |
| 505 } |
| 506 class C implements A, B { |
| 507 $methodName({p}) => 0; |
| 508 } |
| 509 '''); |
| 510 ClassElement classA = unit.getType('A'); |
| 511 MethodElement methodA = classA.getMethod(methodName); |
| 512 ParameterElement parameterA = methodA.parameters[0]; |
| 513 DartType expectedType = parameterA.type; |
| 514 ClassElement classC = unit.getType('C'); |
| 515 MethodElement methodC = classC.getMethod(methodName); |
| 516 ParameterElement parameterC = methodC.parameters[0]; |
| 517 expect(parameterC.type.isDynamic, isTrue); |
| 518 |
| 519 inferrer.inferCompilationUnit(unit); |
| 520 |
| 521 expect(parameterC.type, expectedType); |
| 522 } |
| 523 |
| 524 void test_inferCompilationUnit_method_parameter_multiple_namedAndRequired() { |
| 525 InstanceMemberInferrer inferrer = createInferrer; |
| 526 String methodName = 'm'; |
| 527 CompilationUnitElement unit = resolve(''' |
| 528 class A { |
| 529 $methodName({int p}) => 0; |
| 530 } |
| 531 class B { |
| 532 $methodName(int p) => 0; |
| 533 } |
| 534 class C implements A, B { |
| 535 $methodName(p) => 0; |
| 536 } |
| 537 '''); |
| 538 ClassElement classC = unit.getType('C'); |
| 539 MethodElement methodC = classC.getMethod(methodName); |
| 540 ParameterElement parameterC = methodC.parameters[0]; |
| 541 expect(parameterC.type.isDynamic, isTrue); |
| 542 |
| 543 inferrer.inferCompilationUnit(unit); |
| 544 |
| 545 expect(parameterC.type.isDynamic, isTrue); |
| 546 } |
| 547 |
| 548 void test_inferCompilationUnit_method_parameter_multiple_optionalAndRequired()
{ |
| 549 InstanceMemberInferrer inferrer = createInferrer; |
| 550 String methodName = 'm'; |
| 551 CompilationUnitElement unit = resolve(''' |
| 552 class A { |
| 553 $methodName(int p) => 0; |
| 554 } |
| 555 class B { |
| 556 $methodName([int p]) => 0; |
| 557 } |
| 558 class C implements A, B { |
| 559 $methodName(p) => 0; |
| 560 } |
| 561 '''); |
| 562 ClassElement classA = unit.getType('A'); |
| 563 MethodElement methodA = classA.getMethod(methodName); |
| 564 ParameterElement parameterA = methodA.parameters[0]; |
| 565 DartType expectedType = parameterA.type; |
| 566 ClassElement classC = unit.getType('C'); |
| 567 MethodElement methodC = classC.getMethod(methodName); |
| 568 ParameterElement parameterC = methodC.parameters[0]; |
| 569 expect(parameterC.type.isDynamic, isTrue); |
| 570 |
| 571 inferrer.inferCompilationUnit(unit); |
| 572 |
| 573 expect(parameterC.type, expectedType); |
| 574 } |
| 575 |
| 576 void test_inferCompilationUnit_method_return_multiple_different() { |
| 577 InstanceMemberInferrer inferrer = createInferrer; |
| 578 String methodName = 'm'; |
| 579 CompilationUnitElement unit = resolve(''' |
452 class A { | 580 class A { |
453 int $methodName() => 0; | 581 int $methodName() => 0; |
454 } | 582 } |
455 class B { | 583 class B { |
456 double $methodName() => 0.0; | 584 double $methodName() => 0.0; |
457 } | 585 } |
458 class C implements A, B { | 586 class C implements A, B { |
459 $methodName() => 0; | 587 $methodName() => 0; |
460 } | 588 } |
461 '''); | 589 '''); |
462 ClassElement classC = unit.getType('C'); | 590 ClassElement classC = unit.getType('C'); |
463 MethodElement methodC = classC.getMethod(methodName); | 591 MethodElement methodC = classC.getMethod(methodName); |
464 expect(methodC.returnType.isDynamic, isTrue); | 592 expect(methodC.returnType.isDynamic, isTrue); |
465 | 593 |
466 inferrer.inferCompilationUnit(unit); | 594 inferrer.inferCompilationUnit(unit); |
467 | 595 |
468 expect(methodC.returnType.isDynamic, isTrue); | 596 expect(methodC.returnType.isDynamic, isTrue); |
469 } | 597 } |
470 | 598 |
471 void test_inferCompilationUnit_method_multiple_dynamic() { | 599 void test_inferCompilationUnit_method_return_multiple_dynamic() { |
472 InstanceMemberInferrer inferrer = createInferrer; | 600 InstanceMemberInferrer inferrer = createInferrer; |
473 String methodName = 'm'; | 601 String methodName = 'm'; |
474 CompilationUnitElement unit = resolve(''' | 602 CompilationUnitElement unit = resolve(''' |
475 class A { | 603 class A { |
476 int $methodName() => 0; | 604 int $methodName() => 0; |
477 } | 605 } |
478 class B { | 606 class B { |
479 $methodName() => 0; | 607 $methodName() => 0; |
480 } | 608 } |
481 class C implements A, B { | 609 class C implements A, B { |
482 $methodName() => 0; | 610 $methodName() => 0; |
483 } | 611 } |
484 '''); | 612 '''); |
485 ClassElement classC = unit.getType('C'); | 613 ClassElement classC = unit.getType('C'); |
486 MethodElement methodC = classC.getMethod(methodName); | 614 MethodElement methodC = classC.getMethod(methodName); |
487 expect(methodC.returnType.isDynamic, isTrue); | 615 expect(methodC.returnType.isDynamic, isTrue); |
488 | 616 |
489 inferrer.inferCompilationUnit(unit); | 617 inferrer.inferCompilationUnit(unit); |
490 | 618 |
491 expect(methodC.returnType.isDynamic, isTrue); | 619 expect(methodC.returnType.isDynamic, isTrue); |
492 } | 620 } |
493 | 621 |
494 void test_inferCompilationUnit_method_multiple_same_nonVoid() { | 622 void test_inferCompilationUnit_method_return_multiple_same_nonVoid() { |
495 InstanceMemberInferrer inferrer = createInferrer; | 623 InstanceMemberInferrer inferrer = createInferrer; |
496 String methodName = 'm'; | 624 String methodName = 'm'; |
497 CompilationUnitElement unit = resolve(''' | 625 CompilationUnitElement unit = resolve(''' |
498 class A { | 626 class A { |
499 int $methodName() => 0; | 627 int $methodName() => 0; |
500 } | 628 } |
501 class B { | 629 class B { |
502 int $methodName() => 0.0; | 630 int $methodName() => 0.0; |
503 } | 631 } |
504 class C implements A, B { | 632 class C implements A, B { |
505 $methodName() => 0; | 633 $methodName() => 0; |
506 } | 634 } |
507 '''); | 635 '''); |
508 ClassElement classA = unit.getType('A'); | 636 ClassElement classA = unit.getType('A'); |
509 MethodElement methodA = classA.getMethod(methodName); | 637 MethodElement methodA = classA.getMethod(methodName); |
510 DartType expectedType = methodA.returnType; | 638 DartType expectedType = methodA.returnType; |
511 ClassElement classC = unit.getType('C'); | 639 ClassElement classC = unit.getType('C'); |
512 MethodElement methodC = classC.getMethod(methodName); | 640 MethodElement methodC = classC.getMethod(methodName); |
513 expect(methodC.returnType.isDynamic, isTrue); | 641 expect(methodC.returnType.isDynamic, isTrue); |
514 | 642 |
515 inferrer.inferCompilationUnit(unit); | 643 inferrer.inferCompilationUnit(unit); |
516 | 644 |
517 expect(methodC.returnType, expectedType); | 645 expect(methodC.returnType, expectedType); |
518 } | 646 } |
519 | 647 |
520 void test_inferCompilationUnit_method_multiple_same_void() { | 648 void test_inferCompilationUnit_method_return_multiple_same_void() { |
521 InstanceMemberInferrer inferrer = createInferrer; | 649 InstanceMemberInferrer inferrer = createInferrer; |
522 String methodName = 'm'; | 650 String methodName = 'm'; |
523 CompilationUnitElement unit = resolve(''' | 651 CompilationUnitElement unit = resolve(''' |
524 class A { | 652 class A { |
525 void $methodName() {}; | 653 void $methodName() {}; |
526 } | 654 } |
527 class B { | 655 class B { |
528 void $methodName() {}; | 656 void $methodName() {}; |
529 } | 657 } |
530 class C implements A, B { | 658 class C implements A, B { |
531 $methodName() {}; | 659 $methodName() {}; |
532 } | 660 } |
533 '''); | 661 '''); |
534 ClassElement classA = unit.getType('A'); | 662 ClassElement classA = unit.getType('A'); |
535 MethodElement methodA = classA.getMethod(methodName); | 663 MethodElement methodA = classA.getMethod(methodName); |
536 DartType expectedType = methodA.returnType; | 664 DartType expectedType = methodA.returnType; |
537 ClassElement classC = unit.getType('C'); | 665 ClassElement classC = unit.getType('C'); |
538 MethodElement methodC = classC.getMethod(methodName); | 666 MethodElement methodC = classC.getMethod(methodName); |
539 expect(methodC.returnType.isDynamic, isTrue); | 667 expect(methodC.returnType.isDynamic, isTrue); |
540 | 668 |
541 inferrer.inferCompilationUnit(unit); | 669 inferrer.inferCompilationUnit(unit); |
542 | 670 |
543 expect(methodC.returnType, expectedType); | 671 expect(methodC.returnType, expectedType); |
544 } | 672 } |
545 | 673 |
546 void test_inferCompilationUnit_method_multiple_void() { | 674 void test_inferCompilationUnit_method_return_multiple_void() { |
547 InstanceMemberInferrer inferrer = createInferrer; | 675 InstanceMemberInferrer inferrer = createInferrer; |
548 String methodName = 'm'; | 676 String methodName = 'm'; |
549 CompilationUnitElement unit = resolve(''' | 677 CompilationUnitElement unit = resolve(''' |
550 class A { | 678 class A { |
551 int $methodName() => 0; | 679 int $methodName() => 0; |
552 } | 680 } |
553 class B { | 681 class B { |
554 void $methodName() => 0; | 682 void $methodName() => 0; |
555 } | 683 } |
556 class C implements A, B { | 684 class C implements A, B { |
557 $methodName() => 0; | 685 $methodName() => 0; |
558 } | 686 } |
559 '''); | 687 '''); |
560 ClassElement classC = unit.getType('C'); | 688 ClassElement classC = unit.getType('C'); |
561 MethodElement methodC = classC.getMethod(methodName); | 689 MethodElement methodC = classC.getMethod(methodName); |
562 expect(methodC.returnType.isDynamic, isTrue); | 690 expect(methodC.returnType.isDynamic, isTrue); |
563 | 691 |
564 inferrer.inferCompilationUnit(unit); | 692 inferrer.inferCompilationUnit(unit); |
565 | 693 |
566 expect(methodC.returnType.isDynamic, isTrue); | 694 expect(methodC.returnType.isDynamic, isTrue); |
567 } | 695 } |
568 | 696 |
569 void test_inferCompilationUnit_method_single() { | 697 void test_inferCompilationUnit_method_return_single() { |
570 InstanceMemberInferrer inferrer = createInferrer; | 698 InstanceMemberInferrer inferrer = createInferrer; |
571 String methodName = 'm'; | 699 String methodName = 'm'; |
572 CompilationUnitElement unit = resolve(''' | 700 CompilationUnitElement unit = resolve(''' |
573 class A { | 701 class A { |
574 int $methodName() => 0; | 702 int $methodName() => 0; |
575 } | 703 } |
576 class B extends A { | 704 class B extends A { |
577 $methodName() => 0; | 705 $methodName() => 0; |
578 } | 706 } |
579 '''); | 707 '''); |
580 ClassElement classA = unit.getType('A'); | 708 ClassElement classA = unit.getType('A'); |
581 MethodElement methodA = classA.getMethod(methodName); | 709 MethodElement methodA = classA.getMethod(methodName); |
582 ClassElement classB = unit.getType('B'); | 710 ClassElement classB = unit.getType('B'); |
583 MethodElement methodB = classB.getMethod(methodName); | 711 MethodElement methodB = classB.getMethod(methodName); |
584 expect(methodB.returnType.isDynamic, isTrue); | 712 expect(methodB.returnType.isDynamic, isTrue); |
585 | 713 |
586 inferrer.inferCompilationUnit(unit); | 714 inferrer.inferCompilationUnit(unit); |
587 | 715 |
588 expect(methodB.returnType, methodA.returnType); | 716 expect(methodB.returnType, methodA.returnType); |
589 } | 717 } |
590 } | 718 } |
OLD | NEW |