// 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.

library test.invoke_closurization_test;

import 'dart:mirrors';

import 'package:expect/expect.dart';

class C {
  instanceMethod(x, y, z) => '$x+$y+$z';
  static staticFunction(x, y, z) => '$x-$y-$z';
}

libraryFunction(x, y, z) => '$x:$y:$z';

testSync() {
  var result;

  C c = new C();
  InstanceMirror im = reflect(c);
  result = im.getField(#instanceMethod);
  Expect.isTrue(result.reflectee is Function, "Should be closure");
  Expect.equals("A+B+C", result.reflectee('A', 'B', 'C'));

  ClassMirror cm = reflectClass(C);
  result = cm.getField(#staticFunction);
  Expect.isTrue(result.reflectee is Function, "Should be closure");
  Expect.equals("A-B-C", result.reflectee('A', 'B', 'C'));

  LibraryMirror lm = cm.owner as LibraryMirror;
  result = lm.getField(#libraryFunction);
  Expect.isTrue(result.reflectee is Function, "Should be closure");
  Expect.equals("A:B:C", result.reflectee('A', 'B', 'C'));
}

main() {
  testSync();
}
