OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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.generic_bounded_by_type_parameter; | 5 library test.generic_bounded_by_type_parameter; |
6 | 6 |
7 import 'dart:mirrors'; | 7 import 'dart:mirrors'; |
8 | 8 |
9 import 'package:expect/expect.dart'; | 9 import 'package:expect/expect.dart'; |
10 | 10 |
11 import 'generics_helper.dart'; | 11 import 'generics_helper.dart'; |
12 | 12 |
13 class Super<T, R extends T> {} | 13 class Super<T, R extends T> {} |
14 class Fixed extends Super<num, int> {} | 14 class Fixed extends Super<num, int> {} |
15 class Generic<X, Y> extends Super<X, Y> {} /// 02: static type warning | 15 class Generic<X, Y> extends Super<X, Y> {} //# 02: static type warning |
16 class Malbounded extends Super<num, String> {} /// 01: static type warning | 16 class Malbounded extends Super<num, String> {} //# 01: static type warning |
17 | 17 |
18 bool inCheckedMode() { | 18 bool inCheckedMode() { |
19 try { | 19 try { |
20 var s = 'string'; | 20 var s = 'string'; |
21 int i = s; | 21 int i = s; |
22 } catch(e) { | 22 } catch(e) { |
23 return true; | 23 return true; |
24 } | 24 } |
25 return false; | 25 return false; |
26 } | 26 } |
27 | 27 |
28 main() { | 28 main() { |
29 ClassMirror superDecl = reflectClass(Super); | 29 ClassMirror superDecl = reflectClass(Super); |
30 ClassMirror superOfNumAndInt = reflectClass(Fixed).superclass; | 30 ClassMirror superOfNumAndInt = reflectClass(Fixed).superclass; |
31 ClassMirror genericDecl = reflectClass(Generic); // /// 02: continued | 31 ClassMirror genericDecl = reflectClass(Generic); // //# 02: continued |
32 ClassMirror superOfXAndY = genericDecl.superclass; // /// 02: continued | 32 ClassMirror superOfXAndY = genericDecl.superclass; // //# 02: continued |
33 ClassMirror genericOfNumAndDouble = reflect(new Generic<num, double>()).type;
// /// 02: continued | 33 ClassMirror genericOfNumAndDouble = reflect(new Generic<num, double>()).type;
// //# 02: continued |
34 ClassMirror superOfNumAndDouble = genericOfNumAndDouble.superclass; // /// 02:
continued | 34 ClassMirror superOfNumAndDouble = genericOfNumAndDouble.superclass; // //# 02:
continued |
35 ClassMirror superOfNumAndString = reflectClass(Malbounded).superclass; // ///
01: continued | 35 ClassMirror superOfNumAndString = reflectClass(Malbounded).superclass; // //#
01: continued |
36 | 36 |
37 try { | 37 try { |
38 ClassMirror genericOfNumAndBool = reflect(new Generic<num, bool>()).type; //
/// 02: static type warning | 38 ClassMirror genericOfNumAndBool = reflect(new Generic<num, bool>()).type; //
//# 02: static type warning |
39 ClassMirror superOfNumAndBool = genericOfNumAndBool.superclass; // /// 02: c
ontinued | 39 ClassMirror superOfNumAndBool = genericOfNumAndBool.superclass; // //# 02: c
ontinued |
40 Expect.isFalse(genericOfNumAndBool.isOriginalDeclaration); // /// 02: contin
ued | 40 Expect.isFalse(genericOfNumAndBool.isOriginalDeclaration); // //# 02: contin
ued |
41 Expect.isFalse(superOfNumAndBool.isOriginalDeclaration); // /// 02: continue
d | 41 Expect.isFalse(superOfNumAndBool.isOriginalDeclaration); // //# 02: continue
d |
42 typeParameters(genericOfNumAndBool, [#X, #Y]); // /// 02: continued | 42 typeParameters(genericOfNumAndBool, [#X, #Y]); // //# 02: continued |
43 typeParameters(superOfNumAndBool, [#T, #R]); // /// 02: continued | 43 typeParameters(superOfNumAndBool, [#T, #R]); // //# 02: continued |
44 typeArguments(genericOfNumAndBool, [reflectClass(num), reflectClass(bool)]);
// /// 02: continued | 44 typeArguments(genericOfNumAndBool, [reflectClass(num), reflectClass(bool)]);
// //# 02: continued |
45 typeArguments(superOfNumAndBool, [reflectClass(num), reflectClass(bool)]); /
/ /// 02: continued | 45 typeArguments(superOfNumAndBool, [reflectClass(num), reflectClass(bool)]); /
/ //# 02: continued |
46 Expect.isFalse(inCheckedMode()); /// 02: continued | 46 Expect.isFalse(inCheckedMode()); //# 02: continued |
47 } on TypeError catch(e) { | 47 } on TypeError catch(e) { |
48 Expect.isTrue(inCheckedMode()); | 48 Expect.isTrue(inCheckedMode()); |
49 } | 49 } |
50 | 50 |
51 Expect.isTrue(superDecl.isOriginalDeclaration); | 51 Expect.isTrue(superDecl.isOriginalDeclaration); |
52 Expect.isFalse(superOfNumAndInt.isOriginalDeclaration); | 52 Expect.isFalse(superOfNumAndInt.isOriginalDeclaration); |
53 Expect.isTrue(genericDecl.isOriginalDeclaration); // /// 02: continued | 53 Expect.isTrue(genericDecl.isOriginalDeclaration); // //# 02: continued |
54 Expect.isFalse(superOfXAndY.isOriginalDeclaration); // /// 02: continued | 54 Expect.isFalse(superOfXAndY.isOriginalDeclaration); // //# 02: continued |
55 Expect.isFalse(genericOfNumAndDouble.isOriginalDeclaration); // /// 02: contin
ued | 55 Expect.isFalse(genericOfNumAndDouble.isOriginalDeclaration); // //# 02: contin
ued |
56 Expect.isFalse(superOfNumAndDouble.isOriginalDeclaration); // /// 02: continue
d | 56 Expect.isFalse(superOfNumAndDouble.isOriginalDeclaration); // //# 02: continue
d |
57 Expect.isFalse(superOfNumAndString.isOriginalDeclaration); // /// 01: continue
d | 57 Expect.isFalse(superOfNumAndString.isOriginalDeclaration); // //# 01: continue
d |
58 | 58 |
59 TypeVariableMirror tFromSuper = superDecl.typeVariables[0]; | 59 TypeVariableMirror tFromSuper = superDecl.typeVariables[0]; |
60 TypeVariableMirror rFromSuper = superDecl.typeVariables[1]; | 60 TypeVariableMirror rFromSuper = superDecl.typeVariables[1]; |
61 TypeVariableMirror xFromGeneric = genericDecl.typeVariables[0]; // /// 02: con
tinued | 61 TypeVariableMirror xFromGeneric = genericDecl.typeVariables[0]; // //# 02: con
tinued |
62 TypeVariableMirror yFromGeneric = genericDecl.typeVariables[1]; // /// 02: con
tinued | 62 TypeVariableMirror yFromGeneric = genericDecl.typeVariables[1]; // //# 02: con
tinued |
63 | 63 |
64 Expect.equals(reflectClass(Object), tFromSuper.upperBound); | 64 Expect.equals(reflectClass(Object), tFromSuper.upperBound); |
65 Expect.equals(tFromSuper, rFromSuper.upperBound); | 65 Expect.equals(tFromSuper, rFromSuper.upperBound); |
66 Expect.equals(reflectClass(Object), xFromGeneric.upperBound); // /// 02: conti
nued | 66 Expect.equals(reflectClass(Object), xFromGeneric.upperBound); // //# 02: conti
nued |
67 Expect.equals(reflectClass(Object), yFromGeneric.upperBound); // /// 02: conti
nued | 67 Expect.equals(reflectClass(Object), yFromGeneric.upperBound); // //# 02: conti
nued |
68 | 68 |
69 typeParameters(superDecl, [#T, #R]); | 69 typeParameters(superDecl, [#T, #R]); |
70 typeParameters(superOfNumAndInt, [#T, #R]); | 70 typeParameters(superOfNumAndInt, [#T, #R]); |
71 typeParameters(genericDecl, [#X, #Y]); // /// 02: continued | 71 typeParameters(genericDecl, [#X, #Y]); // //# 02: continued |
72 typeParameters(superOfXAndY, [#T, #R]); // /// 02: continued | 72 typeParameters(superOfXAndY, [#T, #R]); // //# 02: continued |
73 typeParameters(genericOfNumAndDouble, [#X, #Y]); // /// 02: continued | 73 typeParameters(genericOfNumAndDouble, [#X, #Y]); // //# 02: continued |
74 typeParameters(superOfNumAndDouble, [#T, #R]); // /// 02: continued | 74 typeParameters(superOfNumAndDouble, [#T, #R]); // //# 02: continued |
75 typeParameters(superOfNumAndString, [#T, #R]); // /// 01: continued | 75 typeParameters(superOfNumAndString, [#T, #R]); // //# 01: continued |
76 | 76 |
77 typeArguments(superDecl, []); | 77 typeArguments(superDecl, []); |
78 typeArguments(superOfNumAndInt, [reflectClass(num), reflectClass(int)]); | 78 typeArguments(superOfNumAndInt, [reflectClass(num), reflectClass(int)]); |
79 typeArguments(genericDecl, []); // /// 02: continued | 79 typeArguments(genericDecl, []); // //# 02: continued |
80 typeArguments(superOfXAndY, [xFromGeneric, yFromGeneric]); // /// 02: continue
d | 80 typeArguments(superOfXAndY, [xFromGeneric, yFromGeneric]); // //# 02: continue
d |
81 typeArguments(genericOfNumAndDouble, [reflectClass(num), reflectClass(double)]
); // /// 02: continued | 81 typeArguments(genericOfNumAndDouble, [reflectClass(num), reflectClass(double)]
); // //# 02: continued |
82 typeArguments(superOfNumAndDouble, [reflectClass(num), reflectClass(double)]);
// /// 02: continued | 82 typeArguments(superOfNumAndDouble, [reflectClass(num), reflectClass(double)]);
// //# 02: continued |
83 typeArguments(superOfNumAndString, [reflectClass(num), reflectClass(String)]);
// /// 01: continued | 83 typeArguments(superOfNumAndString, [reflectClass(num), reflectClass(String)]);
// //# 01: continued |
84 } | 84 } |
OLD | NEW |