| // Copyright (c) 2012, 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'; | |
| @Native("A") | |
| class A {} | |
| A makeA() native; | |
| void setup() { | |
| JS('', r""" | |
| (function(){ | |
| function A() {}; | |
| A.prototype.foo = function() { return 42; }; | |
| self.makeA = function() { return new A() }; | |
| self.nativeConstructor(A); | |
| })()"""); | |
| applyTestExtensions(['A']); | |
| } | |
| class B { | |
| foo() { | |
| return 42; | |
| } | |
| } | |
| class C { | |
| // By having two 'foo' defined in the application, Frog will mangle | |
| // all calls to 'foo', which makes this test pass. | |
| foo(x) { | |
| return 43; | |
| } | |
| } | |
| inferredContext() { | |
| dynamic a = makeA(); | |
| Expect.throws(() => a.foo(), (e) => e is NoSuchMethodError); | |
| Expect.throws(() => a.foo, (e) => e is NoSuchMethodError); | |
| Expect.throws(() => a.foo = 4, (e) => e is NoSuchMethodError); | |
| } | |
| untypedContext() { | |
| var a = confuse(makeA()); | |
| Expect.throws(() => a.foo(), (e) => e is NoSuchMethodError); | |
| Expect.throws(() => a.foo, (e) => e is NoSuchMethodError); | |
| Expect.throws(() => a.foo = 4, (e) => e is NoSuchMethodError); | |
| } | |
| main() { | |
| nativeTesting(); | |
| setup(); | |
| confuse(new B()).foo(); | |
| confuse(new C()).foo(1); | |
| inferredContext(); | |
| untypedContext(); | |
| } |