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

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

Powered by Google App Engine
This is Rietveld 408576698