Commit | Line | Data |
53c979f0 |
1 | #!perl |
2 | use warnings FATAL => 'all'; |
3 | use strict; |
4 | |
5 | use Test::More tests => 68; |
6 | |
7 | use Function::Parameters; |
8 | |
9 | fun foo($pr1, $pr2, $po1 = 1, $po2 = 2, :$no1 = 3, :$no2 = 4, %r) {} |
10 | |
11 | { |
12 | my $info = Function::Parameters::info \&foo; |
13 | is $info->keyword, 'fun'; |
14 | is $info->invocant, undef; |
15 | is_deeply [$info->positional_required], [qw($pr1 $pr2)]; |
16 | is scalar $info->positional_required, 2; |
17 | is_deeply [$info->positional_optional], [qw($po1 $po2)]; |
18 | is scalar $info->positional_optional, 2; |
19 | is_deeply [$info->named_required], []; |
20 | is scalar $info->named_required, 0; |
21 | is_deeply [$info->named_optional], [qw($no1 $no2)]; |
22 | is scalar $info->named_optional, 2; |
23 | is $info->slurpy, '%r'; |
24 | } |
25 | |
26 | { |
27 | my $info = Function::Parameters::info fun ($pr1, :$nr1, :$nr2) {}; |
28 | is $info->keyword, 'fun'; |
29 | is $info->invocant, undef; |
30 | is_deeply [$info->positional_required], [qw($pr1)]; |
31 | is scalar $info->positional_required, 1; |
32 | is_deeply [$info->positional_optional], []; |
33 | is scalar $info->positional_optional, 0; |
34 | is_deeply [$info->named_required], [qw($nr1 $nr2)]; |
35 | is scalar $info->named_required, 2; |
36 | is_deeply [$info->named_optional], []; |
37 | is scalar $info->named_optional, 0; |
38 | is $info->slurpy, undef; |
39 | } |
40 | |
41 | sub bar {} |
42 | |
43 | is Function::Parameters::info(\&bar), undef; |
44 | |
45 | is Function::Parameters::info(sub {}), undef; |
46 | |
47 | method baz($class: $po1 = 1, $po2 = 2, $po3 = 3, :$no1 = 4, @rem) {} |
48 | |
49 | { |
50 | my $info = Function::Parameters::info \&baz; |
51 | is $info->keyword, 'method'; |
52 | is $info->invocant, '$class'; |
53 | is_deeply [$info->positional_required], []; |
54 | is scalar $info->positional_required, 0; |
55 | is_deeply [$info->positional_optional], [qw($po1 $po2 $po3)]; |
56 | is scalar $info->positional_optional, 3; |
57 | is_deeply [$info->named_required], []; |
58 | is scalar $info->named_required, 0; |
59 | is_deeply [$info->named_optional], [qw($no1)]; |
60 | is scalar $info->named_optional, 1; |
61 | is $info->slurpy, '@rem'; |
62 | } |
63 | |
64 | { |
65 | my $info = Function::Parameters::info method () {}; |
66 | is $info->keyword, 'method'; |
67 | is $info->invocant, '$self'; |
68 | is_deeply [$info->positional_required], []; |
69 | is scalar $info->positional_required, 0; |
70 | is_deeply [$info->positional_optional], []; |
71 | is scalar $info->positional_optional, 0; |
72 | is_deeply [$info->named_required], []; |
73 | is scalar $info->named_required, 0; |
74 | is_deeply [$info->named_optional], []; |
75 | is scalar $info->named_optional, 0; |
76 | is $info->slurpy, undef; |
77 | } |
78 | |
79 | { |
80 | use Function::Parameters { proc => 'function' }; |
81 | my $info = Function::Parameters::info proc {}; |
82 | is $info->keyword, 'proc'; |
83 | is $info->invocant, undef; |
84 | is_deeply [$info->positional_required], []; |
85 | is scalar $info->positional_required, 0; |
86 | is_deeply [$info->positional_optional], []; |
87 | is scalar $info->positional_optional, 0; |
88 | is_deeply [$info->named_required], []; |
89 | is scalar $info->named_required, 0; |
90 | is_deeply [$info->named_optional], []; |
91 | is scalar $info->named_optional, 0; |
92 | is $info->slurpy, '@_'; |
93 | } |
94 | |
95 | { |
96 | my $info = Function::Parameters::info method {}; |
97 | is $info->keyword, 'method'; |
98 | is $info->invocant, '$self'; |
99 | is_deeply [$info->positional_required], []; |
100 | is scalar $info->positional_required, 0; |
101 | is_deeply [$info->positional_optional], []; |
102 | is scalar $info->positional_optional, 0; |
103 | is_deeply [$info->named_required], []; |
104 | is scalar $info->named_required, 0; |
105 | is_deeply [$info->named_optional], []; |
106 | is scalar $info->named_optional, 0; |
107 | is $info->slurpy, '@_'; |
108 | } |
109 | |