Add test for memory leak
Dave Rolsky
9 years ago
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 | } |