// Copyright (c) 2014, 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_call_on_closure; import 'dart:mirrors'; import 'package:expect/expect.dart'; class FakeFunctionCall { call(x, y) => '1 $x $y'; } class FakeFunctionNSM { noSuchMethod(msg) => msg.positionalArguments.join(', '); } class C { get fakeFunctionCall => new FakeFunctionCall(); get fakeFunctionNSM => new FakeFunctionNSM(); get closure => (x, y) => '2 $this $x $y'; get closureOpt => (x, y, [z, w]) => '3 $this $x $y $z $w'; get closureNamed => (x, y, {z, w}) => '4 $this $x $y $z $w'; tearOff(x, y) => '22 $this $x $y'; tearOffOpt(x, y, [z, w]) => '33 $this $x $y $z $w'; tearOffNamed(x, y, {z, w}) => '44 $this $x $y $z $w'; noSuchMethod(msg) => 'DNU'; toString() => 'C'; } main() { var c = new C(); InstanceMirror im; im = reflect(c.fakeFunctionCall); Expect.equals('1 5 6', im.invoke(#call, [5, 6]).reflectee); im = reflect(c.fakeFunctionNSM); Expect.equals('7, 8', im.invoke(#call, [7, 8]).reflectee); im = reflect(c.closure); Expect.equals('2 C 9 10', im.invoke(#call, [9, 10]).reflectee); im = reflect(c.closureOpt); Expect.equals('3 C 11 12 13 null', im.invoke(#call, [11, 12, 13]).reflectee); im = reflect(c.closureNamed); Expect.equals( '4 C 14 15 null 16', im.invoke(#call, [14, 15], {#w: 16}).reflectee); im = reflect(c.tearOff); Expect.equals('22 C 9 10', im.invoke(#call, [9, 10]).reflectee); im = reflect(c.tearOffOpt); Expect.equals('33 C 11 12 13 null', im.invoke(#call, [11, 12, 13]).reflectee); im = reflect(c.tearOffNamed); Expect.equals( '44 C 14 15 null 16', im.invoke(#call, [14, 15], {#w: 16}).reflectee); }