// 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 'package:expect/expect.dart'; import 'dart:mirrors'; class A {} class B extends A {} class C extends A {} class D extends A {} class E extends G> {} class F implements A {} class FF implements G> {} class G {} class H {} class U {} class R {} void testOriginals() { ClassMirror a = reflectClass(A); ClassMirror b = reflectClass(B); ClassMirror c = reflectClass(C); ClassMirror d = reflectClass(D); ClassMirror e = reflectClass(E); ClassMirror f = reflectClass(F); ClassMirror ff = reflectClass(FF); ClassMirror superA = a.superclass!; ClassMirror superB = b.superclass!; ClassMirror superC = c.superclass!; ClassMirror superD = d.superclass!; ClassMirror superE = e.superclass!; ClassMirror superInterfaceF = f.superinterfaces[0]; ClassMirror superInterfaceFF = ff.superinterfaces[0]; TypeVariableMirror aT = a.typeVariables[0]; TypeVariableMirror dT = d.typeVariables[0]; TypeVariableMirror eX = e.typeVariables[0]; TypeVariableMirror eY = e.typeVariables[1]; TypeVariableMirror fX = f.typeVariables[0]; TypeVariableMirror feX = ff.typeVariables[0]; TypeVariableMirror feY = ff.typeVariables[1]; Expect.isTrue(superA.isOriginalDeclaration); Expect.isFalse(superB.isOriginalDeclaration); Expect.isFalse(superC.isOriginalDeclaration); Expect.isFalse(superD.isOriginalDeclaration); Expect.isFalse(superE.isOriginalDeclaration); Expect.isFalse(superInterfaceF.isOriginalDeclaration); Expect.isFalse(superInterfaceFF.isOriginalDeclaration); Expect.equals(reflectClass(Object), superA); Expect.equals(reflect(new A()).type, superB); Expect.equals(reflect(new A()).type, superC); //# 01: ok Expect.equals(reflect(new U()).type, superB.typeArguments[0]); Expect.equals(reflect(new C()).type, superC.typeArguments[0]); //# 01: ok Expect.equals(dT, superD.typeArguments[0]); Expect.equals(eY, superE.typeArguments[0].typeArguments[0]); Expect.equals(feY, superInterfaceFF.typeArguments[0].typeArguments[0]); Expect.equals(fX, superInterfaceF.typeArguments[0]); } void testInstances() { ClassMirror a = reflect(new A()).type; ClassMirror b = reflect(new B()).type; ClassMirror c = reflect(new C()).type; ClassMirror d = reflect(new D()).type; ClassMirror e = reflect(new E()).type; ClassMirror e0 = reflect(new E>()).type; ClassMirror ff = reflect(new FF()).type; ClassMirror f = reflect(new F()).type; ClassMirror u = reflect(new U()).type; ClassMirror r = reflect(new R()).type; ClassMirror hr = reflect(new H()).type; ClassMirror superA = a.superclass!; ClassMirror superB = b.superclass!; ClassMirror superC = c.superclass!; ClassMirror superD = d.superclass!; ClassMirror superE = e.superclass!; ClassMirror superE0 = e0.superclass!; ClassMirror superInterfaceF = f.superinterfaces[0]; ClassMirror superInterfaceFF = ff.superinterfaces[0]; Expect.isTrue(superA.isOriginalDeclaration); Expect.isFalse(superB.isOriginalDeclaration); Expect.isFalse(superC.isOriginalDeclaration); Expect.isFalse(superD.isOriginalDeclaration); Expect.isFalse(superE.isOriginalDeclaration); Expect.isFalse(superE0.isOriginalDeclaration); Expect.isFalse(superInterfaceF.isOriginalDeclaration); Expect.isFalse(superInterfaceFF.isOriginalDeclaration); Expect.equals(reflectClass(Object), superA); Expect.equals(reflect(new A()).type, superB); Expect.equals(reflect(new A()).type, superC); //# 01: ok Expect.equals(reflect(new A()).type, superD); Expect.equals(reflect(new G>()).type, superE); Expect.equals(reflect(new G>>()).type, superE0); Expect.equals(reflect(new G>()).type, superInterfaceFF); Expect.equals(u, superB.typeArguments[0]); Expect.equals(reflect(new C()).type, superC.typeArguments[0]); //# 01: ok Expect.equals(u, superD.typeArguments[0]); Expect.equals(r, superE.typeArguments[0].typeArguments[0]); Expect.equals(hr, superE0.typeArguments[0].typeArguments[0]); Expect.equals(r, superInterfaceFF.typeArguments[0].typeArguments[0]); Expect.equals(u, superInterfaceF.typeArguments[0]); } void testObject() { ClassMirror object = reflectClass(Object); Expect.equals(null, object.superclass); } main() { testOriginals(); testInstances(); testObject(); }