// Copyright (c) 2013, 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';

// Test that native objects cannot accidentally or maliciously be mistaken for
// Dart objects.
// The difference between fake_thing_test and fake_thing_2_test is the
// presence of a used declared native class.

class Thing {}

@Native("NT")
class NativeThing {}

make1() native;
make2() native;
make3() native;

void setup() {
  JS('', r"""
(function(){
  function A() {}
  A.prototype.$isThing = true;
  self.make1 = function(){return new A()};
  self.make2 = function(){return {$isThing: true}};
  function NT() {}
  NT.prototype.$isThing = true;
  self.make3 = function(){return new NT()};

  self.nativeConstructor(NT);
})()""");
  applyTestExtensions(['NT']);
}

main() {
  nativeTesting();
  setup();

  var a = new Thing();
  var b = make1();
  var c = make2();
  var d = make3();
  Expect.isTrue(confuse(a) is Thing);
  Expect.isFalse(confuse(b) is Thing);
  Expect.isFalse(confuse(c) is Thing);
  Expect.isFalse(confuse(d) is Thing);
}
