// 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; self.make1 = function(){return new A();}; self.make2 = function(){return {$isThing: true}}; })()"""); } @pragma('dart2js:noInline') @pragma('dart2js:assumeDynamic') inscrutable(x) => x; 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); }