// 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.

import "dart:_js_helper";
import "package:expect/expect.dart";

// Verify that native fields on classes are not renamed by the minifier.
@Native("A")
class A {
  int myLongPropertyName;
  int getValue;

  int method(int z) => myLongPropertyName;
}


void setup() native r"""
function getter() {
  return ++this.getValue;
}

function setter(x) {
  this.getValue += 10;
}

function A(){
  var a = Object.create(
      { constructor: { name: 'A'}},
      { myLongPropertyName: { get: getter,
                              set: setter,
                              configurable: false,
                              writeable: false
                            }
      });
  a.getValue = 0;
  return a;
}

makeA = function(){return new A;};
""";

A makeA() native;

main() {
  setup();
  var a = makeA();
  a.myLongPropertyName = 21;
  int gotten = a.myLongPropertyName;
  Expect.equals(11, gotten);

  var a2 = makeA();
  if (a2 is A) {
    // Inside this 'if' the compiler knows that a2 is an A, so it is tempted
    // to access myLongPropertyName directly, using its minified name.  But
    // renaming of native properties can only work using getters and setters
    // that access the original name.
    a2.myLongPropertyName = 21;
    int gotten = a2.myLongPropertyName;
    Expect.equals(11, gotten);
  }
}
