Added unflocks to all tests so that the tests run on OSX
[dbsrgits/DBM-Deep.git] / t / 06_error.t
1 ##
2 # DBM::Deep Test
3 ##
4 $|++;
5 use strict;
6 use Test::More tests => 6;
7 use Test::Exception;
8 use File::Temp qw( tempfile tempdir );
9 use Fcntl qw( :flock );
10
11 use_ok( 'DBM::Deep' );
12
13 my $dir = tempdir( CLEANUP => 1 );
14 my ($fh, $filename) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir );
15 flock $fh, LOCK_UN;
16
17 ##
18 # test a corrupted file
19 ##
20 open FH, ">$filename";
21 print FH 'DPDB';
22 close FH;
23 throws_ok {
24     DBM::Deep->new( $filename );
25 } qr/DBM::Deep: Corrupted file, no master index record/, "Fail if there's no master index record";
26
27 {
28     my ($fh, $filename) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir );
29     flock $fh, LOCK_UN;
30     my %hash;
31     tie %hash, 'DBM::Deep', $filename;
32     undef %hash;
33
34     my @array;
35     throws_ok {
36         tie @array, 'DBM::Deep', $filename;
37     } qr/DBM::Deep: File type mismatch/, "Fail if we try and tie a hash file with an array";
38
39     throws_ok {
40         DBM::Deep->new( file => $filename, type => DBM::Deep->TYPE_ARRAY )
41     } qr/DBM::Deep: File type mismatch/, "Fail if we try and open a hash file with an array";
42 }
43
44 {
45     my ($fh, $filename) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir );
46     flock $fh, LOCK_UN;
47     my @array;
48     tie @array, 'DBM::Deep', $filename;
49     undef @array;
50
51     my %hash;
52     throws_ok {
53         tie %hash, 'DBM::Deep', $filename;
54     } qr/DBM::Deep: File type mismatch/, "Fail if we try and tie an array file with a hash";
55
56     throws_ok {
57         DBM::Deep->new( file => $filename, type => DBM::Deep->TYPE_HASH )
58     } qr/DBM::Deep: File type mismatch/, "Fail if we try and open an array file with a hash";
59 }