File: Function.t

package info (click to toggle)
libperinci-object-perl 0.311-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 244 kB
  • sloc: perl: 716; makefile: 2
file content (75 lines) | stat: -rw-r--r-- 2,366 bytes parent folder | download | duplicates (4)
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
#!perl

use 5.010;
use strict;
use warnings;
use Test::More 0.96;
use Test::Exception;

use Perinci::Object;

my $risub = risub { };

is($risub->type, "function", "type");

# ---

is($risub->v, 1.0, "1.0 v");
ok(!$risub->feature('foo'), "1.0 feature");
ok(!$risub->arg('j'), "1.0 arg");
dies_ok { $risub->feature('foo', 2) } "1.0 can't set feature";
dies_ok { $risub->arg('j', 'str')   } "1.0 can't set arg";

$risub = risub { features => {undo=>1}, args => {i=>'int'} };
is($risub->feature('undo'), 1, "1.0 feature (2)");
is($risub->arg('i'), 'int', "1.0 arg (2)");

# ---

$risub = risub { v=>1.1 };

is($risub->v, 1.1, "1.1 v");

ok(!$risub->feature('foo'), "1.1 feature");
ok(!$risub->arg('j'), "1.1 arg");
ok(!$risub->feature('foo', 2), "1.1 feature, set returns old value");
is($risub->feature('foo'), 2, "1.1 feature, set");
ok(!$risub->arg('j', {schema=>'str'}), '1.1 arg, set returns old value');
is_deeply($risub->arg('j'), {schema=>'str'}, "1.1 arg, set")
     or diag explain $risub->arg('j');
is_deeply($risub->as_struct,
          {v=>1.1, features=>{foo=>2}, args=>{j=>{schema=>'str'}}},
          "1.1 as_struct") or diag explain $risub->as_struct;

$risub = risub { v=>1.1, features => {undo=>1}, args => {i=>{schema=>'int'}} };
is($risub->feature('undo'), 1, "1.1 feature (2)");
is_deeply($risub->arg('i'), {schema=>'int'}, "1.1 arg (2)");

subtest "features" => sub {
    $risub = risub { v=>1.1 };
    is_deeply($risub->features, {}, "empty");
    $risub = risub { v=>1.1, features => {undo=>1} };
    is_deeply($risub->features, {undo=>1}, "empty");
};

subtest "can_dry_run" => sub {
    $risub = risub { v=>1.1, features => {dry_run=>1}};
    ok($risub->can_dry_run, "from dry_run feature");
    $risub = risub { v=>1.1, features => {tx=>{v=>2}}};
    ok($risub->can_dry_run, "from tx feature");
};

subtest "default_dry_run" => sub {
    $risub = risub { v=>1.1, features => {dry_run=>0}};
    ok(!$risub->default_dry_run, "dry_run=0 -> no");
    $risub = risub { v=>1.1, features => {dry_run=>1}};
    ok(!$risub->default_dry_run, "dry_run=1 -> no");
    $risub = risub { v=>1.1, features => {dry_run=>{default=>0}}};
    ok(!$risub->default_dry_run, "dry_run={default=>0} -> no");
    $risub = risub { v=>1.1, features => {dry_run=>{default=>1}}};
    ok( $risub->default_dry_run, "dry_run={default=>1} -> yes");
};

# ---

done_testing();