File: init_arg.t

package info (click to toggle)
percona-toolkit 3.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, trixie
  • size: 68,916 kB
  • sloc: perl: 241,287; sql: 22,868; sh: 19,746; javascript: 6,799; makefile: 353; awk: 38; python: 30; sed: 1
file content (91 lines) | stat: -rw-r--r-- 1,919 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
#!/usr/bin/perl

BEGIN {
   die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
      unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
   unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
};

use strict;
use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More;



{
    package Foo;
    use Lmo qw( is init_arg );

    eval {
        has 'foo' => (
            is => "rw",
            init_arg => undef,
        );
    };
    ::ok(!$@, '... created the attr okay');
}

{
    my $foo = Foo->new( foo => "bar" );
    isa_ok($foo, 'Foo');

    is( $foo->foo, undef, "field is not set via init arg" );

    $foo->foo("blah");

    is( $foo->foo, "blah", "field is set via setter" );
}

{
    package Foo;

    eval {
        has 'foo2' => (
            is => "rw",
            init_arg => undef,
        );
    };
    ::ok(!$@, '... adding a second attribute with init_arg works');
}

{
    my $foo = Foo->new( foo => "bar", foo2 => "baz" );

    is( $foo->foo, undef, "foo is not set via init arg" );
    is( $foo->foo2, undef, "foo2 is not set via init arg" );

    $foo->foo("blah");
    $foo->foo2("bluh");

    is( $foo->foo, "blah", "foo is set via setter" );
    is( $foo->foo2, "bluh", "foo2 is set via setter" );
}

{
    package Foo2;
    use Lmo qw( is init_arg clearer default );

    my $counter;
    eval {
        has 'auto_foo' => (
            is       => "ro",
            init_arg => undef,
            default  => sub { $counter++ ? "Foo" : "Bar" },
            clearer  => 'clear_auto_foo',
        );
    };
    ::ok(!$@, '... attribute with init_arg+default+clearer+is works');
}

{
    my $foo = Foo2->new( auto_foo => 1234 );

    is( $foo->auto_foo, "Bar", "auto_foo is not set via init arg, but by the default" );

    $foo->clear_auto_foo();

    is( $foo->auto_foo, "Foo", "auto_foo calls default again if cleared" );
}

done_testing;