OLD | NEW |
(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 } |
OLD | NEW |