| Index: test/codegen/lib/mirrors/generic_superclass_test.dart
|
| diff --git a/test/codegen/lib/mirrors/generic_superclass_test.dart b/test/codegen/lib/mirrors/generic_superclass_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ebf4c8cf96b22f8f52474a23933b036a47aec6a7
|
| --- /dev/null
|
| +++ b/test/codegen/lib/mirrors/generic_superclass_test.dart
|
| @@ -0,0 +1,120 @@
|
| +// 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<T> {}
|
| +class B extends A<U>{}
|
| +class C extends A<C> {}
|
| +class D<T> extends A<T> {}
|
| +class E<X,Y> extends G<H<Y>> {}
|
| +class F<X> implements A<X> {}
|
| +class FF<X,Y> implements G<H<Y>> {}
|
| +class G<T> {}
|
| +class H<T> {}
|
| +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<U>()).type, superB);
|
| + Expect.equals(reflect(new A<C>()).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<U>()).type;
|
| + ClassMirror b = reflect(new B()).type;
|
| + ClassMirror c = reflect(new C()).type;
|
| + ClassMirror d = reflect(new D<U>()).type;
|
| + ClassMirror e = reflect(new E<U,R>()).type;
|
| + ClassMirror e0 = reflect(new E<U,H<R>>()).type;
|
| + ClassMirror ff = reflect(new FF<U,R>()).type;
|
| + ClassMirror f = reflect(new F<U>()).type;
|
| + ClassMirror u = reflect(new U()).type;
|
| + ClassMirror r = reflect(new R()).type;
|
| + ClassMirror hr = reflect(new H<R>()).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<U>()).type, superB);
|
| + Expect.equals(reflect(new A<C>()).type, superC); /// 01: ok
|
| + Expect.equals(reflect(new A<U>()).type, superD);
|
| + Expect.equals(reflect(new G<H<R>>()).type, superE);
|
| + Expect.equals(reflect(new G<H<H<R>>>()).type, superE0);
|
| + Expect.equals(reflect(new G<H<R>>()).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();
|
| +}
|
|
|