X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F27_filehandle.t;h=7ae1a52f7d5575160e13f268271ae5a7a3a979a3;hb=b9b85d473bba31fe1f875563f9076853dc256dca;hp=dfb988ead5f58ce155eb3d9c2ebd069e6393981a;hpb=e06824f82b4edc6b50a46a7936fad78a9515a907;p=dbsrgits%2FDBM-Deep.git diff --git a/t/27_filehandle.t b/t/27_filehandle.t index dfb988e..7ae1a52 100644 --- a/t/27_filehandle.t +++ b/t/27_filehandle.t @@ -2,65 +2,101 @@ # DBM::Deep Test ## use strict; -use Test::More tests => 11; +use Test::More tests => 14; use Test::Exception; -use File::Temp qw( tempfile tempdir ); +use t::common qw( new_fh ); use_ok( 'DBM::Deep' ); -my $dir = tempdir( CLEANUP => 1 ); -my ($fh, $filename) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir ); - -# Create the datafile to be used { - my $db = DBM::Deep->new( $filename ); - $db->{hash} = { foo => [ 'a' .. 'c' ] }; -} + my ($fh, $filename) = new_fh(); -{ - open(FILE, $filename) || die("Can't open '$filename' for reading: $!\n"); + # Create the datafile to be used + { + my $db = DBM::Deep->new( $filename ); + $db->{hash} = { foo => [ 'a' .. 'c' ] }; + } - my $db; + { + open(my $fh, '<', $filename) || die("Can't open '$filename' for reading: $!\n"); - # test if we can open and read a db using its filehandle + my $db; - ok(($db = DBM::Deep->new(fh => *FILE)), "open db in filehandle"); - ok($db->{hash}->{foo}->[1] eq 'b', "and get at stuff in the database"); - throws_ok { - $db->{foo} = 1; - } qr/Cannot write to a readonly filehandle/, - "Can't write to a read-only filehandle"; - ok( !$db->exists( 'foo' ), "foo doesn't exist" ); + # test if we can open and read a db using its filehandle - my $db_obj = $db->_get_self; - ok( $db_obj->_root->{inode}, "The inode has been set" ); + ok(($db = DBM::Deep->new(fh => $fh)), "open db in filehandle"); + ok($db->{hash}->{foo}->[1] eq 'b', "and get at stuff in the database"); + throws_ok { + $db->{foo} = 1; + } qr/Cannot write to a readonly filehandle/, + "Can't write to a read-only filehandle"; + ok( !$db->exists( 'foo' ), "foo doesn't exist" ); - close(FILE); + my $db_obj = $db->_get_self; + ok( $db_obj->_storage->{inode}, "The inode has been set" ); + + close($fh); + } } # now the same, but with an offset into the file. Use the database that's # embedded in the test for the DATA filehandle. First, find the database ... -open(FILE, "t/28_DATA.t") || die("Can't open t/28_DATA.t\n"); -while(my $line = ) { - last if($line =~ /^__DATA__/); -} -my $offset = tell(FILE); -close(FILE); - { - open(FILE, "t/28_DATA.t"); - - my $db; - - ok(($db = DBM::Deep->new(fh => *FILE, file_offset => $offset)), "open db in filehandle with offset"); + my ($fh,$filename) = new_fh(); - ok($db->{hash}->{foo}->[1] eq 'b', "and get at stuff in the database"); + print $fh "#!$^X\n"; + print $fh <<'__END_FH__'; +use strict; +use Test::More no_plan => 1; +Test::More->builder->no_ending(1); +Test::More->builder->{Curr_Test} = 12; - ok( !$db->exists( 'foo' ), "foo doesn't exist yet" ); - throws_ok { - $db->{foo} = 1; - } qr/Cannot write to a readonly filehandle/, "Can't write to a read-only filehandle"; - ok( !$db->exists( 'foo' ), "foo doesn't exist" ); +use_ok( 'DBM::Deep' ); - close FILE; +my $db = DBM::Deep->new({ + fh => *DATA, +}); +is($db->{x}, 'b', "and get at stuff in the database"); +__END_FH__ + print $fh "__DATA__\n"; + close $fh; + + my $offset = do { + open my $fh, '<', $filename; + while(my $line = <$fh>) { + last if($line =~ /^__DATA__/); + } + tell($fh); + }; + + { + my $db = DBM::Deep->new({ + file => $filename, + file_offset => $offset, + }); + + $db->{x} = 'b'; + is( $db->{x}, 'b', 'and it was stored' ); + } + + + { + open my $fh, '<', $filename; + my $db = DBM::Deep->new({ + fh => $fh, + file_offset => $offset, + }); + + is($db->{x}, 'b', "and get at stuff in the database"); + + ok( !$db->exists( 'foo' ), "foo doesn't exist yet" ); + throws_ok { + $db->{foo} = 1; + } qr/Cannot write to a readonly filehandle/, "Can't write to a read-only filehandle"; + ok( !$db->exists( 'foo' ), "foo still doesn't exist" ); + + is( $db->{x}, 'b' ); + } + + exec( "$^X -Iblib/lib $filename" ); }