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

// @dart = 2.7

import "native_testing.dart";

// Verify that methods are not renamed to clash with native field names
// that are known from the DOM (like x, y, z).
@Native("A")
class A {
  int x;
  int y;
  int z;
  int gettersCalled;
}

void setup() {
  JS('', r"""
(function(){
  function getter() {
    this.gettersCalled++;
    return 42;
  }

  function A(){
    var a = Object.create(
        { constructor: A },
        { x: { get: getter, configurable: false, writeable: false },
          y: { get: getter, configurable: false, writeable: false },
          z: { get: getter, configurable: false, writeable: false }
        });
    a.gettersCalled = 0;
    return a;
  }

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

A makeA() native;

class B {
  void a() {}
  void a0() {}
  void a1() {}
  void a2() {}
  void a3() {}
  void a4() {}
  void a5() {}
  void a6() {}
  void a7() {}
  void a8() {}
  void a9() {}
  void a10() {}
  void a11() {}
  void a12() {}
  void a13() {}
  void a14() {}
  void a15() {}
  void a16() {}
  void a17() {}
  void a18() {}
  void a19() {}
  void a20() {}
  void a21() {}
  void a22() {}
  void a23() {}
  void a24() {}
  void a25() {}
  void a26() {}
  int z = 0;
}

int inscrutable(int x) => x == 0 ? 0 : x | inscrutable(x & (x - 1));

main() {
  nativeTesting();
  setup();
  confuse(new B()).a();
  var x = confuse(makeA());
  // Each of these will throw, because an instance of A doesn't have any of
  // these functions.  The important thing is that none of them have been
  // renamed to be called 'z' by the minifier, because then the getter will be
  // hit.
  try {
    x.a();
  } catch (e) {}
  try {
    x.a0();
  } catch (e) {}
  try {
    x.a1();
  } catch (e) {}
  try {
    x.a2();
  } catch (e) {}
  try {
    x.a3();
  } catch (e) {}
  try {
    x.a4();
  } catch (e) {}
  try {
    x.a5();
  } catch (e) {}
  try {
    x.a6();
  } catch (e) {}
  try {
    x.a7();
  } catch (e) {}
  try {
    x.a8();
  } catch (e) {}
  try {
    x.a9();
  } catch (e) {}
  try {
    x.a10();
  } catch (e) {}
  try {
    x.a11();
  } catch (e) {}
  try {
    x.a12();
  } catch (e) {}
  try {
    x.a13();
  } catch (e) {}
  try {
    x.a14();
  } catch (e) {}
  try {
    x.a15();
  } catch (e) {}
  try {
    x.a16();
  } catch (e) {}
  try {
    x.a17();
  } catch (e) {}
  try {
    x.a18();
  } catch (e) {}
  try {
    x.a19();
  } catch (e) {}
  try {
    x.a20();
  } catch (e) {}
  try {
    x.a21();
  } catch (e) {}
  try {
    x.a12();
  } catch (e) {}
  try {
    x.a23();
  } catch (e) {}
  try {
    x.a24();
  } catch (e) {}
  try {
    x.a25();
  } catch (e) {}
  try {
    x.a26();
  } catch (e) {}
  Expect.equals(0, x.gettersCalled);
  Expect.equals(42, x.z);
  Expect.equals(1, x.gettersCalled);
}
