| // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.9 |
| |
| library test.hot_set_field; |
| |
| import 'dart:mirrors'; |
| import 'package:expect/expect.dart'; |
| |
| class C { |
| var field; |
| var _field; |
| } |
| |
| const int optimizationThreshold = 20; |
| |
| testPublic() { |
| var c = new C(); |
| var im = reflect(c); |
| |
| for (int i = 0; i < (2 * optimizationThreshold); i++) { |
| im.setField(#field, i); |
| Expect.equals(i, c.field); |
| } |
| } |
| |
| testPrivate() { |
| var c = new C(); |
| var im = reflect(c); |
| |
| for (int i = 0; i < (2 * optimizationThreshold); i++) { |
| im.setField(#_field, i); |
| Expect.equals(i, c._field); |
| } |
| } |
| |
| testPrivateWrongLibrary() { |
| var c = new C(); |
| var im = reflect(c); |
| var selector = MirrorSystem.getSymbol( |
| '_field', reflectClass(Mirror).owner as LibraryMirror); |
| |
| for (int i = 0; i < (2 * optimizationThreshold); i++) { |
| Expect.throwsNoSuchMethodError(() => im.setField(selector, i)); |
| } |
| } |
| |
| main() { |
| testPublic(); |
| testPrivate(); |
| testPrivateWrongLibrary(); |
| } |