| 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; | 5 library test.generic_bounded; |
| 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_test.dart'; | 11 import 'generics_helper.dart'; |
| 12 | 12 |
| 13 class Interface<T> {} | 13 class Interface<T> {} |
| 14 class Bounded<S extends num> {} | 14 class Bounded<S extends num> {} |
| 15 | 15 |
| 16 class Fixed implements Interface<int> {} | 16 class Fixed implements Interface<int> {} |
| 17 class Generic<R> implements Interface<R> {} | 17 class Generic<R> implements Interface<R> {} |
| 18 | 18 |
| 19 class Bienbounded implements Bounded<int> {} | 19 class Bienbounded implements Bounded<int> {} |
| 20 class Malbounded implements Bounded<String> {} | 20 class Malbounded implements Bounded<String> {} /// 01: static type warning |
| 21 class FBounded implements Interface<FBounded> {} | 21 class FBounded implements Interface<FBounded> {} |
| 22 | 22 |
| 23 class Mixin {} | 23 class Mixin {} |
| 24 class FixedMixinApplication = Object with Mixin implements Interface<int>; | 24 class FixedMixinApplication = Object with Mixin implements Interface<int>; |
| 25 class GenericMixinApplication<X> = Object with Mixin implements Interface<X>; | 25 class GenericMixinApplication<X> = Object with Mixin implements Interface<X>; |
| 26 class FixedClass extends Object with Mixin implements Interface<int> {} | 26 class FixedClass extends Object with Mixin implements Interface<int> {} |
| 27 class GenericClass<Y> extends Object with Mixin implements Interface<Y> {} | 27 class GenericClass<Y> extends Object with Mixin implements Interface<Y> {} |
| 28 | 28 |
| 29 main() { | 29 main() { |
| 30 TypeMirror dynamicMirror = currentMirrorSystem().dynamicType; | 30 TypeMirror dynamicMirror = currentMirrorSystem().dynamicType; |
| 31 | 31 |
| 32 ClassMirror interfaceDecl = reflectClass(Interface); | 32 ClassMirror interfaceDecl = reflectClass(Interface); |
| 33 ClassMirror boundedDecl = reflectClass(Bounded); | 33 ClassMirror boundedDecl = reflectClass(Bounded); |
| 34 | 34 |
| 35 ClassMirror interfaceOfInt = reflectClass(Fixed).superinterfaces.single; | 35 ClassMirror interfaceOfInt = reflectClass(Fixed).superinterfaces.single; |
| 36 ClassMirror interfaceOfR = reflectClass(Generic).superinterfaces.single; | 36 ClassMirror interfaceOfR = reflectClass(Generic).superinterfaces.single; |
| 37 ClassMirror interfaceOfBool = reflect(new Generic<bool>()).type.superinterface
s.single; | 37 ClassMirror interfaceOfBool = reflect(new Generic<bool>()).type.superinterface
s.single; |
| 38 | 38 |
| 39 ClassMirror boundedOfInt = reflectClass(Bienbounded).superinterfaces.single; | 39 ClassMirror boundedOfInt = reflectClass(Bienbounded).superinterfaces.single; |
| 40 ClassMirror boundedOfString = reflectClass(Malbounded).superinterfaces.single; | 40 ClassMirror boundedOfString = reflectClass(Malbounded).superinterfaces.single;
/// 01: continued |
| 41 ClassMirror interfaceOfFBounded = reflectClass(FBounded).superinterfaces.singl
e; | 41 ClassMirror interfaceOfFBounded = reflectClass(FBounded).superinterfaces.singl
e; |
| 42 | 42 |
| 43 ClassMirror interfaceOfInt2 = reflectClass(FixedMixinApplication).superinterfa
ces.single; | 43 ClassMirror interfaceOfInt2 = reflectClass(FixedMixinApplication).superinterfa
ces.single; |
| 44 ClassMirror interfaceOfX = reflectClass(GenericMixinApplication).superinterfac
es.single; | 44 ClassMirror interfaceOfX = reflectClass(GenericMixinApplication).superinterfac
es.single; |
| 45 ClassMirror interfaceOfDouble = reflect(new GenericMixinApplication<double>())
.type.superinterfaces.single; | 45 ClassMirror interfaceOfDouble = reflect(new GenericMixinApplication<double>())
.type.superinterfaces.single; |
| 46 ClassMirror interfaceOfInt3 = reflectClass(FixedClass).superinterfaces.single; | 46 ClassMirror interfaceOfInt3 = reflectClass(FixedClass).superinterfaces.single; |
| 47 ClassMirror interfaceOfY = reflectClass(GenericClass).superinterfaces.single; | 47 ClassMirror interfaceOfY = reflectClass(GenericClass).superinterfaces.single; |
| 48 ClassMirror interfaceOfDouble2 = reflect(new GenericClass<double>()).type.supe
rinterfaces.single; | 48 ClassMirror interfaceOfDouble2 = reflect(new GenericClass<double>()).type.supe
rinterfaces.single; |
| 49 | 49 |
| 50 | 50 |
| 51 Expect.isTrue(interfaceDecl.isOriginalDeclaration); | 51 Expect.isTrue(interfaceDecl.isOriginalDeclaration); |
| 52 Expect.isTrue(boundedDecl.isOriginalDeclaration); | 52 Expect.isTrue(boundedDecl.isOriginalDeclaration); |
| 53 | 53 |
| 54 Expect.isFalse(interfaceOfInt.isOriginalDeclaration); | 54 Expect.isFalse(interfaceOfInt.isOriginalDeclaration); |
| 55 Expect.isFalse(interfaceOfR.isOriginalDeclaration); | 55 Expect.isFalse(interfaceOfR.isOriginalDeclaration); |
| 56 Expect.isFalse(interfaceOfBool.isOriginalDeclaration); | 56 Expect.isFalse(interfaceOfBool.isOriginalDeclaration); |
| 57 Expect.isFalse(boundedOfInt.isOriginalDeclaration); | 57 Expect.isFalse(boundedOfInt.isOriginalDeclaration); |
| 58 Expect.isFalse(boundedOfString.isOriginalDeclaration); | 58 Expect.isFalse(boundedOfString.isOriginalDeclaration); /// 01: continued |
| 59 Expect.isFalse(interfaceOfFBounded.isOriginalDeclaration); | 59 Expect.isFalse(interfaceOfFBounded.isOriginalDeclaration); |
| 60 Expect.isFalse(interfaceOfInt2.isOriginalDeclaration); | 60 Expect.isFalse(interfaceOfInt2.isOriginalDeclaration); |
| 61 Expect.isFalse(interfaceOfX.isOriginalDeclaration); | 61 Expect.isFalse(interfaceOfX.isOriginalDeclaration); |
| 62 Expect.isFalse(interfaceOfDouble.isOriginalDeclaration); | 62 Expect.isFalse(interfaceOfDouble.isOriginalDeclaration); |
| 63 Expect.isFalse(interfaceOfInt3.isOriginalDeclaration); | 63 Expect.isFalse(interfaceOfInt3.isOriginalDeclaration); |
| 64 Expect.isFalse(interfaceOfY.isOriginalDeclaration); | 64 Expect.isFalse(interfaceOfY.isOriginalDeclaration); |
| 65 Expect.isFalse(interfaceOfDouble2.isOriginalDeclaration); | 65 Expect.isFalse(interfaceOfDouble2.isOriginalDeclaration); |
| 66 | 66 |
| 67 | 67 |
| 68 TypeVariableMirror tFromInterface = interfaceDecl.typeVariables.single; | 68 TypeVariableMirror tFromInterface = interfaceDecl.typeVariables.single; |
| 69 TypeVariableMirror sFromBounded = boundedDecl.typeVariables.single; | 69 TypeVariableMirror sFromBounded = boundedDecl.typeVariables.single; |
| 70 TypeVariableMirror rFromGeneric = reflectClass(Generic).typeVariables.single; | 70 TypeVariableMirror rFromGeneric = reflectClass(Generic).typeVariables.single; |
| 71 TypeVariableMirror xFromGenericMixinApplication = reflectClass(GenericMixinApp
lication).typeVariables.single; | 71 TypeVariableMirror xFromGenericMixinApplication = reflectClass(GenericMixinApp
lication).typeVariables.single; |
| 72 TypeVariableMirror yFromGenericClass = reflectClass(GenericClass).typeVariable
s.single; | 72 TypeVariableMirror yFromGenericClass = reflectClass(GenericClass).typeVariable
s.single; |
| 73 | 73 |
| 74 Expect.equals(reflectClass(Object), tFromInterface.upperBound); | 74 Expect.equals(reflectClass(Object), tFromInterface.upperBound); |
| 75 Expect.equals(reflectClass(num), sFromBounded.upperBound); | 75 Expect.equals(reflectClass(num), sFromBounded.upperBound); |
| 76 Expect.equals(reflectClass(Object), rFromGeneric.upperBound); | 76 Expect.equals(reflectClass(Object), rFromGeneric.upperBound); |
| 77 Expect.equals(reflectClass(Object), xFromGenericMixinApplication.upperBound); | 77 Expect.equals(reflectClass(Object), xFromGenericMixinApplication.upperBound); |
| 78 Expect.equals(reflectClass(Object), yFromGenericClass.upperBound); | 78 Expect.equals(reflectClass(Object), yFromGenericClass.upperBound); |
| 79 | 79 |
| 80 | 80 |
| 81 typeParameters(interfaceDecl, [#T]); | 81 typeParameters(interfaceDecl, [#T]); |
| 82 typeParameters(boundedDecl, [#S]); | 82 typeParameters(boundedDecl, [#S]); |
| 83 typeParameters(interfaceOfInt, [#T]); | 83 typeParameters(interfaceOfInt, [#T]); |
| 84 typeParameters(interfaceOfR, [#T]); | 84 typeParameters(interfaceOfR, [#T]); |
| 85 typeParameters(interfaceOfBool, [#T]); | 85 typeParameters(interfaceOfBool, [#T]); |
| 86 typeParameters(boundedOfInt, [#S]); | 86 typeParameters(boundedOfInt, [#S]); |
| 87 typeParameters(boundedOfString, [#S]); | 87 typeParameters(boundedOfString, [#S]); /// 01: continued |
| 88 typeParameters(interfaceOfFBounded, [#T]); | 88 typeParameters(interfaceOfFBounded, [#T]); |
| 89 typeParameters(interfaceOfInt2, [#T]); | 89 typeParameters(interfaceOfInt2, [#T]); |
| 90 typeParameters(interfaceOfX, [#T]); | 90 typeParameters(interfaceOfX, [#T]); |
| 91 typeParameters(interfaceOfDouble, [#T]); | 91 typeParameters(interfaceOfDouble, [#T]); |
| 92 typeParameters(interfaceOfInt3, [#T]); | 92 typeParameters(interfaceOfInt3, [#T]); |
| 93 typeParameters(interfaceOfY, [#T]); | 93 typeParameters(interfaceOfY, [#T]); |
| 94 typeParameters(interfaceOfDouble2, [#T]); | 94 typeParameters(interfaceOfDouble2, [#T]); |
| 95 | 95 |
| 96 typeArguments(interfaceDecl, []); | 96 typeArguments(interfaceDecl, []); |
| 97 typeArguments(boundedDecl, []); | 97 typeArguments(boundedDecl, []); |
| 98 typeArguments(interfaceOfInt, [reflectClass(int)]); | 98 typeArguments(interfaceOfInt, [reflectClass(int)]); |
| 99 typeArguments(interfaceOfR, [rFromGeneric]); | 99 typeArguments(interfaceOfR, [rFromGeneric]); |
| 100 typeArguments(interfaceOfBool, [reflectClass(bool)]); /// 01: ok | 100 typeArguments(interfaceOfBool, [reflectClass(bool)]); |
| 101 typeArguments(boundedOfInt, [reflectClass(int)]); | 101 typeArguments(boundedOfInt, [reflectClass(int)]); |
| 102 typeArguments(boundedOfString, [reflectClass(String)]); | 102 typeArguments(boundedOfString, [reflectClass(String)]); /// 01: continued |
| 103 typeArguments(interfaceOfFBounded, [reflectClass(FBounded)]); | 103 typeArguments(interfaceOfFBounded, [reflectClass(FBounded)]); |
| 104 typeArguments(interfaceOfInt2, [reflectClass(int)]); | 104 typeArguments(interfaceOfInt2, [reflectClass(int)]); |
| 105 typeArguments(interfaceOfX, [xFromGenericMixinApplication]); | 105 typeArguments(interfaceOfX, [xFromGenericMixinApplication]); |
| 106 typeArguments(interfaceOfDouble, [reflectClass(double)]); /// 01: ok | 106 typeArguments(interfaceOfDouble, [reflectClass(double)]); |
| 107 typeArguments(interfaceOfInt3, [reflectClass(int)]); | 107 typeArguments(interfaceOfInt3, [reflectClass(int)]); |
| 108 typeArguments(interfaceOfY, [yFromGenericClass]); | 108 typeArguments(interfaceOfY, [yFromGenericClass]); |
| 109 typeArguments(interfaceOfDouble2, [reflectClass(double)]); /// 01: ok | 109 typeArguments(interfaceOfDouble2, [reflectClass(double)]); |
| 110 } | 110 } |
| OLD | NEW |