blob: eef61fc8028b5a5f19100355aba9c4acb5d788c8 [file] [log] [blame]
// 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));
}