import all tests from Fun
[p5sagit/Function-Parameters.git] / t / foreign / Fun / defaults.t
1 #!perl
2 use strict;
3 use warnings;
4 use Test::More;
5
6 use Function::Parameters;
7
8 fun foo ($x, $y = 5) {
9     return $x + $y;
10 }
11
12 is(foo(3, 4), 7);
13 is(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
21 fun bar ($baz, $quux = foo(1) * 2, $blorg = sub { return "ran sub, got " . $_[0] }) {
22     $blorg->($baz + $quux);
23 }
24
25 is(bar(3, 4, sub { $_[0] }), 7);
26 is(bar(5, 6), "ran sub, got 11");
27 is(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
35 fun 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
45 our $FOO = "abc";
46 is(baz("123"), "123 abc");
47
48 fun goorch ($x, $y = []) {
49     return $y
50 }
51
52 my $goorch_y_1 = goorch( 10 );
53 my $goorch_y_2 = goorch( 10 );
54
55 isnt($goorch_y_1, $goorch_y_2, '... not the same reference');
56
57 done_testing;