| // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| import '../src/dart/resolution/context_collection_resolution.dart'; |
| import '../src/dart/resolution/node_text_expectations.dart'; |
| |
| main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(NonHintCodeTest); |
| defineReflectiveTests(UpdateNodeTextExpectations); |
| }); |
| } |
| |
| @reflectiveTest |
| class NonHintCodeTest extends PubPackageResolutionTest { |
| test_issue20904BuggyTypePromotionAtIfJoin_1() async { |
| // https://code.google.com/p/dart/issues/detail?id=20904 |
| await resolveTestCodeWithDiagnostics(r''' |
| f(message, dynamic_) { |
| if (message is Function) { |
| message = dynamic_; |
| } |
| int s = message; |
| // ^ |
| // [diag.unusedLocalVariable] The value of the local variable 's' isn't used. |
| } |
| '''); |
| } |
| |
| test_issue20904BuggyTypePromotionAtIfJoin_3() async { |
| // https://code.google.com/p/dart/issues/detail?id=20904 |
| await resolveTestCodeWithDiagnostics(r''' |
| f(message) { |
| var dynamic_; |
| if (message is Function) { |
| message = dynamic_; |
| } else { |
| return; |
| } |
| int s = message; |
| // ^ |
| // [diag.unusedLocalVariable] The value of the local variable 's' isn't used. |
| } |
| '''); |
| } |
| |
| test_issue20904BuggyTypePromotionAtIfJoin_4() async { |
| // https://code.google.com/p/dart/issues/detail?id=20904 |
| await resolveTestCodeWithDiagnostics(r''' |
| f(message) { |
| if (message is Function) { |
| message = ''; |
| } else { |
| return; |
| } |
| String s = message; |
| // ^ |
| // [diag.unusedLocalVariable] The value of the local variable 's' isn't used. |
| } |
| '''); |
| } |
| |
| test_propagatedFieldType() async { |
| await resolveTestCodeWithDiagnostics(r''' |
| class A { } |
| class X<T> { |
| final x = <T>[]; |
| } |
| class Z { |
| final X<A> y = new X<A>(); |
| foo() { |
| y.x.add(new A()); |
| } |
| } |
| '''); |
| } |
| |
| test_undefinedMethod_assignmentExpression_inSubtype() async { |
| await resolveTestCodeWithDiagnostics(r''' |
| class A {} |
| class B extends A { |
| operator +(B b) {return new B();} |
| } |
| f(a, a2) { |
| a = new A(); |
| a2 = new A(); |
| a += a2; |
| } |
| '''); |
| } |
| |
| test_undefinedMethod_dynamic() async { |
| await resolveTestCodeWithDiagnostics(r''' |
| class D<T extends dynamic> { |
| fieldAccess(T t) => t.abc; |
| methodAccess(T t) => t.xyz(1, 2, 'three'); |
| } |
| '''); |
| } |
| |
| test_undefinedMethod_unionType_all() async { |
| await resolveTestCodeWithDiagnostics(r''' |
| class A { |
| int m(int x) => 0; |
| } |
| class B { |
| String m() => '0'; |
| } |
| f(A a, B b) { |
| var ab; |
| if (0 < 1) { |
| ab = a; |
| } else { |
| ab = b; |
| } |
| ab.m(); |
| } |
| '''); |
| } |
| |
| test_undefinedMethod_unionType_some() async { |
| await resolveTestCodeWithDiagnostics(r''' |
| class A { |
| int m(int x) => 0; |
| } |
| class B {} |
| f(A a, B b) { |
| var ab; |
| if (0 < 1) { |
| ab = a; |
| } else { |
| ab = b; |
| } |
| ab.m(0); |
| } |
| '''); |
| } |
| } |