| 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 |