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

Side by Side Diff: test/checker/checker_test.dart

Issue 1137543005: Type check binary expressions (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Rebase and remove assert Created 5 years, 7 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
OLDNEW
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 /// General type checking tests 5 /// General type checking tests
6 library dev_compiler.test.checker_test; 6 library dev_compiler.test.checker_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 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 '/helper.dart': ''' 101 '/helper.dart': '''
102 dynamic toString = (int x) => x + 42; 102 dynamic toString = (int x) => x + 42;
103 dynamic hashCode = "hello"; 103 dynamic hashCode = "hello";
104 ''', 104 ''',
105 '/main.dart': ''' 105 '/main.dart': '''
106 import 'helper.dart' as helper; 106 import 'helper.dart' as helper;
107 107
108 class A { 108 class A {
109 String x = "hello world"; 109 String x = "hello world";
110 110
111 void baz1(y) => x + y; 111 void baz1(y) => x + /*info:DynamicCast*/y;
112 static baz2(y) => y + y; 112 static baz2(y) => /*info:DynamicInvoke*/y + y;
113 } 113 }
114 114
115 void foo(String str) { 115 void foo(String str) {
116 print(str); 116 print(str);
117 } 117 }
118 118
119 class B { 119 class B {
120 String toString([int arg]) => arg.toString(); 120 String toString([int arg]) => arg.toString();
121 } 121 }
122 122
(...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 } 972 }
973 int i2i(int x) => x; 973 int i2i(int x) => x;
974 num n2n(num x) => x; 974 num n2n(num x) => x;
975 void main() { 975 void main() {
976 { 976 {
977 I2I f; 977 I2I f;
978 f = new A(); 978 f = new A();
979 f = /*severe:StaticTypeError*/new B(); 979 f = /*severe:StaticTypeError*/new B();
980 f = i2i; 980 f = i2i;
981 f = /*warning:DownCastComposite*/n2n; 981 f = /*warning:DownCastComposite*/n2n;
982 f = /*warning:DownCastComposite*/(i2i as Object); 982 f = /*warning:DownCastComposite*/i2i as Object;
983 f = /*warning:DownCastComposite*/(n2n as Function); 983 f = /*warning:DownCastComposite*/n2n as Function;
984 } 984 }
985 { 985 {
986 N2N f; 986 N2N f;
987 f = /*severe:StaticTypeError*/new A(); 987 f = /*severe:StaticTypeError*/new A();
988 f = new B(); 988 f = new B();
989 f = /*warning:DownCastComposite*/i2i; 989 f = /*warning:DownCastComposite*/i2i;
990 f = n2n; 990 f = n2n;
991 f = /*warning:DownCastComposite*/(i2i as Object); 991 f = /*warning:DownCastComposite*/i2i as Object;
992 f = /*warning:DownCastComposite*/(n2n as Function); 992 f = /*warning:DownCastComposite*/n2n as Function;
993 } 993 }
994 { 994 {
995 A f; 995 A f;
996 f = new A(); 996 f = new A();
997 f = /*severe:StaticTypeError*/new B(); 997 f = /*severe:StaticTypeError*/new B();
998 f = /*severe:StaticTypeError*/i2i; 998 f = /*severe:StaticTypeError*/i2i;
999 f = /*severe:StaticTypeError*/n2n; 999 f = /*severe:StaticTypeError*/n2n;
1000 f = /*warning:DownCastImplicit*/(i2i as Object); 1000 f = /*warning:DownCastImplicit*/i2i as Object;
1001 f = /*warning:DownCastImplicit*/(n2n as Function); 1001 f = /*warning:DownCastImplicit*/n2n as Function;
1002 } 1002 }
1003 { 1003 {
1004 B f; 1004 B f;
1005 f = /*severe:StaticTypeError*/new A(); 1005 f = /*severe:StaticTypeError*/new A();
1006 f = new B(); 1006 f = new B();
1007 f = /*severe:StaticTypeError*/i2i; 1007 f = /*severe:StaticTypeError*/i2i;
1008 f = /*severe:StaticTypeError*/n2n; 1008 f = /*severe:StaticTypeError*/n2n;
1009 f = /*warning:DownCastImplicit*/(i2i as Object); 1009 f = /*warning:DownCastImplicit*/i2i as Object;
1010 f = /*warning:DownCastImplicit*/(n2n as Function); 1010 f = /*warning:DownCastImplicit*/n2n as Function;
1011 } 1011 }
1012 { 1012 {
1013 Function f; 1013 Function f;
1014 f = new A(); 1014 f = new A();
1015 f = new B(); 1015 f = new B();
1016 f = i2i; 1016 f = i2i;
1017 f = n2n; 1017 f = n2n;
1018 f = /*warning:DownCastImplicit*/(i2i as Object); 1018 f = /*warning:DownCastImplicit*/i2i as Object;
1019 f = (n2n as Function); 1019 f = (n2n as Function);
1020 } 1020 }
1021 } 1021 }
1022 ''' 1022 '''
1023 }); 1023 });
1024 }); 1024 });
1025 1025
1026 test('Function typing and subtyping: void', () { 1026 test('Function typing and subtyping: void', () {
1027 testChecker({ 1027 testChecker({
1028 '/main.dart': ''' 1028 '/main.dart': '''
1029 1029
1030 class A { 1030 class A {
1031 void bar() => null; 1031 void bar() => null;
1032 void foo() => bar; // allowed 1032 void foo() => bar; // allowed
1033 } 1033 }
1034 ''' 1034 '''
1035 }); 1035 });
1036 }); 1036 });
1037 1037
1038 test('Closure wrapping of literals', () { 1038 test('Closure wrapping of literals', () {
1039 testChecker({ 1039 testChecker({
1040 '/main.dart': ''' 1040 '/main.dart': '''
1041 typedef T F<T>(T t1, T t2); 1041 typedef T F<T>(T t1, T t2);
1042 typedef dynamic D(t1, t2); 1042 typedef dynamic D(t1, t2);
1043 1043
1044 void main() { 1044 void main() {
1045 F f1 = (x, y) => x + y; 1045 F f1 = (x, y) => /*info:DynamicInvoke*/x + y;
1046 F<int> f2 = /*warning:ClosureWrapLiteral*/(x, y) => x + y; 1046 F<int> f2 = /*warning:ClosureWrapLiteral*/(x, y) => /*info:DynamicInvoke */x + y;
1047 D f3 = (x, y) => x + y; 1047 D f3 = (x, y) => /*info:DynamicInvoke*/x + y;
1048 Function f4 = (x, y) => x + y; 1048 Function f4 = (x, y) => /*info:DynamicInvoke*/x + y;
1049 f2 = /*warning:ClosureWrap*/f1; 1049 f2 = /*warning:ClosureWrap*/f1;
1050 f1 = (int x, int y) => x + y; 1050 f1 = (int x, int y) => x + y;
1051 f2 = /*severe:StaticTypeError*/(int x) => -x; 1051 f2 = /*severe:StaticTypeError*/(int x) => -x;
1052 } 1052 }
1053 ''' 1053 '''
1054 }, wrapClosures: true, inferDownwards: false); 1054 }, wrapClosures: true, inferDownwards: false);
1055 }); 1055 });
1056 1056
1057 test('Generic subtyping: invariance', () { 1057 test('Generic subtyping: invariance', () {
1058 testChecker({ 1058 testChecker({
(...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after
1948 A operator -(B b) {} 1948 A operator -(B b) {}
1949 } 1949 }
1950 1950
1951 foo() => new A(); 1951 foo() => new A();
1952 1952
1953 test() { 1953 test() {
1954 A a = new A(); 1954 A a = new A();
1955 B b = new B(); 1955 B b = new B();
1956 var c = foo(); 1956 var c = foo();
1957 a = a * b; 1957 a = a * b;
1958 a = a * /*pass should be warning:DownCastImplicit*/c; 1958 a = a * /*info:DynamicCast*/c;
1959 a = a / b; 1959 a = a / b;
1960 a = a ~/ b; 1960 a = a ~/ b;
1961 a = a % b; 1961 a = a % b;
1962 a = a + b; 1962 a = a + b;
1963 a = a + /*pass should be severe:StaticTypeError*/a; 1963 a = a + /*severe:StaticTypeError*/a;
1964 a = a - b; 1964 a = a - b;
1965 b = /*severe:StaticTypeError*/b - b; 1965 b = /*severe:StaticTypeError*/b - b;
1966 a = a << b; 1966 a = a << b;
1967 a = a >> b; 1967 a = a >> b;
1968 a = a & b; 1968 a = a & b;
1969 a = a ^ b; 1969 a = a ^ b;
1970 a = a | b; 1970 a = a | b;
1971 c = (/*pass should be info:DynamicInvoke*/c + b); 1971 c = (/*info:DynamicInvoke*/c + b);
1972
1973 String x = 'hello';
1974 int y = 42;
1975 x = x + x;
1976 x = x + /*info:DynamicCast*/c;
1977 x = x + /*severe:StaticTypeError*/y;
1978
1979 bool p = true;
1980 p = p && p;
1981 p = p && /*info:DynamicCast*/c;
1982 p = (/*info:DynamicCast*/c) && p;
1983 p = (/*info:DynamicCast*/c) && /*info:DynamicCast*/c;
1984 p = (/*severe:StaticTypeError*/y) && p;
1985 p = c == y;
1972 } 1986 }
1973 ''' 1987 '''
1974 }); 1988 });
1975 }); 1989 });
1976 1990
1977 test('compound assignments', () { 1991 test('compound assignments', () {
1978 testChecker({ 1992 testChecker({
1979 '/main.dart': ''' 1993 '/main.dart': '''
1980 class A { 1994 class A {
1981 A operator *(B b) {} 1995 A operator *(B b) {}
(...skipping 933 matching lines...) Expand 10 before | Expand all | Expand 10 after
2915 f = bar as II2D; 2929 f = bar as II2D;
2916 f = bar as DD2I; 2930 f = bar as DD2I;
2917 f = bar as DI2D; 2931 f = bar as DI2D;
2918 f = bar as ID2D; 2932 f = bar as ID2D;
2919 f = bar as DD2D; 2933 f = bar as DD2D;
2920 } 2934 }
2921 ''' 2935 '''
2922 }); 2936 });
2923 }); 2937 });
2924 } 2938 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698