blob: 2aa711816a085b42917fe5bbd531776d68b1ff4c [file] [log] [blame]
// 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.
library test.type_argument_is_type_variable;
import 'dart:mirrors';
import 'package:expect/expect.dart';
import 'generics_helper.dart';
class SuperSuper<SS> {}
class Super<S> extends SuperSuper<S> {}
class Generic<G> extends Super<G> {}
main() {
// Declarations.
ClassMirror generic = reflectClass(Generic);
ClassMirror superOfGeneric = generic.superclass!;
ClassMirror superOfSuperOfGeneric = superOfGeneric.superclass!;
TypeVariableMirror gFromGeneric = generic.typeVariables.single;
TypeVariableMirror sFromSuper = superOfGeneric.typeVariables.single;
TypeVariableMirror ssFromSuperSuper =
superOfSuperOfGeneric.typeVariables.single;
Expect.equals(#G, gFromGeneric.simpleName);
Expect.equals(#S, sFromSuper.simpleName);
Expect.equals(#SS, ssFromSuperSuper.simpleName);
typeParameters(generic, [#G]);
typeParameters(superOfGeneric, [#S]);
typeParameters(superOfSuperOfGeneric, [#SS]);
typeArguments(generic, []);
typeArguments(superOfGeneric, [gFromGeneric]);
typeArguments(superOfSuperOfGeneric, [gFromGeneric]);
// Instantiations.
ClassMirror genericWithInt = reflect(new Generic<int>()).type;
ClassMirror superOfGenericWithInt = genericWithInt.superclass!;
ClassMirror superOfSuperOfGenericWithInt = superOfGenericWithInt.superclass!;
typeParameters(genericWithInt, [#G]);
typeParameters(superOfGenericWithInt, [#S]);
typeParameters(superOfSuperOfGenericWithInt, [#SS]);
typeArguments(genericWithInt, [reflectClass(int)]);
typeArguments(superOfGenericWithInt, [reflectClass(int)]);
typeArguments(superOfSuperOfGenericWithInt, [reflectClass(int)]);
}