First pass at cleanup
[dbsrgits/DBM-Deep.git] / t / lib / TestBase.pm
1 package TestBase;
2
3 use 5.6.0;
4
5 use strict;
6 use warnings;
7
8 use Fcntl qw( :flock );
9 use File::Path ();
10 use File::Temp ();
11 use Scalar::Util ();
12
13 use base 'Test::Class';
14
15 use DBM::Deep;
16
17 sub setup_db : Test(startup) {
18     my $self = shift;
19
20     my $data = ($self->{data} ||= {});
21
22     my $r = Scalar::Util::reftype( $data );
23     my $type = $r eq 'HASH' ? DBM::Deep->TYPE_HASH : DBM::Deep->TYPE_ARRAY;
24
25     $self->{db} = DBM::Deep->new({
26         file => $self->new_file,
27         type => $type,
28     });
29
30     return;
31 }
32
33 sub setup_dir : Test(startup) {
34     my $self = shift;
35
36     $self->{workdir} ||= File::Temp::tempdir();
37
38     return;
39 }
40
41 sub new_file {
42     my $self = shift;
43
44     $self->setup_dir;
45
46     my ($fh, $filename) = File::Temp::tempfile(
47         'tmpXXXX', DIR => $self->{workdir}, CLEANUP => 1,
48     );
49     flock( $fh, LOCK_UN );
50
51     return $filename;
52 }
53
54 sub remove_dir : Test(shutdown) {
55     my $self = shift;
56
57     File::Path::rmtree( $self->{workdir} );
58
59     return;
60 }
61
62 1;
63 __END__