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

Side by Side Diff: test/codegen/lib/mirrors/invoke_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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library test.invoke_test;
6
7 import 'dart:mirrors';
8
9 import 'dart:async' show Future;
10
11 import 'package:expect/expect.dart';
12
13 class C {
14 var field;
15 C() : this.field = 'default';
16 C.named(this.field);
17
18 get getter => 'get $field';
19 set setter(v) => field = 'set $v';
20 method(x, y, z) => '$x+$y+$z';
21 toString() => 'a C';
22
23 noSuchMethod(invocation) => 'DNU';
24
25 static var staticField = 'initial';
26 static get staticGetter => 'sget $staticField';
27 static set staticSetter(v) => staticField = 'sset $v';
28 static staticFunction(x, y) => "($x,$y)";
29 }
30
31 var libraryField = 'a priori';
32 get libraryGetter => 'lget $libraryField';
33 set librarySetter(v) => libraryField = 'lset $v';
34 libraryFunction(x,y) => '$x$y';
35
36 bool isNoSuchMethodError(e) {
37 return e is NoSuchMethodError;
38 }
39
40 testSync() {
41 var result;
42
43 // InstanceMirror invoke
44 C c = new C();
45 InstanceMirror im = reflect(c);
46 result = im.invoke(const Symbol('method'), [2,4,8]);
47 Expect.equals('2+4+8', result.reflectee);
48 result = im.invoke(const Symbol('doesntExist'), [2,4,8]);
49 Expect.equals('DNU', result.reflectee);
50 result = im.invoke(const Symbol('method'), [2,4]); // Wrong arity.
51 Expect.equals('DNU', result.reflectee);
52
53 // InstanceMirror invokeGetter
54 result = im.getField(const Symbol('getter'));
55 Expect.equals('get default', result.reflectee);
56 result = im.getField(const Symbol('field'));
57 Expect.equals('default', result.reflectee);
58 result = im.getField(const Symbol('doesntExist'));
59 Expect.equals('DNU', result.reflectee);
60
61 // InstanceMirror invokeSetter
62 result = im.setField(const Symbol('setter'), 'foo');
63 Expect.equals('foo', result.reflectee);
64 Expect.equals('set foo', c.field);
65 Expect.equals('set foo', im.getField(const Symbol('field')).reflectee);
66 result = im.setField(const Symbol('field'), 'bar');
67 Expect.equals('bar', result.reflectee);
68 Expect.equals('bar', c.field);
69 Expect.equals('bar', im.getField(const Symbol('field')).reflectee);
70 result = im.setField(const Symbol('doesntExist'), 'bar');
71 Expect.equals('bar', result.reflectee);
72
73 // ClassMirror invoke
74 ClassMirror cm = reflectClass(C);
75 result = cm.invoke(const Symbol('staticFunction'),[3,4]);
76 Expect.equals('(3,4)', result.reflectee);
77 Expect.throws(() => cm.invoke(const Symbol('doesntExist'),[3,4]),
78 isNoSuchMethodError,
79 'Not defined');
80 Expect.throws(() => cm.invoke(const Symbol('staticFunction'),[3]),
81 isNoSuchMethodError,
82 'Wrong arity');
83
84 // ClassMirror invokeGetter
85 result = cm.getField(const Symbol('staticGetter'));
86 Expect.equals('sget initial', result.reflectee);
87 result = cm.getField(const Symbol('staticField'));
88 Expect.equals('initial', result.reflectee);
89 Expect.throws(() => cm.getField(const Symbol('doesntExist')),
90 isNoSuchMethodError,
91 'Not defined');
92
93 // ClassMirror invokeSetter
94 result = cm.setField(const Symbol('staticSetter'), 'sfoo');
95 Expect.equals('sfoo', result.reflectee);
96 Expect.equals('sset sfoo', C.staticField);
97 Expect.equals('sset sfoo',
98 cm.getField(const Symbol('staticField')).reflectee);
99 result = cm.setField(const Symbol('staticField'), 'sbar');
100 Expect.equals('sbar', result.reflectee);
101 Expect.equals('sbar', C.staticField);
102 Expect.equals('sbar', cm.getField(const Symbol('staticField')).reflectee);
103 Expect.throws(() => cm.setField(const Symbol('doesntExist'), 'sbar'),
104 isNoSuchMethodError,
105 'Not defined');
106
107 // ClassMirror invokeConstructor
108 result = cm.newInstance(const Symbol(''), []);
109 Expect.isTrue(result.reflectee is C);
110 Expect.equals('default', result.reflectee.field);
111 result = cm.newInstance(const Symbol('named'), ['my value']);
112 Expect.isTrue(result.reflectee is C);
113 Expect.equals('my value', result.reflectee.field);
114 Expect.throws(() => cm.newInstance(const Symbol('doesntExist'), ['my value']),
115 isNoSuchMethodError,
116 'Not defined');
117 Expect.throws(() => cm.newInstance(const Symbol('named'), []),
118 isNoSuchMethodError,
119 'Wrong arity');
120
121 // LibraryMirror invoke
122 LibraryMirror lm = cm.owner;
123 result = lm.invoke(const Symbol('libraryFunction'),[':',')']);
124 Expect.equals(':)', result.reflectee);
125 Expect.throws(() => lm.invoke(const Symbol('doesntExist'), [':',')']),
126 isNoSuchMethodError,
127 'Not defined');
128 Expect.throws(() => lm.invoke(const Symbol('libraryFunction'), [':']),
129 isNoSuchMethodError,
130 'Wrong arity');
131
132 // LibraryMirror invokeGetter
133 result = lm.getField(const Symbol('libraryGetter'));
134 Expect.equals('lget a priori', result.reflectee);
135 result = lm.getField(const Symbol('libraryField'));
136 Expect.equals('a priori', result.reflectee);
137 Expect.throws(() => lm.getField(const Symbol('doesntExist')),
138 isNoSuchMethodError,
139 'Not defined');
140
141 // LibraryMirror invokeSetter
142 result = lm.setField(const Symbol('librarySetter'), 'lfoo');
143 Expect.equals('lfoo', result.reflectee);
144 Expect.equals('lset lfoo', libraryField);
145 Expect.equals('lset lfoo',
146 lm.getField(const Symbol('libraryField')).reflectee);
147 result = lm.setField(const Symbol('libraryField'), 'lbar');
148 Expect.equals('lbar', result.reflectee);
149 Expect.equals('lbar', libraryField);
150 Expect.equals('lbar', lm.getField(const Symbol('libraryField')).reflectee);
151 Expect.throws(() => lm.setField(const Symbol('doesntExist'), 'lbar'),
152 isNoSuchMethodError,
153 'Not defined');
154 }
155
156 main() {
157 testSync();
158 }
OLDNEW
« no previous file with comments | « test/codegen/lib/mirrors/invoke_private_wrong_library_test.dart ('k') | test/codegen/lib/mirrors/invoke_throws_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698