| 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 /// Tests for type inference. | 5 /// Tests for type inference. |
| 6 library dev_compiler.test.inferred_type_test; | 6 library dev_compiler.test.inferred_type_test; |
| 7 | 7 |
| 8 import 'package:unittest/unittest.dart'; | 8 import 'package:unittest/unittest.dart'; |
| 9 | 9 |
| 10 import 'package:dev_compiler/src/testing.dart'; | 10 import 'package:dev_compiler/src/testing.dart'; |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 testChecker({ | 662 testChecker({ |
| 663 '/main.dart': ''' | 663 '/main.dart': ''' |
| 664 class A { | 664 class A { |
| 665 int x = 2; | 665 int x = 2; |
| 666 } | 666 } |
| 667 | 667 |
| 668 test() { | 668 test() { |
| 669 dynamic a = new A(); | 669 dynamic a = new A(); |
| 670 A b = /*info:DynamicCast*/a; | 670 A b = /*info:DynamicCast*/a; |
| 671 print(/*info:DynamicInvoke*/a.x); | 671 print(/*info:DynamicInvoke*/a.x); |
| 672 print((/*info:DynamicInvoke*/a.x) + 2); | 672 print(/*info:DynamicInvoke*/(/*info:DynamicInvoke*/a.x) + 2); |
| 673 } | 673 } |
| 674 ''' | 674 ''' |
| 675 }); | 675 }); |
| 676 }); | 676 }); |
| 677 | 677 |
| 678 test('propagate inference transitively ', () { | 678 test('propagate inference transitively ', () { |
| 679 testChecker({ | 679 testChecker({ |
| 680 '/main.dart': ''' | 680 '/main.dart': ''' |
| 681 class A { | 681 class A { |
| 682 int x = 2; | 682 int x = 2; |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1225 } | 1225 } |
| 1226 void main() { | 1226 void main() { |
| 1227 { // Variables, nested literals | 1227 { // Variables, nested literals |
| 1228 var x = "hello"; | 1228 var x = "hello"; |
| 1229 var y = 3; | 1229 var y = 3; |
| 1230 void f(List<Map<int, String>> l) {}; | 1230 void f(List<Map<int, String>> l) {}; |
| 1231 f(/*info:InferredTypeLiteral*/[{y: x}]); | 1231 f(/*info:InferredTypeLiteral*/[{y: x}]); |
| 1232 } | 1232 } |
| 1233 { | 1233 { |
| 1234 int f(int x) {}; | 1234 int f(int x) {}; |
| 1235 A<int> = new A(f); | 1235 A<int> a = /*info:InferredTypeAllocation*/new A(f); |
| 1236 } | 1236 } |
| 1237 } | 1237 } |
| 1238 ''' | 1238 ''' |
| 1239 }, inferDownwards: true); | 1239 }, inferDownwards: true); |
| 1240 }); | 1240 }); |
| 1241 | 1241 |
| 1242 test('downwards inference on instance creations', () { | 1242 test('downwards inference on instance creations', () { |
| 1243 String mk(String info) => ''' | 1243 String mk(String info) => ''' |
| 1244 class A<S, T> { | 1244 class A<S, T> { |
| 1245 S x; | 1245 S x; |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1500 } | 1500 } |
| 1501 { | 1501 { |
| 1502 Function2<int, List<String>> l0 = (int x) => null; | 1502 Function2<int, List<String>> l0 = (int x) => null; |
| 1503 Function2<int, List<String>> l1 = /*info:InferredTypeClosure*/(int x)
=> ["hello"]; | 1503 Function2<int, List<String>> l1 = /*info:InferredTypeClosure*/(int x)
=> ["hello"]; |
| 1504 Function2<int, List<String>> l2 = /*severe:StaticTypeError*/(String x)
=> ["hello"]; | 1504 Function2<int, List<String>> l2 = /*severe:StaticTypeError*/(String x)
=> ["hello"]; |
| 1505 Function2<int, List<String>> l3 = /*warning:UninferredClosure should b
e severe:StaticTypeError*/(int x) => [3]; | 1505 Function2<int, List<String>> l3 = /*warning:UninferredClosure should b
e severe:StaticTypeError*/(int x) => [3]; |
| 1506 Function2<int, List<String>> l4 = /*warning:UninferredClosure should b
e severe:StaticTypeError*/(int x) {return [3]}; | 1506 Function2<int, List<String>> l4 = /*warning:UninferredClosure should b
e severe:StaticTypeError*/(int x) {return [3]}; |
| 1507 } | 1507 } |
| 1508 { | 1508 { |
| 1509 Function2<int, int> l0 = /*info:InferredTypeClosure*/(x) => x; | 1509 Function2<int, int> l0 = /*info:InferredTypeClosure*/(x) => x; |
| 1510 Function2<int, int> l1 = /*info:InferredTypeClosure*/(x) => x+1; | 1510 Function2<int, int> l1 = /*info:InferredTypeClosure*/(x) => /*info:Dyn
amicInvoke should be pass*/x+1; |
| 1511 Function2<int, String> l2 = /*info:InferredTypeClosure should be sever
e:StaticTypeError*/(x) => x; | 1511 Function2<int, String> l2 = /*info:InferredTypeClosure should be sever
e:StaticTypeError*/(x) => x; |
| 1512 Function2<int, String> l3 = /*info:InferredTypeClosure should be sever
e:StaticTypeError*/(x) => /*info:DynamicInvoke should be pass*/x.substring(3); | 1512 Function2<int, String> l3 = /*info:InferredTypeClosure should be sever
e:StaticTypeError*/(x) => /*info:DynamicInvoke should be pass*/x.substring(3); |
| 1513 Function2<String, String> l4 = /*info:InferredTypeClosure*/(x) => /*in
fo:DynamicInvoke should be pass*/x.substring(3); | 1513 Function2<String, String> l4 = /*info:InferredTypeClosure*/(x) => /*in
fo:DynamicInvoke should be pass*/x.substring(3); |
| 1514 } | 1514 } |
| 1515 } | 1515 } |
| 1516 ''' | 1516 ''' |
| 1517 }, inferDownwards: true, wrapClosures: false); | 1517 }, inferDownwards: true, wrapClosures: false); |
| 1518 }); | 1518 }); |
| 1519 } | 1519 } |
| OLD | NEW |