Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1140)

Unified Diff: tests/lib/mirrors/generic_mixin_type_variable_test.dart

Issue 78873007: Support type argument substitution on unnamed mixin applications. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
+}

Powered by Google App Engine
This is Rietveld 408576698