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

import 'package:expect/expect.dart';

class Fisk {
  method(
      {a = 'a',
      b = 'b',
      c = 'c',
      d = 'd',
      e = 'e',
      f = 'f',
      g = 'g',
      h = 'h',
      i = 'i',
      j = 'j',
      k = 'k',
      l = 'l',
      m = 'm',
      n = 'n',
      o = 'o',
      p = 'p',
      q = 'q',
      r = 'r',
      s = 's',
      t = 't',
      u = 'u',
      v = 'v',
      w = 'w',
      x = 'x',
      y = 'y',
      z = 'z'}) {
    return 'a: $a, '
        'b: $b, '
        'c: $c, '
        'd: $d, '
        'e: $e, '
        'f: $f, '
        'g: $g, '
        'h: $h, '
        'i: $i, '
        'j: $j, '
        'k: $k, '
        'l: $l, '
        'm: $m, '
        'n: $n, '
        'o: $o, '
        'p: $p, '
        'q: $q, '
        'r: $r, '
        's: $s, '
        't: $t, '
        'u: $u, '
        'v: $v, '
        'w: $w, '
        'x: $x, '
        'y: $y, '
        'z: $z';
  }
}

main() {
  var method = new Fisk().method;
  var namedArguments = new Map<Symbol, dynamic>();
  namedArguments[const Symbol('a')] = 'a';
  Expect.stringEquals(
      EXPECTED_RESULT, Function.apply(method, [], namedArguments));
  Expect.stringEquals(
      EXPECTED_RESULT,
      new Fisk().method(
          a: 'a',
          b: 'b',
          c: 'c',
          d: 'd',
          e: 'e',
          f: 'f',
          g: 'g',
          h: 'h',
          i: 'i',
          j: 'j',
          k: 'k',
          l: 'l',
          m: 'm',
          n: 'n',
          o: 'o',
          p: 'p',
          q: 'q',
          r: 'r',
          s: 's',
          t: 't',
          u: 'u',
          v: 'v',
          w: 'w',
          x: 'x',
          y: 'y',
          z: 'z'));
}

const String EXPECTED_RESULT = 'a: a, '
    'b: b, '
    'c: c, '
    'd: d, '
    'e: e, '
    'f: f, '
    'g: g, '
    'h: h, '
    'i: i, '
    'j: j, '
    'k: k, '
    'l: l, '
    'm: m, '
    'n: n, '
    'o: o, '
    'p: p, '
    'q: q, '
    'r: r, '
    's: s, '
    't: t, '
    'u: u, '
    'v: v, '
    'w: w, '
    'x: x, '
    'y: y, '
    'z: z';
