import all tests from Fun
[p5sagit/Function-Parameters.git] / t / foreign / Fun / defaults.t
CommitLineData
98478aff 1#!perl
2use strict;
3use warnings;
4use Test::More;
5
6use Function::Parameters;
7
8fun foo ($x, $y = 5) {
9 return $x + $y;
10}
11
12is(foo(3, 4), 7);
13is(foo(3), 8);
14{
15 my $warning;
16 local $SIG{__WARN__} = sub { $warning = $_[0] };
17 is(foo, 5);
18 like($warning, qr/Use of uninitialized value \$x in addition \(\+\)/);
19}
20
21fun bar ($baz, $quux = foo(1) * 2, $blorg = sub { return "ran sub, got " . $_[0] }) {
22 $blorg->($baz + $quux);
23}
24
25is(bar(3, 4, sub { $_[0] }), 7);
26is(bar(5, 6), "ran sub, got 11");
27is(bar(7), "ran sub, got 19");
28{
29 my $warning;
30 local $SIG{__WARN__} = sub { $warning = $_[0] };
31 is(bar, "ran sub, got 12");
32 like($warning, qr/Use of uninitialized value \$baz in addition \(\+\)/);
33}
34
35fun baz ($a, $b = our $FOO) {
36 return "$a $b";
37}
38
39{
40 no warnings 'misc'; # 'not imported' warning because we use $FOO later
41 eval '$FOO';
42 like($@, qr/Global symbol "\$FOO" requires explicit package name/, "doesn't leak scope");
43}
44
45our $FOO = "abc";
46is(baz("123"), "123 abc");
47
48fun goorch ($x, $y = []) {
49 return $y
50}
51
52my $goorch_y_1 = goorch( 10 );
53my $goorch_y_2 = goorch( 10 );
54
55isnt($goorch_y_1, $goorch_y_2, '... not the same reference');
56
57done_testing;