blob: 3fab50e8e4a263d638e6dc4b03f3bc877bc652bc [file] [log] [blame] [edit]
// 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)]);
}