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: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 useCompactVMConfiguration(); |
| 42 initialize(throwOnWarning: true); |
| 43 |
| 44 group('get name,', () { |
| 45 test('default mirrors', () { |
| 46 expect(m.MirrorSystem.getName(#x), 'x'); |
| 47 expect(m.MirrorSystem.getSymbol('x'), #x); |
| 48 expect(m.MirrorSystem.getName(#y), 'y'); |
| 49 expect(m.MirrorSystem.getSymbol('y'), #y); |
| 50 }); |
| 51 |
| 52 test('symbol is declared', () { |
| 53 expect(MirrorSystem.getName(#y), 'y'); |
| 54 expect(MirrorSystem.getSymbol('y'), #y); |
| 55 }); |
| 56 |
| 57 test('symbol is not declared', () { |
| 58 expect(() => MirrorSystem.getName(#x), throws); |
| 59 expect(() => MirrorSystem.getSymbol('x'), throws); |
| 60 }); |
| 61 }); |
| 62 |
| 63 group('get field,', () { |
| 64 test('default mirrors', () { |
| 65 expect(m.reflect(a).getField(#y).reflectee, 2); |
| 66 expect(m.reflect(b).getField(#x).reflectee, 3); |
| 67 |
| 68 expect(m.reflect(c).getField(#x).reflectee, 4); |
| 69 expect(m.reflect(c).getField(#z).reflectee, 5); |
| 70 |
| 71 expect(m.reflect(d).getField(#x).reflectee, 6); |
| 72 expect(m.reflect(d).getField(#z).reflectee, 7); |
| 73 }); |
| 74 |
| 75 test('symbol is not declared', () { |
| 76 expect(() => reflect(a).getField(#x), throws); |
| 77 }); |
| 78 |
| 79 test('even if symbol is declared', () { |
| 80 expect(() => reflect(a).getField(#y), throws); |
| 81 }); |
| 82 |
| 83 test('target is declared', () { |
| 84 expect(reflect(b).getField(#x).reflectee, 3); |
| 85 }); |
| 86 |
| 87 test('meta target is declared on class', () { |
| 88 expect(reflect(c).getField(#x).reflectee, 4); |
| 89 expect(reflect(c).getField(#z).reflectee, 5); |
| 90 }); |
| 91 |
| 92 test('meta target is declared on field', () { |
| 93 expect(reflect(d).getField(#x).reflectee, 6); |
| 94 expect(() => reflect(d).getField(#z), throws); |
| 95 }); |
| 96 }); |
| 97 |
| 98 group('set field,', () { |
| 99 test('default mirrors', () { |
| 100 m.reflect(a).setField(#x, 101); |
| 101 m.reflect(a).setField(#y, 102); |
| 102 m.reflect(b).setField(#x, 103); |
| 103 m.reflect(c).setField(#x, 104); |
| 104 m.reflect(c).setField(#z, 105); |
| 105 m.reflect(d).setField(#x, 106); |
| 106 m.reflect(d).setField(#z, 107); |
| 107 |
| 108 expect(a.x, 101); |
| 109 expect(a.y, 102); |
| 110 expect(b.x, 103); |
| 111 expect(c.x, 104); |
| 112 expect(c.z, 105); |
| 113 expect(d.x, 106); |
| 114 expect(d.z, 107); |
| 115 }); |
| 116 |
| 117 test('symbol not declared', () { |
| 118 expect(() => reflect(a).setField(#x, 201), throws); |
| 119 }); |
| 120 |
| 121 test('even if symbol is declared', () { |
| 122 expect(() => reflect(a).setField(#x, 202), throws); |
| 123 }); |
| 124 |
| 125 test('target is declared', () { |
| 126 reflect(b).setField(#x, 203); |
| 127 expect(b.x, 203); |
| 128 }); |
| 129 |
| 130 test('meta target is declared on class', () { |
| 131 reflect(c).setField(#x, 204); |
| 132 reflect(c).setField(#z, 205); |
| 133 expect(c.x, 204); |
| 134 expect(c.z, 205); |
| 135 }); |
| 136 |
| 137 test('meta target is declared on field', () { |
| 138 reflect(d).setField(#x, 206); |
| 139 expect(() => reflect(d).setField(#z, 207), throws); |
| 140 expect(d.x, 206); |
| 141 }); |
| 142 }); |
| 143 } |
OLD | NEW |