// 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 '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); }