// Copyright (c) 2012, 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.

// VMOptions=
// VMOptions=--dwarf_stack_traces --no-retain_function_objects --no-retain_code_objects

import "package:expect/expect.dart";

apply(Function function, List? positional, Map<Symbol, dynamic>? named) {
  return Function.apply(function, positional, named);
}

void throwsNSME(
    Function function, List? positional, Map<Symbol, dynamic>? named) {
  Expect.throwsNoSuchMethodError(() => apply(function, positional, named));
}

main() {
  var c1 = () => 'c1';
  var c2 = (a) => 'c2 $a';
  var c3 = ([a = 1]) => 'c3 $a';
  var c4 = ({a: 1}) => 'c4 $a';
  var c5 = ({a: 1, b: 2}) => 'c5 $a $b';
  var c6 = ({b: 1, a: 2}) => 'c6 $a $b';
  var c7 = (x, {b: 1, a: 2}) => 'c7 $x $a $b';
  var c8 = (x, y, [a = 2, b = 3]) => 'c8 $x $y $a $b';

  Expect.equals('c1', apply(c1, null, null));
  Expect.equals('c1', apply(c1, [], null));
  Expect.equals('c1', apply(c1, [], {}));
  Expect.equals('c1', apply(c1, null, {}));
  throwsNSME(c1, [1], null);
  throwsNSME(c1, [1], {#a: 2});
  throwsNSME(c1, null, {#a: 2});

  Expect.equals('c2 1', apply(c2, [1], null));
  Expect.equals('c2 1', apply(c2, [1], {}));
  throwsNSME(c2, null, null);
  throwsNSME(c2, [], null);
  throwsNSME(c2, null, {});
  throwsNSME(c2, null, {#a: 1});
  throwsNSME(c2, [2], {#a: 1});

  Expect.equals('c3 1', apply(c3, null, null));
  Expect.equals('c3 1', apply(c3, [], null));
  Expect.equals('c3 2', apply(c3, [2], {}));
  throwsNSME(c3, [1, 2], null);
  throwsNSME(c3, null, {#a: 1});

  Expect.equals('c4 1', apply(c4, [], null));
  Expect.equals('c4 2', apply(c4, [], {#a: 2}));
  Expect.equals('c4 1', apply(c4, null, null));
  Expect.equals('c4 1', apply(c4, [], {}));
  throwsNSME(c4, [1], {#a: 1});
  throwsNSME(c4, [1], {});
  throwsNSME(c4, [], {#a: 1, #b: 2});

  Expect.equals('c5 1 2', apply(c5, [], null));
  Expect.equals('c5 3 2', apply(c5, [], {#a: 3}));
  Expect.equals('c5 1 2', apply(c5, null, null));
  Expect.equals('c5 1 2', apply(c5, [], {}));
  Expect.equals('c5 3 4', apply(c5, [], {#a: 3, #b: 4}));
  Expect.equals('c5 4 3', apply(c5, [], {#b: 3, #a: 4}));
  Expect.equals('c5 1 3', apply(c5, [], {#b: 3}));
  throwsNSME(c5, [1], {#a: 1});
  throwsNSME(c5, [1], {});
  throwsNSME(c5, [], {#a: 1, #b: 2, #c: 3});

  Expect.equals('c6 2 1', apply(c6, [], null));
  Expect.equals('c6 3 1', apply(c6, [], {#a: 3}));
  Expect.equals('c6 2 1', apply(c6, null, null));
  Expect.equals('c6 2 1', apply(c6, [], {}));
  Expect.equals('c6 3 4', apply(c6, [], {#a: 3, #b: 4}));
  Expect.equals('c6 4 3', apply(c6, [], {#b: 3, #a: 4}));
  Expect.equals('c6 2 3', apply(c6, [], {#b: 3}));
  throwsNSME(c6, [1], {#a: 1});
  throwsNSME(c6, [1], {});
  throwsNSME(c6, [], {#a: 1, #b: 2, #c: 3});

  Expect.equals('c7 7 2 1', apply(c7, [7], null));
  Expect.equals('c7 7 3 1', apply(c7, [7], {#a: 3}));
  Expect.equals('c7 7 2 1', apply(c7, [7], {}));
  Expect.equals('c7 7 3 4', apply(c7, [7], {#a: 3, #b: 4}));
  Expect.equals('c7 7 4 3', apply(c7, [7], {#b: 3, #a: 4}));
  Expect.equals('c7 7 2 3', apply(c7, [7], {#b: 3}));
  throwsNSME(c7, [], {#a: 1});
  throwsNSME(c7, [], {});
  throwsNSME(c7, [7], {#a: 1, #b: 2, #c: 3});

  Expect.equals('c8 7 8 2 3', apply(c8, [7, 8], null));
  Expect.equals('c8 7 8 2 3', apply(c8, [7, 8], {}));
  Expect.equals('c8 7 8 3 3', apply(c8, [7, 8, 3], null));
  Expect.equals('c8 7 8 3 4', apply(c8, [7, 8, 3, 4], null));
  throwsNSME(c8, [], null);
  throwsNSME(c8, [], {});
  throwsNSME(c8, [1], null);
  throwsNSME(c8, [7, 8, 9, 10, 11], null);
}
