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

Unified Diff: test/codegen/lib/mirrors/invoke_call_through_implicit_getter_test.dart

Issue 2265533002: Add mirrors tests (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 4 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
Index: test/codegen/lib/mirrors/invoke_call_through_implicit_getter_test.dart
diff --git a/test/codegen/lib/mirrors/invoke_call_through_implicit_getter_test.dart b/test/codegen/lib/mirrors/invoke_call_through_implicit_getter_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..6aa5cdf5aee2be0a0fc593693e6627598b633859
--- /dev/null
+++ b/test/codegen/lib/mirrors/invoke_call_through_implicit_getter_test.dart
@@ -0,0 +1,146 @@
+// Copyright (c) 2014, 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 test.invoke_call_through_implicit_getter;
+
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+class FakeFunctionCall {
+ call(x, y) => '1 $x $y';
+}
+class FakeFunctionNSM {
+ noSuchMethod(msg) => msg.positionalArguments.join(', ');
+}
+
+class C {
+ var fakeFunctionCall = new FakeFunctionCall();
+ var fakeFunctionNSM = new FakeFunctionNSM();
+ var closure; // = (x, y) => '2 $this $x $y';
+ var closureOpt; // = (x, y, [z, w]) => '3 $this $x $y $z $w';
+ var closureNamed; // = (x, y, {z, w}) => '4 $this $x $y $z $w';
+ var notAClosure = 'Not a closure';
+ noSuchMethod(msg) => 'DNU';
+
+ C() {
+ closure = (x, y) => '2 $this $x $y';
+ closureOpt = (x, y, [z, w]) => '3 $this $x $y $z $w';
+ closureNamed = (x, y, {z, w}) => '4 $this $x $y $z $w';
+ }
+
+ toString() => 'C';
+}
+
+testInstanceBase() {
+ var c = new C();
+
+ Expect.equals('1 5 6', c.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', c.fakeFunctionNSM(7, 8));
+ Expect.equals('2 C 9 10', c.closure(9, 10));
+ Expect.equals('3 C 11 12 13 null', c.closureOpt(11, 12, 13));
+ Expect.equals('4 C 14 15 null 16', c.closureNamed(14, 15, w: 16));
+ Expect.equals('DNU', c.doesNotExist(17, 18));
+ Expect.throws(() => c.closure('wrong arity'), (e) => e is NoSuchMethodError);
+ Expect.throws(() => c.notAClosure(), (e) => e is NoSuchMethodError);
+}
+
+testInstanceReflective() {
+ InstanceMirror im = reflect(new C());
+
+ Expect.equals('1 5 6',
+ im.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ im.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 C 9 10',
+ im.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 C 11 12 13 null',
+ im.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 C 14 15 null 16',
+ im.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.equals('DNU',
+ im.invoke(#doesNotExist, [17, 18]).reflectee);
+ Expect.throws(() => im.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+ Expect.throws(() => im.invoke(#notAClosure, []),
+ (e) => e is NoSuchMethodError);
+}
+
+class D {
+ static var fakeFunctionCall = new FakeFunctionCall();
+ static var fakeFunctionNSM = new FakeFunctionNSM();
+ static var closure = (x, y) => '2 $x $y';
+ static var closureOpt = (x, y, [z, w]) => '3 $x $y $z $w';
+ static var closureNamed = (x, y, {z, w}) => '4 $x $y $z $w';
+ static var notAClosure = 'Not a closure';
+}
+
+testClassBase() {
+ Expect.equals('1 5 6', D.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', D.fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', D.closure(9, 10));
+ Expect.equals('3 11 12 13 null', D.closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', D.closureNamed(14, 15, w: 16));
+ Expect.throws(() => D.closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testClassReflective() {
+ ClassMirror cm = reflectClass(D);
+
+ Expect.equals('1 5 6',
+ cm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ cm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ cm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ cm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ cm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => cm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+var fakeFunctionCall = new FakeFunctionCall();
+var fakeFunctionNSM = new FakeFunctionNSM();
+var closure = (x, y) => '2 $x $y';
+var closureOpt = (x, y, [z, w]) => '3 $x $y $z $w';
+var closureNamed = (x, y, {z, w}) => '4 $x $y $z $w';
+var notAClosure = 'Not a closure';
+
+testLibraryBase() {
+ Expect.equals('1 5 6', fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', closure(9, 10));
+ Expect.equals('3 11 12 13 null', closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', closureNamed(14, 15, w: 16));
+ Expect.throws(() => closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testLibraryReflective() {
+ LibraryMirror lm = reflectClass(D).owner;
+
+ Expect.equals('1 5 6',
+ lm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ lm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ lm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ lm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ lm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => lm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+main() {
+ // Do not access the getters/closures at the base level in this variant.
+ //testInstanceBase();
+ testInstanceReflective();
+ //testClassBase();
+ testClassReflective();
+ //testLibraryBase();
+ testLibraryReflective();
+}

Powered by Google App Engine
This is Rietveld 408576698