| // 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. | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | // Testing method invocation. | 
 | // Currently testing only NoSuchMethodError. | 
 |  | 
 | class A { | 
 |   A() {} | 
 |   int foo() { | 
 |     return 1; | 
 |   } | 
 | } | 
 |  | 
 | class B { | 
 |   get f { | 
 |     throw 123; | 
 |   } | 
 | } | 
 |  | 
 | class MethodInvocationTest { | 
 |   static void testNullReceiver() { | 
 |     dynamic a = new A(); | 
 |     Expect.equals(1, a.foo()); | 
 |     a = null; | 
 |     bool exceptionCaught = false; | 
 |     try { | 
 |       a.foo(); | 
 |     } on NoSuchMethodError catch (e) { | 
 |       exceptionCaught = true; | 
 |     } | 
 |     Expect.equals(true, exceptionCaught); | 
 |   } | 
 |  | 
 |   static testGetterMethodInvocation() { | 
 |     var b = new B(); | 
 |     try { | 
 |       b.f(); | 
 |     } catch (e) { | 
 |       Expect.equals(123, e); | 
 |     } | 
 |   } | 
 |  | 
 |   static void testMain() { | 
 |     testNullReceiver(); | 
 |     testGetterMethodInvocation(); | 
 |   } | 
 | } | 
 |  | 
 | main() { | 
 |   MethodInvocationTest.testMain(); | 
 | } |