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

Side by Side Diff: tests/lib/mirrors/generics_test.dart

Issue 23707046: Support typeArguments, isOriginalDeclaration, and get originalDeclaration in ClassMirror. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed comments. Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « tests/lib/lib.status ('k') | tests/lib/mirrors/typearguments_mirror_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.type_arguments_test; 5 library test.type_arguments_test;
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 class A<T> {} 11 class A<T> {}
12 class B extends A {} // Same as class B extends A<dynamic>. 12 class B extends A {} // Same as class B extends A<dynamic>.
13 class C extends A<num, int> {} // Same as class C extends A<dynamic>. 13 class C extends A<num, int> {} // Same as class C extends A<dynamic>.
14 class D extends A<int> {} 14 class D extends A<int> {}
15 class E<S> extends A<S> {} 15 class E<S> extends A<S> {}
16 class F<R> extends A<int> {} 16 class F<R> extends A<int> {}
17 class G {} 17 class G {}
18 class H<A,B,C> {} 18 class H<A,B,C> {}
19 19
20 typeParameters(mirror, parameterNames) { 20 typeParameters(mirror, parameterNames) {
21 Expect.listEquals(parameterNames.map((n) => new Symbol(n)).toList(), 21 Expect.listEquals(parameterNames.map((n) => new Symbol(n)).toList(),
22 mirror.typeVariables.map((v) => v.simpleName).toList()); 22 mirror.typeVariables.map((v) => v.simpleName).toList());
23 } 23 }
24 24
25 typeArguments(mirror, argumentMirrors) { 25 typeArguments(mirror, argumentMirrors) {
26 Expect.listEquals(argumentMirrors, 26 Expect.listEquals(argumentMirrors, mirror.typeArguments);
27 mirror.typeArguments);
28 } 27 }
29 28
30 main() { 29 main() {
31 // Declarations. 30 // Declarations.
32 typeParameters(reflectClass(A), ['T']); 31 typeParameters(reflectClass(A), ['T']); /// 01: ok
33 typeParameters(reflectClass(B), []); 32 typeParameters(reflectClass(B), []); /// 01: ok
34 typeParameters(reflectClass(C), []); 33 typeParameters(reflectClass(C), []); /// 01: ok
35 typeParameters(reflectClass(D), []); 34 typeParameters(reflectClass(D), []); /// 01: ok
36 typeParameters(reflectClass(E), ['S']); 35 typeParameters(reflectClass(E), ['S']); /// 01: ok
37 typeParameters(reflectClass(F), ['R']); 36 typeParameters(reflectClass(F), ['R']); /// 01: ok
38 typeParameters(reflectClass(G), []); 37 typeParameters(reflectClass(G), []); /// 01: ok
39 38
40 typeArguments(reflectClass(A), []); 39 typeArguments(reflectClass(A), []);
41 typeArguments(reflectClass(B), []); 40 typeArguments(reflectClass(B), []);
42 typeArguments(reflectClass(C), []); 41 typeArguments(reflectClass(C), []);
43 typeArguments(reflectClass(D), []); 42 typeArguments(reflectClass(D), []);
44 typeArguments(reflectClass(E), []); 43 typeArguments(reflectClass(E), []);
45 typeArguments(reflectClass(F), []); 44 typeArguments(reflectClass(F), []);
46 typeArguments(reflectClass(G), []); 45 typeArguments(reflectClass(G), []);
47 46
48 Expect.isTrue(reflectClass(A).isOriginalDeclaration); 47 Expect.isTrue(reflectClass(A).isOriginalDeclaration);
49 Expect.isTrue(reflectClass(B).isOriginalDeclaration); 48 Expect.isTrue(reflectClass(B).isOriginalDeclaration);
50 Expect.isTrue(reflectClass(C).isOriginalDeclaration); 49 Expect.isTrue(reflectClass(C).isOriginalDeclaration);
51 Expect.isTrue(reflectClass(D).isOriginalDeclaration); 50 Expect.isTrue(reflectClass(D).isOriginalDeclaration);
52 Expect.isTrue(reflectClass(E).isOriginalDeclaration); 51 Expect.isTrue(reflectClass(E).isOriginalDeclaration);
53 Expect.isTrue(reflectClass(F).isOriginalDeclaration); 52 Expect.isTrue(reflectClass(F).isOriginalDeclaration);
54 Expect.isTrue(reflectClass(G).isOriginalDeclaration); 53 Expect.isTrue(reflectClass(G).isOriginalDeclaration);
55 54
56 Expect.equals(reflectClass(A), reflectClass(A).originalDeclaration); 55 Expect.equals(reflectClass(A), reflectClass(A).originalDeclaration);
57 Expect.equals(reflectClass(B), reflectClass(B).originalDeclaration); 56 Expect.equals(reflectClass(B), reflectClass(B).originalDeclaration);
58 Expect.equals(reflectClass(C), reflectClass(C).originalDeclaration); 57 Expect.equals(reflectClass(C), reflectClass(C).originalDeclaration);
59 Expect.equals(reflectClass(D), reflectClass(D).originalDeclaration); 58 Expect.equals(reflectClass(D), reflectClass(D).originalDeclaration);
60 Expect.equals(reflectClass(E), reflectClass(E).originalDeclaration); 59 Expect.equals(reflectClass(E), reflectClass(E).originalDeclaration);
61 Expect.equals(reflectClass(F), reflectClass(F).originalDeclaration); 60 Expect.equals(reflectClass(F), reflectClass(F).originalDeclaration);
62 Expect.equals(reflectClass(G), reflectClass(G).originalDeclaration); 61 Expect.equals(reflectClass(G), reflectClass(G).originalDeclaration);
63 62
64 // Instantiations. 63 // Instantiations.
65 typeParameters(reflect(new A<num>()).type, ['T']); 64 typeParameters(reflect(new A<num>()).type, ['T']); /// 01: ok
66 typeParameters(reflect(new B<num>()).type, []); 65 typeParameters(reflect(new B<num>()).type, []); /// 01: ok
67 typeParameters(reflect(new C()).type, []); 66 typeParameters(reflect(new C()).type, []); /// 01: ok
68 typeParameters(reflect(new D()).type, []); 67 typeParameters(reflect(new D()).type, []); /// 01: ok
69 typeParameters(reflect(new E()).type, ['S']); 68 typeParameters(reflect(new E()).type, ['S']); /// 01: ok
70 typeParameters(reflect(new F<num>()).type, ['R']); 69 typeParameters(reflect(new F<num>()).type, ['R']); /// 01: ok
71 typeParameters(reflect(new G()).type, []); 70 typeParameters(reflect(new G()).type, []); /// 01: ok
72 typeParameters(reflect(new H()).type, ['A', 'B', 'C']); 71 typeParameters(reflect(new H()).type, ['A', 'B', 'C']); /// 01: ok
73 72
74 var numMirror = reflectClass(num); 73 var numMirror = reflectClass(num);
75 var dynamicMirror = currentMirrorSystem().dynamicType; 74 var dynamicMirror = currentMirrorSystem().dynamicType;
76 typeArguments(reflect(new A<num>()).type, [numMirror]); 75 typeArguments(reflect(new A<num>()).type, [numMirror]);
77 typeArguments(reflect(new A<dynamic>()).type, [dynamicMirror]); 76 typeArguments(reflect(new A<dynamic>()).type, [dynamicMirror]); /// 01: ok
78 typeArguments(reflect(new A()).type, [dynamicMirror]); 77 typeArguments(reflect(new A()).type, [dynamicMirror]); /// 01: ok
79 typeArguments(reflect(new B()).type, []); 78 typeArguments(reflect(new B()).type, []);
80 typeArguments(reflect(new C()).type, []); 79 typeArguments(reflect(new C()).type, []);
81 typeArguments(reflect(new D()).type, []); 80 typeArguments(reflect(new D()).type, []);
82 typeArguments(reflect(new E<num>()).type, [numMirror]); 81 typeArguments(reflect(new E<num>()).type, [numMirror]);
83 typeArguments(reflect(new E<dynamic>()).type, [dynamicMirror]); 82 typeArguments(reflect(new E<dynamic>()).type, [dynamicMirror]); /// 01: ok
84 typeArguments(reflect(new E()).type, [dynamicMirror]); 83 typeArguments(reflect(new E()).type, [dynamicMirror]); /// 01: ok
85 typeArguments(reflect(new F<num>()).type, [numMirror]); 84 typeArguments(reflect(new F<num>()).type, [numMirror]);
86 typeArguments(reflect(new F<dynamic>()).type, [dynamicMirror]); 85 typeArguments(reflect(new F<dynamic>()).type, [dynamicMirror]); /// 01: ok
87 typeArguments(reflect(new F()).type, [dynamicMirror]); 86 typeArguments(reflect(new F()).type, [dynamicMirror]); /// 01: ok
88 typeArguments(reflect(new G()).type, []); 87 typeArguments(reflect(new G()).type, []);
89 typeArguments(reflect(new H<dynamic, num, dynamic>()).type, 88 typeArguments(reflect(new H<dynamic, num, dynamic>()).type, /// 01: ok
90 [dynamicMirror, numMirror, dynamicMirror]); 89 [dynamicMirror, numMirror, dynamicMirror]); /// 01: ok
91 90
92 Expect.isFalse(reflect(new A<num>()).type.isOriginalDeclaration); 91 Expect.isFalse(reflect(new A<num>()).type.isOriginalDeclaration);
93 Expect.isTrue(reflect(new B()).type.isOriginalDeclaration); 92 Expect.isTrue(reflect(new B()).type.isOriginalDeclaration);
94 Expect.isTrue(reflect(new C()).type.isOriginalDeclaration); 93 Expect.isTrue(reflect(new C()).type.isOriginalDeclaration);
95 Expect.isTrue(reflect(new D()).type.isOriginalDeclaration); 94 Expect.isTrue(reflect(new D()).type.isOriginalDeclaration);
96 Expect.isFalse(reflect(new E<num>()).type.isOriginalDeclaration); 95 Expect.isFalse(reflect(new E<num>()).type.isOriginalDeclaration);
97 Expect.isFalse(reflect(new F<num>()).type.isOriginalDeclaration); 96 Expect.isFalse(reflect(new F<num>()).type.isOriginalDeclaration);
98 Expect.isTrue(reflect(new G()).type.isOriginalDeclaration); 97 Expect.isTrue(reflect(new G()).type.isOriginalDeclaration);
99 Expect.isFalse(reflect(new H()).type.isOriginalDeclaration); 98 Expect.isFalse(reflect(new H()).type.isOriginalDeclaration); /// 01: ok
100 99
101 Expect.equals(reflectClass(A), 100 Expect.equals(reflectClass(A),
102 reflect(new A<num>()).type.originalDeclaration); 101 reflect(new A<num>()).type.originalDeclaration);
103 Expect.equals(reflectClass(B), 102 Expect.equals(reflectClass(B),
104 reflect(new B()).type.originalDeclaration); 103 reflect(new B()).type.originalDeclaration);
105 Expect.equals(reflectClass(C), 104 Expect.equals(reflectClass(C),
106 reflect(new C()).type.originalDeclaration); 105 reflect(new C()).type.originalDeclaration);
107 Expect.equals(reflectClass(D), 106 Expect.equals(reflectClass(D),
108 reflect(new D()).type.originalDeclaration); 107 reflect(new D()).type.originalDeclaration);
109 Expect.equals(reflectClass(E), 108 Expect.equals(reflectClass(E),
(...skipping 12 matching lines...) Expand all
122 Expect.equals(reflect(new C()).type, 121 Expect.equals(reflect(new C()).type,
123 reflect(new C()).type.originalDeclaration); 122 reflect(new C()).type.originalDeclaration);
124 Expect.equals(reflect(new D()).type, 123 Expect.equals(reflect(new D()).type,
125 reflect(new D()).type.originalDeclaration); 124 reflect(new D()).type.originalDeclaration);
126 Expect.notEquals(reflect(new E<num>()).type, 125 Expect.notEquals(reflect(new E<num>()).type,
127 reflect(new E<num>()).type.originalDeclaration); 126 reflect(new E<num>()).type.originalDeclaration);
128 Expect.notEquals(reflect(new F<num>()).type, 127 Expect.notEquals(reflect(new F<num>()).type,
129 reflect(new F<num>()).type.originalDeclaration); 128 reflect(new F<num>()).type.originalDeclaration);
130 Expect.equals(reflect(new G()).type, 129 Expect.equals(reflect(new G()).type,
131 reflect(new G()).type.originalDeclaration); 130 reflect(new G()).type.originalDeclaration);
132 Expect.notEquals(reflect(new H()).type, 131 Expect.notEquals(reflect(new H()).type, /// 01: ok
133 reflect(new H()).type.originalDeclaration); 132 reflect(new H()).type.originalDeclaration); /// 01: ok
134 133
135 // Library members are all uninstantaited generics or non-generics. 134 // Library members are all uninstantaited generics or non-generics.
136 currentMirrorSystem().libraries.values.forEach((libraryMirror) { 135 currentMirrorSystem().libraries.values.forEach((libraryMirror) {
137 libraryMirror.classes.values.forEach((classMirror) { 136 libraryMirror.classes.values.forEach((classMirror) {
138 // TODO(12282): Deal with generic typedefs. 137 // TODO(12282): Deal with generic typedefs.
139 if (classMirror is! TypedefMirror) { 138 if (classMirror is! TypedefMirror) {
140 Expect.isTrue(classMirror.isOriginalDeclaration); 139 Expect.isTrue(classMirror.isOriginalDeclaration);
141 Expect.equals(classMirror, classMirror.originalDeclaration); 140 Expect.equals(classMirror, classMirror.originalDeclaration);
142 } 141 }
143 }); 142 });
144 }); 143 });
145 } 144 }
OLDNEW
« no previous file with comments | « tests/lib/lib.status ('k') | tests/lib/mirrors/typearguments_mirror_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698