| // 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. |
|
|
| /**
|
| * @assertion dynamic apply(Function function, List positionalArguments,
|
| * [Map<Symbol, dynamic> namedArguments])
|
| * Dynamically call function with the specified arguments.
|
| * Acts the same as calling function with positional arguments corresponding
|
| * to the elements of positionalArguments and named arguments corresponding
|
| * to the elements of namedArguments.
|
| * @description Checks that invoking a Function object via Function.apply
|
| * produces expected results.
|
| * @author rodionov
|
| */
|
| import "../../../Utils/expect.dart";
|
|
|
| class A {
|
| String call(int x, int y) {
|
| return "$x$y";
|
| }
|
| }
|
|
|
| class B extends A {}
|
|
|
| String foo(x1, y1, {x2 : "x2", y2}) {
|
| return "$x1$y1$x2$y2";
|
| }
|
|
|
| main() {
|
| Expect.equals("12", Function.apply(new A(), [1, 2], null));
|
| Expect.equals("1122", Function.apply(new B(), [11, 22], null));
|
|
|
| Map<Symbol, dynamic> namedArgs = new Map();
|
| namedArgs[const Symbol("y2")] = 22;
|
| Expect.equals("x1y1x222", Function.apply(foo, ["x1", "y1"], namedArgs));
|
|
|
| namedArgs[const Symbol("x2")] = "x3";
|
| namedArgs[const Symbol("y2")] = "y3";
|
| Expect.equals("x1y1x3y3", Function.apply(foo, ["x1", "y1"], namedArgs));
|
| }
|