| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:mirrors'; |
| |
| import 'package:expect/expect.dart'; |
| |
| import 'generics_helper.dart'; |
| |
| class Super<T extends num> {} |
| |
| class Fixed extends Super<int> {} |
| |
| class Generic<R extends double> extends Super<R> {} |
| |
| void main() { |
| ClassMirror superDecl = reflectClass(Super); |
| ClassMirror superOfInt = reflectClass(Fixed).superclass!; |
| ClassMirror genericDecl = reflectClass(Generic); |
| ClassMirror superOfR = genericDecl.superclass!; |
| ClassMirror genericOfDouble = reflect(Generic<double>()).type; |
| ClassMirror superOfDouble = genericOfDouble.superclass!; |
| |
| Expect.isTrue(superDecl.isOriginalDeclaration); |
| Expect.isFalse(superOfInt.isOriginalDeclaration); |
| Expect.isTrue(genericDecl.isOriginalDeclaration); |
| Expect.isFalse(superOfR.isOriginalDeclaration); |
| Expect.isFalse(genericOfDouble.isOriginalDeclaration); |
| Expect.isFalse(superOfDouble.isOriginalDeclaration); |
| |
| TypeVariableMirror tFromSuper = superDecl.typeVariables.single; |
| TypeVariableMirror rFromGeneric = genericDecl.typeVariables.single; |
| |
| Expect.equals(reflectClass(num), tFromSuper.upperBound); |
| Expect.equals(reflectClass(double), rFromGeneric.upperBound); |
| |
| typeArguments(superDecl, []); |
| typeArguments(superOfInt, [reflectClass(int)]); |
| typeArguments(genericDecl, []); |
| typeArguments(superOfR, [rFromGeneric]); |
| typeArguments(genericOfDouble, [reflectClass(double)]); |
| typeArguments(superOfDouble, [reflectClass(double)]); |
| } |