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

Side by Side Diff: test/codegen/lib/mirrors/reflect_model_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.reflect_model_test;
6
7 import 'dart:mirrors';
8
9 import 'package:expect/expect.dart';
10
11 import 'model.dart';
12 import 'stringify.dart';
13
14 isNoSuchMethodError(e) => e is NoSuchMethodError;
15
16 variablesOf(ClassMirror cm) {
17 var result = new Map();
18 cm.declarations.forEach((k,v) {
19 if (v is VariableMirror) result[k] = v;
20 });
21 return result;
22 }
23
24 gettersOf(ClassMirror cm) {
25 var result = new Map();
26 cm.declarations.forEach((k,v) {
27 if (v is MethodMirror && v.isGetter) result[k] = v;
28 });
29 return result;
30 }
31
32 settersOf(ClassMirror cm) {
33 var result = new Map();
34 cm.declarations.forEach((k,v) {
35 if (v is MethodMirror && v.isSetter) result[k] = v;
36 });
37 return result;
38 }
39
40 methodsOf(ClassMirror cm) {
41 var result = new Map();
42 cm.declarations.forEach((k,v) {
43 if (v is MethodMirror && v.isRegularMethod) result[k] = v;
44 });
45 return result;
46 }
47
48 main() {
49 var unnamed = new Symbol('');
50 var field = new Symbol('field');
51 var instanceMethod = new Symbol('instanceMethod');
52 var accessor = new Symbol('accessor');
53 var aMethod = new Symbol('aMethod');
54 var bMethod = new Symbol('bMethod');
55 var cMethod = new Symbol('cMethod');
56
57 var aClass = reflectClass(A);
58 var bClass = reflectClass(B);
59 var cClass = reflectClass(C);
60 var a = aClass.newInstance(unnamed, []);
61 var b = bClass.newInstance(unnamed, []);
62 var c = cClass.newInstance(unnamed, []);
63
64 expect('{field: Variable(s(field) in s(A))}', variablesOf(aClass));
65 expect('{}', variablesOf(bClass));
66 expect('{}', variablesOf(cClass));
67
68 Expect.isNull(a.getField(field).reflectee);
69 Expect.equals('B:get field', b.getField(field).reflectee);
70 Expect.equals('B:get field', c.getField(field).reflectee);
71
72 Expect.equals(42, a.setField(field, 42).reflectee);
73 Expect.equals(87, b.setField(field, 87).reflectee);
74 Expect.equals(89, c.setField(field, 89).reflectee);
75
76 Expect.equals(42, a.getField(field).reflectee);
77 Expect.equals('B:get field', b.getField(field).reflectee);
78 Expect.equals('B:get field', c.getField(field).reflectee);
79 Expect.equals(89, fieldC);
80
81 expect('{accessor: Method(s(accessor) in s(A), getter)'
82 '}',
83 gettersOf(aClass));
84 expect('{accessor: Method(s(accessor) in s(B), getter)'
85 ', field: Method(s(field) in s(B), getter)}',
86 gettersOf(bClass));
87 expect('{accessor: Method(s(accessor) in s(C), getter)}',
88 gettersOf(cClass));
89
90 expect('{accessor=: Method(s(accessor=) in s(A), setter)'
91 '}',
92 settersOf(aClass));
93 expect('{accessor=: Method(s(accessor=) in s(B), setter)}',
94 settersOf(bClass));
95 expect('{accessor=: Method(s(accessor=) in s(C), setter)'
96 ', field=: Method(s(field=) in s(C), setter)}',
97 settersOf(cClass));
98
99 Expect.equals('A:instanceMethod(7)', a.invoke(instanceMethod, [7]).reflectee);
100 Expect.equals('B:instanceMethod(9)', b.invoke(instanceMethod, [9]).reflectee);
101 Expect.equals(
102 'C:instanceMethod(13)', c.invoke(instanceMethod, [13]).reflectee);
103
104 expect(
105 '{aMethod: Method(s(aMethod) in s(A))'
106 ', instanceMethod: Method(s(instanceMethod) in s(A))}',
107 methodsOf(aClass));
108
109 expect(
110 '{bMethod: Method(s(bMethod) in s(B))'
111 ', instanceMethod: Method(s(instanceMethod) in s(B))}',
112 methodsOf(bClass));
113 expect(
114 '{cMethod: Method(s(cMethod) in s(C))'
115 ', instanceMethod: Method(s(instanceMethod) in s(C))}',
116 methodsOf(cClass));
117
118 Expect.equals('A:get accessor', a.getField(accessor).reflectee);
119 Expect.equals('B:get accessor', b.getField(accessor).reflectee);
120 Expect.equals('C:get accessor', c.getField(accessor).reflectee);
121
122 Expect.equals('foo', a.setField(accessor, 'foo').reflectee);
123 Expect.equals('bar', b.setField(accessor, 'bar').reflectee);
124 Expect.equals('baz', c.setField(accessor, 'baz').reflectee);
125
126 Expect.equals('foo', accessorA);
127 Expect.equals('bar', accessorB);
128 Expect.equals('baz', accessorC);
129
130 Expect.equals('aMethod', a.invoke(aMethod, []).reflectee);
131 Expect.equals('aMethod', b.invoke(aMethod, []).reflectee);
132 Expect.equals('aMethod', c.invoke(aMethod, []).reflectee);
133
134 Expect.throws(() { a.invoke(bMethod, []); }, isNoSuchMethodError);
135 Expect.equals('bMethod', b.invoke(bMethod, []).reflectee);
136 Expect.equals('bMethod', c.invoke(bMethod, []).reflectee);
137
138 Expect.throws(() { a.invoke(cMethod, []); }, isNoSuchMethodError);
139 Expect.throws(() { b.invoke(cMethod, []); }, isNoSuchMethodError);
140 Expect.equals('cMethod', c.invoke(cMethod, []).reflectee);
141 }
OLDNEW
« no previous file with comments | « test/codegen/lib/mirrors/reflect_class_test.dart ('k') | test/codegen/lib/mirrors/reflect_runtime_type_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698