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

// Test that hidden native class names are not used by generated code.

import "package:expect/expect.dart";
import 'native_metadata.dart';

@Native("*B")
class A {
  get name => 'A';
  static A create() => makeA();
}

@Native("*C")
class B {
  get name => 'B';
  static B create() => makeB();
}

class C {  // Ordinary class with name clashing with native class.
  get name => 'C';
  static C create() => new C();
}

@native makeA();
@native makeB();

@Native("""
// Poison hidden native names 'B' and 'C' to prove the compiler didn't place
// anthing on the hidden native class.
B = null;
C = null;
""")
void setup1();

@Native("""
// This code is all inside 'setup' and so not accesible from the global scope.
function B(){}
function C(){}
makeA = function(){return new B};  // A is "*B"
makeB = function(){return new C};  // B is "*C"
""")
void setup2();

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

main() {
  setup1();
  setup2();

  var things = [A.create(), B.create(), C.create()];
  var a = things[inscrutable(0)];
  var b = things[inscrutable(1)];
  var c = things[inscrutable(2)];

  Expect.equals('A', a.name);
  Expect.equals('B', b.name);
  Expect.equals('C', c.name);
}
