Index: packages/quiver/test/mirrors_test.dart |
diff --git a/packages/quiver/test/mirrors_test.dart b/packages/quiver/test/mirrors_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f8304ba9f89d87cefb3c4cc88c48ca00a60cc1b7 |
--- /dev/null |
+++ b/packages/quiver/test/mirrors_test.dart |
@@ -0,0 +1,97 @@ |
+// Copyright 2013 Google Inc. All Rights Reserved. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+library quiver.mirrors_test; |
+ |
+import 'dart:collection'; |
+import 'dart:mirrors'; |
+ |
+import 'package:quiver/mirrors.dart'; |
+import 'package:test/test.dart'; |
+ |
+main() { |
+ group('getTypeName', () { |
+ test('should return the qualified name for a type', () { |
+ expect(getTypeName(Object), const Symbol('dart.core.Object')); |
+ expect(getTypeName(Foo), const Symbol('quiver.mirrors_test.Foo')); |
+ }); |
+ }); |
+ |
+ group('implements', () { |
+ test('should return true if an object implements an interface', () { |
+ var foo = new Foo(); |
+ expect(implements(foo, Object), true); |
+ expect(implements(foo, Foo), true); |
+ expect(implements(foo, Comparable), true); |
+ expect(implements(foo, Iterable), true); |
+ }); |
+ |
+ test("should return false if an object doesn't implement an interface", () { |
+ var foo = new Foo(); |
+ expect(implements(foo, String), false); |
+ expect(implements(foo, num), false); |
+ }); |
+ }); |
+ |
+ group('classImplements', () { |
+ test('should return true if an class implements an interface', () { |
+ var foo = new Foo(); |
+ var mirror = reflect(foo).type; |
+ expect(classImplements(mirror, reflectClass(Object)), true); |
+ expect(classImplements(mirror, reflectClass(Foo)), true); |
+ expect(classImplements(mirror, reflectClass(Comparable)), true); |
+ expect(classImplements(mirror, reflectClass(Iterable)), true); |
+ }); |
+ |
+ test("should return false if an object doesn't implement an interface", () { |
+ var foo = new Foo(); |
+ var mirror = reflect(foo).type; |
+ expect(classImplements(mirror, reflectClass(String)), false); |
+ expect(classImplements(mirror, reflectClass(num)), false); |
+ }); |
+ }); |
+ |
+ group('getMemberMirror', () { |
+ test('should return a member of a class', () { |
+ var mirror = reflect(new Foo()).type; |
+ expect(getDeclaration(mirror, const Symbol('toString')), |
+ new isInstanceOf<MethodMirror>()); |
+ expect(getDeclaration(mirror, const Symbol('a')), |
+ new isInstanceOf<VariableMirror>()); |
+ }); |
+ }); |
+ |
+ group('Method', () { |
+ test('should be callable', () { |
+ var i = 2; |
+ var mirror = reflect(i); |
+ var method = new Method(mirror, const Symbol('+')); |
+ expect(method(3), 5); |
+ }); |
+ |
+ test('should be callable with named arguments', () { |
+ // this test will fail when named argument support is added |
+ var i = [1, 2]; |
+ var mirror = reflect(i); |
+ var method = new Method(mirror, const Symbol('toList')); |
+ expect(method(growable: false), [1, 2]); |
+ }); |
+ }); |
+} |
+ |
+class Foo extends IterableBase implements Comparable { |
+ String a; |
+ get iterator => null; |
+ int compareTo(o) => 0; |
+} |