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

Unified Diff: tests/compiler/dart2js/mirrors_mixin_test.dart

Issue 57983002: Add mixin support to source mirrors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. 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
« no previous file with comments | « tests/compiler/dart2js/mirrors_metadata_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/compiler/dart2js/mirrors_mixin_test.dart
diff --git a/tests/compiler/dart2js/mirrors_mixin_test.dart b/tests/compiler/dart2js/mirrors_mixin_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..148685145025211b1416d12c754a06d98b7e7bd5
--- /dev/null
+++ b/tests/compiler/dart2js/mirrors_mixin_test.dart
@@ -0,0 +1,240 @@
+// 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 mirrors_mixin_test;
+
+import 'package:expect/expect.dart';
+import 'package:async_helper/async_helper.dart';
+import 'mirror_system_helper.dart';
+
+const String CLASS_SOURCE = '''
+class A {}
+
+class S {}
+class M1<T> {}
+class M2 {}
+
+class C extends S with M1<A> {}
+class D extends S with M1, M2 {}
+class E extends S with M2, M1 implements A, M1 {}
+class E2 extends E {}
+
+class F = S with M1<A>;
+abstract class G = S with M1, M2;
+class H = S with M2, M1 implements A, M1;
+class H2 extends H {}
+''';
+
+void main() {
+ asyncTest(() => createMirrorSystem(CLASS_SOURCE).then((MirrorSystem mirrors) {
+ LibraryMirror library = mirrors.libraries[SOURCE_URI];
+
+ checkSimpleClass(var cls) {
+ Expect.isNotNull(cls);
+ Expect.isTrue(cls is ClassMirror);
+ Expect.isFalse(isMixinApplication(cls));
+ Expect.isFalse(cls.isNameSynthetic);
+ Expect.isFalse(cls.isObject);
+ Expect.isTrue(cls.superclass.isObject);
+ Expect.equals(0, cls.superinterfaces.length);
+
+ Expect.isTrue(getSuperclass(cls).isObject);
+ Expect.isTrue(getAppliedMixins(cls).isEmpty);
+ Expect.isTrue(getExplicitInterfaces(cls).isEmpty);
+ }
+
+ // class A {}
+ var A = library.classes['A'];
+ checkSimpleClass(A);
+
+ // class S {}
+ var S = library.classes['S'];
+ checkSimpleClass(S);
+
+ // class M1 {}
+ var M1 = library.classes['M1'];
+ checkSimpleClass(M1);
+
+ // class M2 {}
+ var M2 = library.classes['M2'];
+ checkSimpleClass(M2);
+
+ // class C extends S with M1<A> {}
+ var C = library.classes['C'];
+ Expect.isNotNull(C);
+ Expect.isTrue(C is ClassMirror);
+ Expect.isFalse(isMixinApplication(C));
+ Expect.isFalse(C.isObject);
+ Expect.equals(0, C.superinterfaces.length);
+ var C_super = C.superclass;
+ Expect.isNotNull(C_super);
+ Expect.isTrue(C_super is ClassMirror);
+ Expect.isTrue(isMixinApplication(C_super));
+ Expect.isTrue(C_super.isNameSynthetic);
+ Expect.equals(1, C_super.superinterfaces.length);
+ Expect.isTrue(containsType(M1, [A], C_super.superinterfaces));
+ Expect.isTrue(isInstance(M1, [A], C_super.mixin));
+ Expect.isFalse(C_super.isObject);
+ Expect.isTrue(isSameDeclaration(S, C_super.superclass));
+
+ Expect.isTrue(isSameDeclaration(S, getSuperclass(C)));
+ Expect.isTrue(isSameDeclarationList([M1], getAppliedMixins(C)));
+ Expect.isTrue(getExplicitInterfaces(C).isEmpty);
+
+ // D extends S with M1, M2 {}
+ var D = library.classes['D'];
+ Expect.isNotNull(D);
+ Expect.isTrue(D is ClassMirror);
+ Expect.isFalse(isMixinApplication(D));
+ Expect.isFalse(D.isObject);
+ Expect.equals(0, D.superinterfaces.length);
+ var D_super = D.superclass;
+ Expect.isNotNull(D_super);
+ Expect.isTrue(D_super is ClassMirror);
+ Expect.isTrue(isMixinApplication(D_super));
+ Expect.isTrue(D_super.isNameSynthetic);
+ Expect.equals(1, D_super.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(M2, D_super.superinterfaces));
+ Expect.isTrue(isSameDeclaration(M2, D_super.mixin));
+ Expect.isFalse(D_super.isObject);
+ Expect.isFalse(isSameDeclaration(S, D_super.superclass));
+ var D_super_super = D_super.superclass;
+ Expect.isNotNull(D_super_super);
+ Expect.isTrue(D_super_super is ClassMirror);
+ Expect.isTrue(isMixinApplication(D_super_super));
+ Expect.isTrue(D_super_super.isNameSynthetic);
+ Expect.equals(1, D_super_super.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(M1, D_super_super.superinterfaces));
+ Expect.isTrue(isSameDeclaration(M1, D_super_super.mixin));
+ Expect.isFalse(D_super_super.isObject);
+ Expect.isTrue(isSameDeclaration(S, D_super_super.superclass));
+
+ Expect.isTrue(isSameDeclaration(S, getSuperclass(D)));
+ Expect.isTrue(isSameDeclarationList([M1, M2], getAppliedMixins(D)));
+ Expect.isTrue(getExplicitInterfaces(D).isEmpty);
+
+ // class E extends S with M2, M1 implements A, M1 {}
+ var E = library.classes['E'];
+ Expect.isNotNull(E);
+ Expect.isTrue(E is ClassMirror);
+ Expect.isFalse(isMixinApplication(E));
+ Expect.isFalse(E.isObject);
+ Expect.equals(2, E.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(A, E.superinterfaces));
+ Expect.isTrue(containsDeclaration(M1, E.superinterfaces));
+ var E_super = E.superclass;
+ Expect.isNotNull(E_super);
+ Expect.isTrue(E_super is ClassMirror);
+ Expect.isTrue(isMixinApplication(E_super));
+ Expect.isTrue(E_super.isNameSynthetic);
+ Expect.equals(1, E_super.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(M1, E_super.superinterfaces));
+ Expect.isTrue(isSameDeclaration(M1, E_super.mixin));
+ Expect.isFalse(E_super.isObject);
+ Expect.isFalse(isSameDeclaration(S, E_super.superclass));
+ var E_super_super = E_super.superclass;
+ Expect.isNotNull(E_super_super);
+ Expect.isTrue(E_super_super is ClassMirror);
+ Expect.isTrue(isMixinApplication(E_super_super));
+ Expect.isTrue(E_super_super.isNameSynthetic);
+ Expect.equals(1, E_super_super.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(M2, E_super_super.superinterfaces));
+ Expect.isTrue(isSameDeclaration(M2, E_super_super.mixin));
+ Expect.isFalse(E_super_super.isObject);
+ Expect.isTrue(isSameDeclaration(S, E_super_super.superclass));
+
+ Expect.isTrue(isSameDeclaration(S, getSuperclass(E)));
+ Expect.isTrue(isSameDeclarationList([M2, M1], getAppliedMixins(E)));
+ Expect.isTrue(isSameDeclarationSet([A, M1], getExplicitInterfaces(E)));
+
+ // class E2 extends E {}
+ var E2 = library.classes['E2'];
+ Expect.isTrue(isSameDeclaration(E, getSuperclass(E2)));
+ Expect.isTrue(getAppliedMixins(E2).isEmpty);
+ Expect.isTrue(getExplicitInterfaces(E2).isEmpty);
+
+ // class F = S with M1<A>;
+ var F = library.classes['F'];
+ Expect.isNotNull(F);
+ Expect.isTrue(F is ClassMirror);
+ Expect.isFalse(F.isAbstract);
+ Expect.isTrue(isMixinApplication(F));
+ Expect.isFalse(F.isNameSynthetic);
+ Expect.equals('F', F.simpleName);
+ Expect.isFalse(F.isObject);
+ Expect.equals(1, F.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(M1, F.superinterfaces));
+ Expect.isTrue(isInstance(M1, [A], F.mixin));
+ var F_super = F.superclass;
+ Expect.isNotNull(F_super);
+ Expect.isTrue(F_super is ClassMirror);
+ Expect.isFalse(isMixinApplication(F_super));
+ Expect.isFalse(F_super.isObject);
+ Expect.isTrue(isSameDeclaration(S, F_super));
+
+ Expect.isTrue(isSameDeclaration(S, getSuperclass(F)));
+ Expect.isTrue(isSameDeclarationList([M1], getAppliedMixins(F)));
+ Expect.isTrue(getExplicitInterfaces(F).isEmpty);
+
+ // typedef G = abstract S with M1, M2;
+ var G = library.classes['G'];
+ Expect.isNotNull(G);
+ Expect.isTrue(G is ClassMirror);
+ Expect.isTrue(G.isAbstract);
+ Expect.isTrue(isMixinApplication(G));
+ Expect.isFalse(G.isNameSynthetic);
+ Expect.equals('G', G.simpleName);
+ Expect.isFalse(G.isObject);
+ Expect.equals(1, G.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(M2, G.superinterfaces));
+ Expect.isTrue(isSameDeclaration(M2, G.mixin));
+ var G_super = G.superclass;
+ Expect.isNotNull(G_super);
+ Expect.isTrue(G_super is ClassMirror);
+ Expect.isTrue(isMixinApplication(G_super));
+ Expect.equals(1, G_super.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(M1, G_super.superinterfaces));
+ Expect.isTrue(isSameDeclaration(M1, G_super.mixin));
+ Expect.isFalse(G_super.isObject);
+ Expect.isTrue(isSameDeclaration(S, G_super.superclass));
+
+ Expect.isTrue(isSameDeclaration(S, getSuperclass(G)));
+ Expect.isTrue(isSameDeclarationList([M1, M2], getAppliedMixins(G)));
+ Expect.isTrue(getExplicitInterfaces(G).isEmpty);
+
+ // typedef H = S with M2, M1 implements A, M1;
+ var H = library.classes['H'];
+ Expect.isNotNull(H);
+ Expect.isTrue(H is ClassMirror);
+ Expect.isFalse(H.isAbstract);
+ Expect.isTrue(isMixinApplication(H));
+ Expect.isFalse(H.isNameSynthetic);
+ Expect.equals('H', H.simpleName);
+ Expect.isFalse(H.isObject);
+ Expect.equals(3, H.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(A, H.superinterfaces));
+ Expect.isTrue(containsDeclaration(M1, H.superinterfaces));
+ Expect.isFalse(containsDeclaration(M2, H.superinterfaces));
+ Expect.isTrue(isSameDeclaration(M1, H.mixin));
+ var H_super = H.superclass;
+ Expect.isNotNull(H_super);
+ Expect.isTrue(H_super is ClassMirror);
+ Expect.isTrue(isMixinApplication(H_super));
+ Expect.equals(1, H_super.superinterfaces.length);
+ Expect.isTrue(containsDeclaration(M2, H_super.superinterfaces));
+ Expect.isTrue(isSameDeclaration(M2, H_super.mixin));
+ Expect.isFalse(H_super.isObject);
+ Expect.isTrue(isSameDeclaration(S, H_super.superclass));
+
+ Expect.isTrue(isSameDeclaration(S, getSuperclass(H)));
+ Expect.isTrue(isSameDeclarationList([M2, M1], getAppliedMixins(H)));
+ Expect.isTrue(isSameDeclarationSet([A, M1], getExplicitInterfaces(H)));
+
+ // class H2 extends H {}
+ var H2 = library.classes['H2'];
+ Expect.isTrue(isSameDeclaration(H, getSuperclass(H2)));
+ Expect.isTrue(getAppliedMixins(H2).isEmpty);
+ Expect.isTrue(getExplicitInterfaces(H2).isEmpty);
+ }));
+}
« no previous file with comments | « tests/compiler/dart2js/mirrors_metadata_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698