// Copyright (c) 2011, 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. // Test the feature where the native string declares the native method's name. import 'native_testing.dart'; import 'dart:_js_helper' show Native, JSName; @Native("A") class A { @JSName('fooA') int foo() native; @JSName('barA') int bar() native; @JSName('bazA') int baz() native; } A makeA() native; class B { int bar([x]) => 800; int baz() => 900; } void setup() { JS('', r""" (function(){ // This code is inside 'setup' and so not accessible from the global scope. function A(){} A.prototype.fooA = function(){return 100;}; A.prototype.barA = function(){return 200;}; A.prototype.bazA = function(){return 300;}; self.makeA = function(){return new A()}; self.nativeConstructor(A); })()"""); applyTestExtensions(['A']); } testDynamic() { var a = confuse(makeA()); var b = confuse(new B()); Expect.equals(100, a.foo()); Expect.equals(200, a.bar()); Expect.equals(300, a.baz()); Expect.equals(800, b.bar()); Expect.equals(900, b.baz()); } testTyped() { A a = makeA(); B b = new B(); Expect.equals(100, a.foo()); Expect.equals(200, a.bar()); Expect.equals(300, a.baz()); Expect.equals(800, b.bar()); Expect.equals(900, b.baz()); } main() { nativeTesting(); setup(); testDynamic(); testTyped(); } expectNoSuchMethod(action, note) { bool caught = false; try { action(); } catch (ex) { caught = true; Expect.isTrue(ex is NoSuchMethodError, note); } Expect.isTrue(caught, note); }