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