record and extract metadata
[p5sagit/Function-Parameters.git] / t / info.t
CommitLineData
53c979f0 1#!perl
2use warnings FATAL => 'all';
3use strict;
4
5use Test::More tests => 68;
6
7use Function::Parameters;
8
9fun 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
41sub bar {}
42
43is Function::Parameters::info(\&bar), undef;
44
45is Function::Parameters::info(sub {}), undef;
46
47method 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