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

Side by Side Diff: pkg/checked_mirrors/test/logging_test.dart

Issue 111643015: Preliminary checked mirrors (not ready for review yet) (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 import 'dart:mirrors' as m;
2 import 'package:checked_mirrors/checked_mirrors.dart';
3 import 'package:checked_mirrors/control.dart' as control;
4
5 import 'package:logging/logging.dart';
6 import 'package:unittest/unittest.dart';
7 import 'package:unittest/compact_vm_config.dart';
8
9 @MirrorsUsed(symbols: 'y', targets: const [B], metaTargets: const[Reflected])
10 const checked_mirrors_workaround_for_issue_10360 = 0;
11
12 class Reflected { const Reflected(); }
13 const reflected = const Reflected();
14
15 class A {
16 int x = 1;
17 int y = 2; // declared symbol 'y', but target is not declared either
18 }
19
20 class B {
21 int x = 3; // covered by class B
22 }
23
24 @Reflected() // all symbols in this class are declared
25 class C {
26 int x = 4;
27 int z = 5;
28 }
29
30 class D {
31 @reflected int x = 6;
32 int z = 7; // not declared
33 }
34
35 var a = new A();
36 var b = new B();
37 var c = new C();
38 var d = new D();
39
40 main() {
41 hierarchicalLoggingEnabled = true;
42 useCompactVMConfiguration();
43
44 var logger = new Logger('checked_mirrors');
45 logger.level = Level.ALL;
46 final records = [];
47 var firstError = null;
48 var reportedErrors = 0;
49 logger.onRecord.listen((r) {
50 reportedErrors++;
51 if (firstError == null) {
52 firstError = r;
53 return;
54 }
55 records.add(r);
56 });
57 control.initialize(log: true, hints: 'my-hint-goes-here');
58
59 tearDown(() {
60 try {
61 // Ensure that each test accounts for all reported warnings.
62 expect(records, hasLength(0));
63 if (reportedErrors > 0) {
64 expect(firstError.message,
65 '${control.FIRST_ERROR_MESSAGE}my-hint-goes-here');
66 }
67 } finally {
68 records.clear();
69 }
70 });
71
72 group('get name,', () {
73 test('default mirrors', () {
74 expect(m.MirrorSystem.getName(#x), 'x');
75 expect(m.MirrorSystem.getSymbol('x'), #x);
76 expect(m.MirrorSystem.getName(#y), 'y');
77 expect(m.MirrorSystem.getSymbol('y'), #y);
78 });
79
80 test('symbol is declared', () {
81 expect(MirrorSystem.getName(#y), 'y');
82 expect(MirrorSystem.getSymbol('y'), #y);
83 });
84
85 test('symbol is not declared', () {
86 expect(MirrorSystem.getName(#x), 'x');
87 expect(records.length, 1); // woo hoo! this was detected
88 var r = records.removeLast();
89 expect(r.message,
90 'Symbol "x" was used, but it is missing a @MirrorsUsed annotation.');
91 expect(MirrorSystem.getSymbol('x'), #x);
92 expect(records.length, 1);
93 r = records.removeLast();
94 expect(r.message,
95 'Symbol "x" was used, but it is missing a @MirrorsUsed annotation.');
96 });
97
98 });
99 group('get field,', () {
100 test('default mirrors', () {
101 expect(m.reflect(a).getField(#y).reflectee, 2);
102 expect(m.reflect(b).getField(#x).reflectee, 3);
103
104 expect(m.reflect(c).getField(#x).reflectee, 4);
105 expect(m.reflect(c).getField(#z).reflectee, 5);
106
107 expect(m.reflect(d).getField(#x).reflectee, 6);
108 expect(m.reflect(d).getField(#z).reflectee, 7);
109 });
110
111 test('symbol is not declared', () {
112 expect(reflect(a).getField(#x).reflectee, 1);
113 expect(records.length, 1);
114 var r = records.removeLast();
115 expect(r.message, 'Tried to access "A.x" via mirrors, '
116 'but it is missing a @MirrorsUsed annotation.');
117 });
118
119 test('even if symbol is declared', () {
120 expect(reflect(a).getField(#y).reflectee, 2);
121 expect(records.length, 1);
122 var r = records.removeLast();
123 expect(r.message, 'Tried to access "A.y" via mirrors, '
124 'but it is missing a @MirrorsUsed annotation.');
125 });
126
127 test('target is declared', () {
128 expect(reflect(b).getField(#x).reflectee, 3);
129 });
130
131 test('meta target is declared on class', () {
132 expect(reflect(c).getField(#x).reflectee, 4);
133 expect(reflect(c).getField(#z).reflectee, 5);
134 });
135
136 test('meta target is declared on field', () {
137 expect(reflect(d).getField(#x).reflectee, 6);
138 expect(reflect(d).getField(#z).reflectee, 7);
139 expect(records, hasLength(1));
140 var r = records.removeLast();
141 expect(r.message, 'Tried to access "D.z" via mirrors, '
142 'but it is missing a @MirrorsUsed annotation.');
143 });
144 });
145
146 group('set field,', () {
147 test('default mirrors', () {
148 m.reflect(a).setField(#x, 101);
149 m.reflect(a).setField(#y, 102);
150 m.reflect(b).setField(#x, 103);
151 m.reflect(c).setField(#x, 104);
152 m.reflect(c).setField(#z, 105);
153 m.reflect(d).setField(#x, 106);
154 m.reflect(d).setField(#z, 107);
155
156 expect(a.x, 101);
157 expect(a.y, 102);
158 expect(b.x, 103);
159 expect(c.x, 104);
160 expect(c.z, 105);
161 expect(d.x, 106);
162 expect(d.z, 107);
163 });
164
165 test('symbol not declared', () {
166 reflect(a).setField(#x, 201);
167 expect(a.x, 201);
168 expect(records.length, 1);
169 var r = records.removeLast();
170 expect(r.message, 'Tried to access "A.x" via mirrors, '
171 'but it is missing a @MirrorsUsed annotation.');
172 });
173
174 test('even if symbol is declared', () {
175 reflect(a).setField(#y, 202);
176 expect(a.y, 202);
177 expect(records.length, 1);
178 var r = records.removeLast();
179 expect(r.message, 'Tried to access "A.y" via mirrors, '
180 'but it is missing a @MirrorsUsed annotation.');
181 });
182
183 test('target is declared', () {
184 reflect(b).setField(#x, 203);
185 expect(b.x, 203);
186 });
187
188 test('meta target is declared on class', () {
189 reflect(c).setField(#x, 204);
190 reflect(c).setField(#z, 205);
191 expect(c.x, 204);
192 expect(c.z, 205);
193 });
194
195 test('meta target is declared on field', () {
196 reflect(d).setField(#x, 206);
197 reflect(d).setField(#z, 207);
198 expect(d.x, 206);
199 expect(d.z, 207);
200 expect(records, hasLength(1));
201 var r = records.removeLast();
202 expect(r.message, 'Tried to access "D.z" via mirrors, '
203 'but it is missing a @MirrorsUsed annotation.');
204 });
205 });
206 }
OLDNEW
« no previous file with comments | « pkg/checked_mirrors/test/logging_and_throws_test.dart ('k') | pkg/checked_mirrors/test/throws_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698