Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library test.type_arguments_test; | |
| 6 | |
| 7 import 'dart:mirrors'; | |
| 8 | |
| 9 import 'package:expect/expect.dart'; | |
| 10 | |
| 11 class A<T> {} | |
| 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>. | |
|
gbracha
2013/08/05 21:55:31
Comment is wrong.
ahe
2013/08/06 16:45:43
Why?
| |
| 14 class D extends A<int> {} | |
| 15 class E<S> extends A<S> {} | |
| 16 class F<R> extends A<int> {} | |
| 17 class G {} | |
| 18 | |
| 19 typeParameters(mirror, parameterNames){ | |
|
ahe
2013/08/06 16:45:43
Space before {
| |
| 20 Expect.listEquals(parameterNames.map((n) => new Symbol(n)).toList(), | |
| 21 mirror.typeVariables.keys.toList()); | |
| 22 } | |
| 23 | |
| 24 typeArguments(mirror, argumentMirrors){ | |
|
ahe
2013/08/06 16:45:43
Ditto.
| |
| 25 Expect.listEquals(argumentMirrors, | |
| 26 mirror.typeArguments.values.toList()); | |
| 27 } | |
| 28 | |
| 29 main() { | |
| 30 // Declarations. | |
| 31 typeParameters(reflectClass(A), ['T']); | |
| 32 typeParameters(reflectClass(B), []); | |
| 33 typeParameters(reflectClass(C), []); | |
| 34 typeParameters(reflectClass(D), []); | |
| 35 typeParameters(reflectClass(E), ['S']); | |
| 36 typeParameters(reflectClass(F), ['R']); | |
| 37 typeParameters(reflectClass(G), []); | |
| 38 | |
| 39 typeArguments(reflectClass(A), []); | |
| 40 typeArguments(reflectClass(B), []); | |
| 41 typeArguments(reflectClass(C), []); | |
| 42 typeArguments(reflectClass(D), []); | |
| 43 typeArguments(reflectClass(E), []); | |
| 44 typeArguments(reflectClass(F), []); | |
| 45 typeArguments(reflectClass(G), []); | |
| 46 | |
| 47 Expect.isTrue(reflectClass(A).isOriginalDeclaration); | |
| 48 Expect.isTrue(reflectClass(B).isOriginalDeclaration); | |
| 49 Expect.isTrue(reflectClass(C).isOriginalDeclaration); | |
| 50 Expect.isTrue(reflectClass(D).isOriginalDeclaration); | |
| 51 Expect.isTrue(reflectClass(E).isOriginalDeclaration); | |
| 52 Expect.isTrue(reflectClass(F).isOriginalDeclaration); | |
| 53 Expect.isTrue(reflectClass(G).isOriginalDeclaration); | |
| 54 | |
| 55 Expect.equals(reflectClass(A), reflectClass(A).originalDeclaration); | |
| 56 Expect.equals(reflectClass(B), reflectClass(B).originalDeclaration); | |
| 57 Expect.equals(reflectClass(C), reflectClass(C).originalDeclaration); | |
| 58 Expect.equals(reflectClass(D), reflectClass(D).originalDeclaration); | |
| 59 Expect.equals(reflectClass(E), reflectClass(E).originalDeclaration); | |
| 60 Expect.equals(reflectClass(F), reflectClass(F).originalDeclaration); | |
| 61 Expect.equals(reflectClass(G), reflectClass(G).originalDeclaration); | |
| 62 | |
| 63 // Instantiations. | |
| 64 typeParameters(reflect(new A<num>()).type, ['T']); | |
| 65 typeParameters(reflect(new B<num>()).type, ['']); | |
|
gbracha
2013/08/05 21:55:31
Why do you sometimes use a list with an empty stri
| |
| 66 typeParameters(reflect(new C ()).type, ['']); | |
| 67 typeParameters(reflect(new D ()).type, ['']); | |
| 68 typeParameters(reflect(new E ()).type, ['S']); | |
| 69 typeParameters(reflect(new F<num>()).type, ['R']); | |
| 70 typeParameters(reflect(new G()).type, []); | |
| 71 | |
| 72 var numMirror = reflectClass(num); | |
| 73 typeArguments(reflect(new A<num>()).type, [numMirror]); | |
| 74 typeArguments(reflect(new B ()).type, []); | |
| 75 typeArguments(reflect(new C ()).type, []); | |
| 76 typeArguments(reflect(new D ()).type, []); | |
| 77 typeArguments(reflect(new E<num>()).type, [numMirror]); | |
| 78 typeArguments(reflect(new F<num>()).type, [numMirror]); | |
| 79 typeArguments(reflect(new G ()).type, []); | |
| 80 | |
| 81 Expect.isFalse(reflect(new A<num>()).type.isOriginalDeclaration); | |
| 82 Expect.isTrue (reflect(new B ()).type.isOriginalDeclaration); | |
| 83 Expect.isTrue (reflect(new C ()).type.isOriginalDeclaration); | |
| 84 Expect.isTrue (reflect(new D ()).type.isOriginalDeclaration); | |
| 85 Expect.isFalse(reflect(new E<num>()).type.isOriginalDeclaration); | |
| 86 Expect.isFalse(reflect(new F<num>()).type.isOriginalDeclaration); | |
| 87 Expect.isTrue (reflect(new G ()).type.isOriginalDeclaration); | |
| 88 | |
| 89 Expect.equals(reflectClass(A), reflect(new A<num>()).type.originalDeclaration) ; | |
|
ahe
2013/08/06 16:45:43
Long lines.
| |
| 90 Expect.equals(reflectClass(B), reflect(new B ()).type.originalDeclaration) ; | |
|
ahe
2013/08/06 16:45:43
Please don't use ASCII art, that is, remove the ex
| |
| 91 Expect.equals(reflectClass(C), reflect(new C ()).type.originalDeclaration) ; | |
| 92 Expect.equals(reflectClass(D), reflect(new D ()).type.originalDeclaration) ; | |
| 93 Expect.equals(reflectClass(E), reflect(new E<num>()).type.originalDeclaration) ; | |
| 94 Expect.equals(reflectClass(F), reflect(new F<num>()).type.originalDeclaration) ; | |
| 95 Expect.equals(reflectClass(G), reflect(new G ()).type.originalDeclaration) ; | |
| 96 | |
| 97 // Library members are all uninstantaited generics or non-generics. | |
| 98 currentMirrorSystem().libraries.values.forEach((libraryMirror) { | |
| 99 libraryMirrors.classes.values.forEach((classMirror) { | |
|
gbracha
2013/08/05 21:55:31
Isn't it libraryMirror rather than libraryMirrors?
| |
| 100 Expect.isTrue(classMirror.isOriginalDeclaration); | |
| 101 Expect.equals(classMirror, classMirror.originalDeclaration); | |
| 102 } | |
| 103 }); | |
| 104 } | |
| OLD | NEW |