Codebase list libparams-validate-perl / d250e0c
Add test for memory leak Dave Rolsky 9 years ago
1 changed file(s) with 91 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
0 use strict;
1 use warnings;
2
3 use Test::LeakTrace qw( no_leaks_ok );
4 use Test::More;
5
6 use Params::Validate qw( validate );
7
8 subtest(
9 'callback with default error' => sub {
10 no_leaks_ok( sub { val1( foo => 42 ); }, 'validation passes' );
11 local $TODO = 'Not sure if all the leaks are in Carp or not';
12 no_leaks_ok(
13 sub {
14 eval { val1( foo => 'forty two' ) };
15 },
16 'validation fails'
17 );
18 },
19 );
20
21 subtest(
22 'callback that dies with string' => sub {
23 no_leaks_ok( sub { val2( foo => 42 ); }, 'validation passes' );
24 local $TODO = 'Not sure if all the leaks are in Carp or not';
25 no_leaks_ok(
26 sub {
27 eval { val2( foo => 'forty two' ) };
28 },
29 'validation fails'
30 );
31 },
32 );
33
34 subtest(
35 'callback that dies with object' => sub {
36 no_leaks_ok( sub { val3( foo => 42 ); }, 'validation passes' );
37 no_leaks_ok(
38 sub {
39 eval { val3( foo => 'forty two' ) };
40 },
41 'validation fails'
42 );
43 },
44 );
45
46 done_testing();
47
48 sub val1 {
49 validate(
50 @_,
51 {
52 foo => {
53 callbacks => {
54 'is int' => sub { $_[0] =~ /^[0-9]+$/ }
55 }
56 },
57 },
58 );
59 }
60
61 sub val2 {
62 validate(
63 @_,
64 {
65 foo => {
66 callbacks => {
67 'is int' => sub {
68 $_[0] =~ /^[0-9]+$/ or die "$_[0] is not an integer";
69 }
70 }
71 },
72 },
73 );
74 }
75
76 sub val3 {
77 validate(
78 @_,
79 {
80 foo => {
81 callbacks => {
82 'is int' => sub {
83 $_[0] =~ /^[0-9]+$/
84 or die { error => "$_[0] is not an integer" };
85 }
86 }
87 },
88 },
89 );
90 }