// 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);
}
