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

Unified Diff: test_reflectable/test/meta_reflectors_user.dart

Issue 1391543003: Creates `reflectors`, as a meta-meta feature that enables dynamic selection of a "mirror system". (Closed) Base URL: https://github.com/dart-lang/reflectable.git@master
Patch Set: Review response. Created 5 years, 2 months 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 | « test_reflectable/test/meta_reflectors_test.dart ('k') | test_reflectable/test/reflected_type_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test_reflectable/test/meta_reflectors_user.dart
diff --git a/test_reflectable/test/meta_reflectors_user.dart b/test_reflectable/test/meta_reflectors_user.dart
new file mode 100644
index 0000000000000000000000000000000000000000..88252f7914c5c95f9bae3723ae2a9df588426b90
--- /dev/null
+++ b/test_reflectable/test/meta_reflectors_user.dart
@@ -0,0 +1,138 @@
+// Copyright (c) 2015, the Dart Team. All rights reserved. Use of this
+// source code is governed by a BSD-style license that can be found in
+// the LICENSE file.
+
+// File being transformed by the reflectable transformer.
+// Part of the entry point 'reflectors_test.dart'.
+//
+// Independence: This library depends on the domain classes `M1`..`M3`,
+// `A`..`D`, `P`, and it dynamically uses the reflectors, but it does not
+// statically depend on 'meta_reflectors_definer.dart' nor on
+// 'meta_reflectors_domain_definer.dart'.
+
+library test_reflectable.test.meta_reflectors_user;
+
+import "package:reflectable/reflectable.dart";
+import "package:unittest/unittest.dart";
+import "meta_reflectors_meta.dart";
+import "meta_reflectors_domain.dart";
+
+testReflector(Reflectable reflector, String desc) {
+ test("Mixin, $desc", () {
+ ClassMirror aMirror = reflector.reflectType(A);
+ ClassMirror bMirror = reflector.reflectType(B);
+ ClassMirror cMirror = reflector.reflectType(C);
+ ClassMirror dMirror = reflector.reflectType(D);
+ ClassMirror m1Mirror = reflector.reflectType(M1);
+ ClassMirror m2Mirror = reflector.reflectType(M2);
+ ClassMirror m3Mirror = reflector.reflectType(M3);
+ expect(aMirror.mixin, aMirror);
+ expect(bMirror.mixin, bMirror);
+ expect(cMirror.mixin, cMirror);
+ expect(m1Mirror.mixin, m1Mirror);
+ expect(m2Mirror.mixin, m2Mirror);
+ expect(m3Mirror.mixin, m3Mirror);
+ expect(bMirror.superclass.mixin, m1Mirror);
+ expect(cMirror.superclass.superclass.mixin, m2Mirror);
+ expect(cMirror.superclass.mixin, m3Mirror);
+ expect(cMirror.superclass.superclass.superclass, bMirror);
+ expect(dMirror.mixin, m1Mirror);
+ expect(dMirror.superclass.mixin, aMirror);
+ expect(bMirror.superclass.declarations["foo"].owner, m1Mirror);
+ expect(bMirror.superclass.declarations["field"].owner, m1Mirror);
+ expect(bMirror.superclass.declarations["staticBar"], null);
+ expect(bMirror.superclass.hasReflectedType, true);
+ expect(bMirror.superclass.reflectedType, const isInstanceOf<Type>());
+ expect(bMirror.superclass.superclass.reflectedType,
+ const isInstanceOf<Type>());
+ });
+}
+
+Matcher throwsANoSuchCapabilityException =
+ throwsA(const isInstanceOf<NoSuchCapabilityError>());
+
+Iterable<String> getNames(Iterable<Reflectable> reflectables) {
+ return reflectables.map((Reflectable reflector) {
+ String fullString = reflector.toString();
+ return fullString.substring(13, fullString.length - 1);
+ });
+}
+
+runTests() {
+ List<Reflectable> reflectors =
+ const AllReflectorsMetaReflector().reflectors.toList();
+
+ test("MetaReflector, set of reflectors", () {
+ expect(
+ getNames(reflectors).toSet(),
+ [
+ "Reflector",
+ "Reflector2",
+ "ReflectorUpwardsClosed",
+ "ReflectorUpwardsClosedToA",
+ "ReflectorUpwardsClosedUntilA",
+ "ScopeMetaReflector",
+ "AllReflectorsMetaReflector"
+ ].toSet());
+ expect(getNames(const ScopeMetaReflector().reflectablesOfScope("polymer")),
+ ["Reflector", "ReflectorUpwardsClosed"].toSet());
+ expect(getNames(const ScopeMetaReflector().reflectablesOfScope("observe")),
+ ["Reflector2", "ReflectorUpwardsClosed"].toSet());
+ });
+
+ const ScopeMetaReflector().reflectablesOfScope("polymer").forEach(
+ (Reflectable reflector) => testReflector(reflector, "$reflector"));
+
+ test("MetaReflector, select by name", () {
+ var reflector2 = reflectors
+ .firstWhere((Reflectable reflector) => "$reflector".contains("2"));
+ ClassMirror bMirror = reflector2.reflectType(B);
+ ClassMirror cMirror = reflector2.reflectType(C);
+ ClassMirror dMirror = reflector2.reflectType(D);
+ ClassMirror m1Mirror = reflector2.reflectType(M1);
+ ClassMirror m2Mirror = reflector2.reflectType(M2);
+ ClassMirror m3Mirror = reflector2.reflectType(M3);
+ expect(bMirror.mixin, bMirror);
+ expect(cMirror.mixin, cMirror);
+ expect(dMirror.mixin, m1Mirror);
+ expect(m1Mirror.mixin, m1Mirror);
+ // Test that metadata is preserved.
+ expect(m1Mirror.metadata, contains(const P()));
+ expect(m2Mirror.mixin, m2Mirror);
+ expect(m3Mirror.mixin, m3Mirror);
+ expect(bMirror.superclass.mixin, m1Mirror);
+ // Test that the mixin-application does not inherit the metadata from its
+ // mixin.
+ expect(bMirror.superclass.metadata, isEmpty);
+ expect(
+ () => bMirror.superclass.superclass, throwsANoSuchCapabilityException);
+ expect(cMirror.superclass.superclass.mixin, m2Mirror);
+ expect(cMirror.superclass.mixin, m3Mirror);
+ expect(cMirror.superclass.superclass.superclass, bMirror);
+ expect(() => dMirror.superclass, throwsANoSuchCapabilityException);
+ });
+
+ test("MetaReflector, select by capability", () {
+ var reflector = reflectors.firstWhere((Reflectable reflector) {
+ return (reflector.capabilities.any((ReflectCapability capability) =>
+ capability is SuperclassQuantifyCapability &&
+ capability.upperBound == A &&
+ !capability.excludeUpperBound));
+ });
+ ClassMirror aMirror = reflector.reflectType(A);
+ ClassMirror bMirror = reflector.reflectType(B);
+ ClassMirror cMirror = reflector.reflectType(C);
+ ClassMirror dMirror = reflector.reflectType(D);
+ expect(() => reflector.reflectType(M1), throwsANoSuchCapabilityException);
+ expect(() => reflector.reflectType(M2), throwsANoSuchCapabilityException);
+ expect(() => reflector.reflectType(M3), throwsANoSuchCapabilityException);
+ expect(() => bMirror.superclass.mixin, throwsANoSuchCapabilityException);
+ expect(bMirror.superclass.superclass, aMirror);
+ expect(() => cMirror.superclass.mixin, throwsANoSuchCapabilityException);
+ expect(() => cMirror.superclass.superclass.mixin,
+ throwsANoSuchCapabilityException);
+ expect(cMirror.superclass.superclass.superclass, bMirror);
+ expect(() => dMirror.mixin, throwsANoSuchCapabilityException);
+ expect(dMirror.superclass, aMirror);
+ });
+}
« no previous file with comments | « test_reflectable/test/meta_reflectors_test.dart ('k') | test_reflectable/test/reflected_type_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698