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

import "package:expect/expect.dart";
import "dart:_foreign_helper" show JS;

// Test that native objects cannot accidentally or maliciously be mistaken for
// Dart objects.

// This test currently fails because we do not recognize the need for
// interceptors without native *classes*.

class Thing {}

make1() native;
make2() native;

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

inscrutable(x) {
  if (new DateTime.now().millisecondsSinceEpoch == 0) {
    return x;
  } else {
    return 42;
  }
}

main() {
  setup();

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