rework keyword properties; add 'defaults', 'strict'
[p5sagit/Function-Parameters.git] / t / checkered_2.t
CommitLineData
abccbe86 1#!perl
2
3use Test::More tests => 120;
4
5use warnings FATAL => 'all';
6use strict;
7
8use Function::Parameters {
9 method => {
f7651a6e 10 defaults => 'method',
11 strict => 1,
abccbe86 12 },
13
14 cathod => {
f7651a6e 15 defaults => 'method',
16 strict => 0,
abccbe86 17 },
18
19 fun => 'function',
20};
21
22fun error_like($re, $body, $name = undef) {
23 local $@;
24 ok !eval { $body->(); 1 };
25 like $@, $re, $name;
26}
27
28method foo_any { [@_] }
29method foo_any_a(@args) { [@args] }
30method foo_any_b($x = undef, @rest) { [@_] }
31method foo_0() { [@_] }
32method foo_1($x) { [@_] }
33method foo_2($x, $y) { [@_] }
34method foo_3($x, $y, $z) { [@_] }
35method foo_0_1($x = 'D0') { [$x] }
36method foo_0_2($x = 'D0', $y = 'D1') { [$x, $y] }
37method foo_0_3($x = 'D0', $y, $z = 'D2') { [$x, $y, $z] }
38method foo_1_2($x, $y = 'D1') { [$x, $y] }
39method foo_1_3($x, $y = 'D1', $z = 'D2') { [$x, $y, $z] }
40method foo_2_3($x, $y, $z = 'D2') { [$x, $y, $z] }
41method foo_1_($x, @y) { [@_] }
42
43error_like qr/Not enough arguments.*foo_any/, sub { foo_any };
44is_deeply foo_any('a'), [];
45is_deeply foo_any('a', 'b'), ['b'];
46is_deeply foo_any('a', 'b', 'c'), ['b', 'c'];
47is_deeply foo_any('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
48
49error_like qr/Not enough arguments.*foo_any_a/, sub { foo_any_a };
50is_deeply foo_any_a('a'), [];
51is_deeply foo_any_a('a', 'b'), ['b'];
52is_deeply foo_any_a('a', 'b', 'c'), ['b', 'c'];
53is_deeply foo_any_a('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
54
55error_like qr/Not enough arguments.*foo_any_b/, sub { foo_any_b };
56is_deeply foo_any_b('a'), [];
57is_deeply foo_any_b('a', 'b'), ['b'];
58is_deeply foo_any_b('a', 'b', 'c'), ['b', 'c'];
59is_deeply foo_any_b('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
60
61error_like qr/Not enough arguments.*foo_0/, sub { foo_0 };
62is_deeply foo_0('a'), [];
63error_like qr/Too many arguments.*foo_0/, sub { foo_0 'a', 'b' };
64error_like qr/Too many arguments.*foo_0/, sub { foo_0 'a', 'b', 'c' };
65error_like qr/Too many arguments.*foo_0/, sub { foo_0 'a', 'b', 'c', 'd' };
66
67error_like qr/Not enough arguments.*foo_1/, sub { foo_1 };
68error_like qr/Not enough arguments.*foo_1/, sub { foo_1 'a' };
69is_deeply foo_1('a', 'b'), ['b'];
70error_like qr/Too many arguments.*foo_1/, sub { foo_1 'a', 'b', 'c' };
71error_like qr/Too many arguments.*foo_1/, sub { foo_1 'a', 'b', 'c', 'd' };
72
73error_like qr/Not enough arguments.*foo_2/, sub { foo_2 };
74error_like qr/Not enough arguments.*foo_2/, sub { foo_2 'a' };
75error_like qr/Not enough arguments.*foo_2/, sub { foo_2 'a', 'b' };
76is_deeply foo_2('a', 'b', 'c'), ['b', 'c'];
77error_like qr/Too many arguments.*foo_2/, sub { foo_2 'a', 'b', 'c', 'd' };
78
79error_like qr/Not enough arguments.*foo_3/, sub { foo_3 };
80error_like qr/Not enough arguments.*foo_3/, sub { foo_3 'a' };
81error_like qr/Not enough arguments.*foo_3/, sub { foo_3 'a', 'b' };
82error_like qr/Not enough arguments.*foo_3/, sub { foo_3 'a', 'b', 'c' };
83is_deeply foo_3('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
84error_like qr/Too many arguments.*foo_3/, sub { foo_3 'a', 'b', 'c', 'd', 'e' };
85
86error_like qr/Not enough arguments.*foo_0_1/, sub { foo_0_1 };
87is_deeply foo_0_1('a'), ['D0'];
88is_deeply foo_0_1('a', 'b'), ['b'];
89error_like qr/Too many arguments.*foo_0_1/, sub { foo_0_1 'a', 'b', 'c' };
90error_like qr/Too many arguments.*foo_0_1/, sub { foo_0_1 'a', 'b', 'c', 'd' };
91
92error_like qr/Not enough arguments.*foo_0_2/, sub { foo_0_2 };
93is_deeply foo_0_2('a'), ['D0', 'D1'];
94is_deeply foo_0_2('a', 'b'), ['b', 'D1'];
95is_deeply foo_0_2('a', 'b', 'c'), ['b', 'c'];
96error_like qr/Too many arguments.*foo_0_2/, sub { foo_0_2 'a', 'b', 'c', 'd' };
97
98error_like qr/Not enough arguments.*foo_0_3/, sub { foo_0_3 };
99is_deeply foo_0_3('a'), ['D0', undef, 'D2'];
100is_deeply foo_0_3('a', 'b'), ['b', undef, 'D2'];
101is_deeply foo_0_3('a', 'b', 'c'), ['b', 'c', 'D2'];
102is_deeply foo_0_3('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
103error_like qr/Too many arguments.*foo_0_3/, sub { foo_0_3 'a', 'b', 'c', 'd', 'e' };
104
105error_like qr/Not enough arguments.*foo_1_2/, sub { foo_1_2 };
106error_like qr/Not enough arguments.*foo_1_2/, sub { foo_1_2 'a' };
107is_deeply foo_1_2('a', 'b'), ['b', 'D1'];
108is_deeply foo_1_2('a', 'b', 'c'), ['b', 'c'];
109error_like qr/Too many arguments.*foo_1_2/, sub { foo_1_2 'a', 'b', 'c', 'd' };
110
111error_like qr/Not enough arguments.*foo_1_3/, sub { foo_1_3 };
112error_like qr/Not enough arguments.*foo_1_3/, sub { foo_1_3 'a' };
113is_deeply foo_1_3('a', 'b'), ['b', 'D1', 'D2'];
114is_deeply foo_1_3('a', 'b', 'c'), ['b', 'c', 'D2'];
115is_deeply foo_1_3('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
116error_like qr/Too many arguments.*foo_1_3/, sub { foo_1_3 'a', 'b', 'c', 'd', 'e' };
117
118error_like qr/Not enough arguments.*foo_2_3/, sub { foo_2_3 };
119error_like qr/Not enough arguments.*foo_2_3/, sub { foo_2_3 'a' };
120error_like qr/Not enough arguments.*foo_2_3/, sub { foo_2_3 'a', 'b' };
121is_deeply foo_2_3('a', 'b', 'c'), ['b', 'c', 'D2'];
122is_deeply foo_2_3('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
123error_like qr/Too many arguments.*foo_2_3/, sub { foo_2_3 'a', 'b', 'c', 'd', 'e' };
124
125error_like qr/Not enough arguments.*foo_1_/, sub { foo_1_ };
126error_like qr/Not enough arguments.*foo_1_/, sub { foo_1_ 'a' };
127is_deeply foo_1_('a', 'b'), ['b'];
128is_deeply foo_1_('a', 'b', 'c'), ['b', 'c'];
129is_deeply foo_1_('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
130
131
132cathod puppy($eyes) { [@_] }
133cathod frog($will, $never) { $will * 3 + (pop) - $never }
134
135is_deeply puppy, [];
136is_deeply puppy('a'), [];
137is_deeply puppy('a', 'b'), ['b'];
138is_deeply puppy('a', 'b', 'c'), ['b', 'c'];
139is_deeply puppy('a', 'b', 'c', 'd'), ['b', 'c', 'd'];
140
141is +main->frog(7, 4, 1), 18;
142is +main->frog(7, 4), 21;