|  | // 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. | 
|  |  | 
|  | // Test [Function.apply] on user-defined classes that implement [noSuchMethod]. | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | class F { | 
|  | call([p1]) => "call"; | 
|  | noSuchMethod(Invocation invocation) => "NSM"; | 
|  | } | 
|  |  | 
|  | class G { | 
|  | call() => '42'; | 
|  | noSuchMethod(Invocation invocation) => invocation; | 
|  | } | 
|  |  | 
|  | class H { | 
|  | call(required, {a}) => required + a; | 
|  | } | 
|  |  | 
|  | main() { | 
|  | Expect.equals('call', Function.apply(new F(), [])); | 
|  | Expect.equals('call', Function.apply(new F(), [1])); | 
|  | Expect.throwsNoSuchMethodError(() => Function.apply(new F(), [1, 2])); | 
|  | Expect.throwsNoSuchMethodError(() => Function.apply(new F(), [1, 2, 3])); | 
|  |  | 
|  | Expect.throwsNoSuchMethodError(() => Function.apply(new G(), [1], {#a: 42})); | 
|  |  | 
|  | // Test that [i] can be used to hit an existing method. | 
|  | Expect.equals(43, new H().call(1, a: 42)); | 
|  | Expect.equals(43, Function.apply(new H(), [1], {#a: 42})); | 
|  | } |