|  | // 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; | 
|  | make1 = function(){return new A()}; | 
|  | make2 = function(){return {$isThing: true}}; | 
|  | function NT() {} | 
|  | NT.prototype.$isThing = true; | 
|  | make3 = function(){return new NT()}; | 
|  |  | 
|  | self.nativeConstructor(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); | 
|  | } |