| Index: tests/lib/mirrors/generic_mixin_type_variable_test.dart
|
| diff --git a/tests/lib/mirrors/generic_mixin_type_variable_test.dart b/tests/lib/mirrors/generic_mixin_type_variable_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3b725022342923084fc071e0aac9298f994fb86e
|
| --- /dev/null
|
| +++ b/tests/lib/mirrors/generic_mixin_type_variable_test.dart
|
| @@ -0,0 +1,146 @@
|
| +// 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';
|
| +
|
| +class S<T> {
|
| + T n() {
|
| + return null;
|
| + }
|
| +}
|
| +
|
| +class M<T, U> {
|
| + T m() { return null;}
|
| + U n() { return null;}
|
| +}
|
| +
|
| +class N<T, U> {
|
| + U m() { return null;}
|
| +}
|
| +
|
| +class A extends S<String> {}
|
| +class O<V> extends S<V> with M<String,V> {}
|
| +class P<W> extends S<W> with M<W, String>, N<String, W> {}
|
| +class TE extends S<String> with M<int, String>, N<String, int> {}
|
| +
|
| +testOriginal() {
|
| + ClassMirror s = reflectClass(S);
|
| + ClassMirror m = reflectClass(M);
|
| + ClassMirror o = reflectClass(O);
|
| + ClassMirror p = reflectClass(P);
|
| + ClassMirror mixinApplicationSuperO = o.superclass;
|
| + ClassMirror sOfV = mixinApplicationSuperO.superclass;
|
| + ClassMirror mOfStringAndV = mixinApplicationSuperO.mixin;
|
| + ClassMirror mixinApplicationSuperP = p.superclass;
|
| + ClassMirror nOfStringAndW = mixinApplicationSuperP.mixin;
|
| + ClassMirror mixinApplicationSuperSuperP = mixinApplicationSuperP.superclass;
|
| + ClassMirror sOfW = mixinApplicationSuperSuperP.superclass;
|
| + ClassMirror mOfWAndString = mixinApplicationSuperSuperP.mixin;
|
| + TypeVariableMirror oV = o.typeVariables[0];
|
| + TypeVariableMirror pW = p.typeVariables[0];
|
| + TypeMirror stringMirror = reflectType(String);
|
| +
|
| + Expect.isTrue(o.isOriginalDeclaration);
|
| + Expect.isTrue(p.isOriginalDeclaration);
|
| + Expect.isFalse(mixinApplicationSuperO.isOriginalDeclaration);
|
| + Expect.isFalse(mOfStringAndV.isOriginalDeclaration);
|
| + Expect.isFalse(sOfV.isOriginalDeclaration);
|
| + Expect.isFalse(mixinApplicationSuperP.isOriginalDeclaration);
|
| + Expect.isFalse(nOfStringAndW.isOriginalDeclaration);
|
| + Expect.isFalse(mixinApplicationSuperSuperP.isOriginalDeclaration);
|
| + Expect.isFalse(sOfW.isOriginalDeclaration);
|
| + Expect.isFalse(mOfWAndString.isOriginalDeclaration);
|
| +
|
| + Expect.isTrue(mixinApplicationSuperO.typeVariables.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperO.typeArguments.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperP.typeVariables.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperP.typeArguments.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperSuperP.typeVariables.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperSuperP.typeArguments.isEmpty);
|
| +
|
| + Expect.equals(oV, sOfV.typeArguments.single);
|
| + Expect.equals(oV, sOfV.methods[#n].returnType);
|
| + Expect.equals(stringMirror, mOfStringAndV.typeArguments.first);
|
| + Expect.equals(oV, mOfStringAndV.typeArguments.last);
|
| + Expect.equals(stringMirror, mOfStringAndV.methods[#m].returnType);
|
| + Expect.equals(oV, mOfStringAndV.methods[#n].returnType);
|
| +
|
| + Expect.equals(stringMirror, nOfStringAndW.typeArguments.first);
|
| + Expect.equals(pW, nOfStringAndW.typeArguments.last);
|
| + Expect.equals(pW, nOfStringAndW.methods[#m].returnType);
|
| + Expect.equals(pW, sOfW.typeArguments.single);
|
| + Expect.equals(pW, sOfW.methods[#n].returnType);
|
| + Expect.equals(pW, mOfWAndString.typeArguments.first);
|
| + Expect.equals(stringMirror, mOfWAndString.typeArguments.last);
|
| + Expect.equals(pW, mOfWAndString.methods[#m].returnType);
|
| + Expect.equals(stringMirror, mOfWAndString.methods[#n].returnType);
|
| +
|
| + Expect.equals(oV, mixinApplicationSuperO.methods[#n].returnType);
|
| + Expect.equals(stringMirror, mixinApplicationSuperO.methods[#m].returnType);
|
| +}
|
| +
|
| +testInstance() {
|
| + ClassMirror s = reflectClass(S);
|
| + ClassMirror m = reflectClass(M);
|
| + ClassMirror o = reflect(new O<int>()).type;
|
| + ClassMirror p = reflect(new P<int>()).type;
|
| + ClassMirror mixinApplicationSuperO = o.superclass;
|
| + ClassMirror cOfInt = mixinApplicationSuperO.superclass;
|
| +
|
| + ClassMirror mOfStringAndInt = mixinApplicationSuperO.mixin;
|
| + ClassMirror mixinApplicationSuperP = p.superclass;
|
| + ClassMirror nOfStringAndInt = mixinApplicationSuperP.mixin;
|
| + ClassMirror mixinApplicationSuperSuperP = mixinApplicationSuperP.superclass;
|
| + ClassMirror sOfW = mixinApplicationSuperSuperP.superclass;
|
| + ClassMirror mOfWAndString = mixinApplicationSuperSuperP.mixin;
|
| + TypeMirror oInt = o.typeArguments[0];
|
| + TypeMirror pInt = p.typeArguments[0];
|
| + TypeMirror stringMirror = reflectType(String);
|
| + TypeMirror intMirror = reflectType(int);
|
| +
|
| + Expect.isFalse(o.isOriginalDeclaration);
|
| + Expect.isFalse(p.isOriginalDeclaration);
|
| + Expect.isFalse(mixinApplicationSuperO.isOriginalDeclaration);
|
| + Expect.isFalse(mOfStringAndInt.isOriginalDeclaration);
|
| + Expect.isFalse(cOfInt.isOriginalDeclaration);
|
| + Expect.isFalse(mixinApplicationSuperP.isOriginalDeclaration);
|
| + Expect.isFalse(nOfStringAndInt.isOriginalDeclaration);
|
| + Expect.isFalse(mixinApplicationSuperSuperP.isOriginalDeclaration);
|
| + Expect.isFalse(sOfW.isOriginalDeclaration);
|
| + Expect.isFalse(mOfWAndString.isOriginalDeclaration);
|
| +
|
| + Expect.isTrue(mixinApplicationSuperO.typeVariables.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperO.typeArguments.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperP.typeVariables.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperP.typeArguments.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperSuperP.typeVariables.isEmpty);
|
| + Expect.isTrue(mixinApplicationSuperSuperP.typeArguments.isEmpty);
|
| +
|
| + Expect.equals(oInt, cOfInt.typeArguments.single);
|
| + Expect.equals(oInt, cOfInt.methods[#n].returnType);
|
| + Expect.equals(stringMirror, mOfStringAndInt.typeArguments.first);
|
| + Expect.equals(oInt, mOfStringAndInt.typeArguments.last);
|
| + Expect.equals(stringMirror, mOfStringAndInt.methods[#m].returnType);
|
| + Expect.equals(oInt, mOfStringAndInt.methods[#n].returnType);
|
| +
|
| + Expect.equals(stringMirror, nOfStringAndInt.typeArguments.first);
|
| + Expect.equals(pInt, nOfStringAndInt.typeArguments.last);
|
| + Expect.equals(pInt, nOfStringAndInt.methods[#m].returnType);
|
| + Expect.equals(pInt, sOfW.typeArguments.single);
|
| + Expect.equals(pInt, sOfW.methods[#n].returnType);
|
| + Expect.equals(pInt, mOfWAndString.typeArguments.first);
|
| + Expect.equals(stringMirror, mOfWAndString.typeArguments.last);
|
| + Expect.equals(pInt, mOfWAndString.methods[#m].returnType);
|
| + Expect.equals(stringMirror, mOfWAndString.methods[#n].returnType);
|
| +
|
| + Expect.equals(oInt, mixinApplicationSuperO.methods[#n].returnType);
|
| + Expect.equals(stringMirror, mixinApplicationSuperO.methods[#m].returnType);
|
| +}
|
| +
|
| +main() {
|
| + testOriginal();
|
| + testInstance();
|
| +}
|
|
|