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