// Copyright (c) 2020, 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. // Tests positional and optional arguments for various JS objects. @JS() library js_parameters_test; import 'package:js/js.dart'; import 'package:expect/expect.dart'; @JS() external void eval(String code); @JS() class Foo { external factory Foo(); external singleArg(a); external singlePositionalArg([dynamic a]); external mixedPositionalArgs(a, [dynamic b]); } @JS() class Bar { external static singleArg(a); external static singlePositionalArg([dynamic a]); external static mixedPositionalArgs(a, [dynamic b]); } external singleArg(a); external singlePositionalArg([dynamic a]); external mixedPositionalArgs(a, [dynamic b]); main() { eval(r""" function Foo() {} Foo.prototype.singleArg = function(a) { return a; } Foo.prototype.singlePositionalArg = singleArg; Foo.prototype.mixedPositionalArgs = function(a, b) { if (arguments.length == 0) return a; return arguments[arguments.length - 1]; } var Bar = { singleArg: function(a) { return a; }, singlePositionalArg: singleArg, mixedPositionalArgs: function(a, b) { if (arguments.length == 0) return a; return arguments[arguments.length - 1]; }, }; function singleArg(a) { return a; } var singlePositionalArg = singleArg; function mixedPositionalArgs(a, b) { if (arguments.length == 0) return a; return arguments[arguments.length - 1]; } """); var foo = Foo(); Expect.equals(foo.singleArg(2), 2); Expect.equals(foo.singlePositionalArg(2), 2); Expect.equals(foo.singlePositionalArg(), null); Expect.equals(foo.mixedPositionalArgs(3), 3); Expect.equals(foo.mixedPositionalArgs(3, 4), 4); Expect.equals(Bar.singleArg(2), 2); Expect.equals(Bar.singlePositionalArg(2), 2); Expect.equals(Bar.singlePositionalArg(), null); Expect.equals(Bar.mixedPositionalArgs(3), 3); Expect.equals(Bar.mixedPositionalArgs(3, 4), 4); Expect.equals(singleArg(2), 2); Expect.equals(singlePositionalArg(2), 2); Expect.equals(singlePositionalArg(), null); Expect.equals(mixedPositionalArgs(3), 3); Expect.equals(mixedPositionalArgs(3, 4), 4); }