| // 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_get_field; |
| |
| import 'dart:mirrors'; |
| import 'package:expect/expect.dart'; |
| |
| class C { |
| var field; |
| var _field; |
| operator +(other) => field + other; |
| } |
| |
| const int optimizationThreshold = 20; |
| |
| testPublic() { |
| var c = new C(); |
| var im = reflect(c); |
| |
| for (int i = 0; i < (2 * optimizationThreshold); i++) { |
| c.field = i; |
| Expect.equals(i, im.getField(#field).reflectee); |
| } |
| } |
| |
| testPrivate() { |
| var c = new C(); |
| var im = reflect(c); |
| |
| for (int i = 0; i < (2 * optimizationThreshold); i++) { |
| c._field = i; |
| Expect.equals(i, im.getField(#_field).reflectee); |
| } |
| } |
| |
| 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.getField(selector)); |
| } |
| } |
| |
| testOperator() { |
| var plus = const Symbol("+"); |
| var c = new C(); |
| var im = reflect(c); |
| |
| for (int i = 0; i < (2 * optimizationThreshold); i++) { |
| c.field = i; |
| var closurizedPlus = im.getField(plus).reflectee; |
| Expect.isTrue(closurizedPlus is Function); |
| Expect.equals(2 * i, closurizedPlus(i)); |
| } |
| } |
| |
| main() { |
| testPublic(); |
| testPrivate(); |
| testPrivateWrongLibrary(); |
| testOperator(); |
| } |