// 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 "dart:mirrors";

import "package:expect/expect.dart";

class MultiArityFunction implements Function {
  noSuchMethod(Invocation msg) {
    if (msg.memberName != #call) return super.noSuchMethod(msg);
    return msg.positionalArguments.join(",");
  }
}

main() {
  dynamic f = new MultiArityFunction();

  Expect.isTrue(f is Function);
  Expect.equals('a', f('a'));
  Expect.equals('a,b', f('a', 'b'));
  Expect.equals('a,b,c', f('a', 'b', 'c'));
  Expect.equals('a', Function.apply(f, ['a']));
  Expect.equals('a,b', Function.apply(f, ['a', 'b']));
  Expect.equals('a,b,c', Function.apply(f, ['a', 'b', 'c']));
  Expect.throwsNoSuchMethodError(() => f.foo('a', 'b', 'c'));

  ClosureMirror cm = reflect(f) as ClosureMirror;
  Expect.isTrue(cm is ClosureMirror);
  Expect.equals('a', cm.apply(['a']).reflectee);
  Expect.equals('a,b', cm.apply(['a', 'b']).reflectee);
  Expect.equals('a,b,c', cm.apply(['a', 'b', 'c']).reflectee);

  MethodMirror mm = cm.function;
  Expect.isNull(mm);

  ClassMirror km = cm.type;
  Expect.equals(reflectClass(MultiArityFunction), km);
}
