File: undef_method_arg2.t

package info (click to toggle)
libfunction-parameters-perl 2.001003-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 948 kB
  • sloc: perl: 6,478; makefile: 3
file content (113 lines) | stat: -rw-r--r-- 2,014 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!perl
use strict;
use warnings FATAL => 'all';
use Test::More
    eval {
        require Moose;
        require Test::Deep;
    }
    ? (tests => 4)
    : (skip_all => "Moose, Test::Deep required for testing types")
;

# assigned to by each 'foo' method
my $captured_args;

{
    package Named;

    use Moose;
    use Function::Parameters {
        fun    => { defaults => 'function', reify_type => 'moose' },
        method => { defaults => 'method',   reify_type => 'moose' },
    };

#    use Data::Dumper;

    method foo (
        Str :$foo_a,
        Maybe[Str] :$foo_b = undef) {
        $captured_args = \@_;
    }
}


{
    package Positional;
    use Moose;
    use Function::Parameters {
        fun    => { defaults => 'function', reify_type => 'moose' },
        method => { defaults => 'method',   reify_type => 'moose' },
    };

#    use Data::Dumper;

    method foo (
        Str $foo_a,
        Maybe[Str] $foo_b = undef) {
        $captured_args = \@_;
    }
}


use Test::Deep;
#use Data::Dumper;



my $positional = Positional->new;
$positional->foo('str', undef);

cmp_deeply(
    $captured_args,
    [
        #noclass({}),
        'str',
        undef,
    ],
    'positional: explicit undef shows up in @_ correctly',
);

$positional->foo('str');

cmp_deeply(
    $captured_args,
    [
        #noclass({}),
        'str',
    ],
    'positional: omitting an argument results in no entry in @_',
);

my $named = Named->new;
$named->foo(foo_a => 'str', foo_b => undef);

cmp_deeply(
    $captured_args,
    [
        #noclass({}),
        foo_a => 'str',
        foo_b => undef,
    ],
    'named: explicit undef shows up in @_ correctly',
);

$named->foo(foo_a => 'str');

#TODO: {
#    local $TODO = 'this fails... should work the same as for positional args.';
cmp_deeply(
    $captured_args,
    [
        #noclass({}),
        foo_a => 'str',
    ],
    'named: omitting an argument results in no entry in @_',
);

#print "### named captured args: ", Dumper($captured_args);
#}