| // Copyright (c) 2011, 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. |
| |
| // Properties on hidden native classes. |
| |
| import 'native_testing.dart'; |
| |
| @Native("A") |
| class A { |
| // Setters and getters should be similar to these methods: |
| int getX() => JS('int', '#._x', this); |
| void setX(int value) { |
| JS('void', '#._x = #', this, value); |
| } |
| |
| int get X native; |
| set X(int value) native; |
| |
| int get Y native; |
| set Y(int value) native; |
| |
| int get Z => JS('int', '#._z', this); |
| set Z(int value) { |
| JS('void', '#._z = #', this, value); |
| } |
| } |
| |
| A makeA() native; |
| |
| void setup() { |
| JS('', r""" |
| (function(){ |
| function A() {} |
| |
| Object.defineProperty(A.prototype, "X", { |
| get: function () { return this._x; }, |
| set: function (v) { this._x = v; } |
| }); |
| |
| makeA = function(){return new A()}; |
| |
| self.nativeConstructor(A); |
| })()"""); |
| } |
| |
| main() { |
| nativeTesting(); |
| setup(); |
| |
| var a = makeA(); |
| |
| a.setX(5); |
| Expect.equals(5, a.getX()); |
| |
| a.X = 10; |
| a.Y = 20; |
| a.Z = 30; |
| |
| Expect.equals(10, a.X); |
| Expect.equals(20, a.Y); |
| Expect.equals(30, a.Z); |
| |
| confuse(a).setX(6); |
| Expect.equals(6, confuse(a).getX()); |
| |
| Expect.equals(6, confuse(a).X); |
| Expect.equals(20, confuse(a).Y); |
| Expect.equals(30, confuse(a).Z); |
| } |