|  | // 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; } | 
|  | }); | 
|  |  | 
|  | self.makeA = function(){return new A()}; | 
|  |  | 
|  | self.nativeConstructor(A); | 
|  | })()"""); | 
|  | applyTestExtensions(['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); | 
|  | } |