X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F02_hash.t;h=0bd49a7f23f7027052de0ce0b1c739856bf845f8;hb=56fef624741395b3db3fbd62d4fa2f2aaec590de;hp=041e255c3985c3e24c7f707e4184c1ca43e3b36f;hpb=6fe26b290e2f3dd554295dbe5df741a3266bb6f0;p=dbsrgits%2FDBM-Deep.git diff --git a/t/02_hash.t b/t/02_hash.t index 041e255..0bd49a7 100644 --- a/t/02_hash.t +++ b/t/02_hash.t @@ -2,16 +2,14 @@ # DBM::Deep Test ## use strict; -use Test::More tests => 29; +use Test::More tests => 38; use Test::Exception; +use t::common qw( new_fh ); use_ok( 'DBM::Deep' ); -unlink "t/test.db"; -my $db = DBM::Deep->new( "t/test.db" ); -if ($db->error()) { - die "ERROR: " . $db->error(); -} +my ($fh, $filename) = new_fh(); +my $db = DBM::Deep->new( $filename ); ## # put/get key @@ -20,7 +18,6 @@ $db->{key1} = "value1"; is( $db->get("key1"), "value1", "get() works with hash assignment" ); is( $db->fetch("key1"), "value1", "... fetch() works with hash assignment" ); is( $db->{key1}, "value1", "... and hash-access also works" ); - $db->put("key2", undef); is( $db->get("key2"), undef, "get() works with put()" ); is( $db->fetch("key2"), undef, "... fetch() works with put()" ); @@ -34,9 +31,19 @@ is( $db->{key3}, 'value3', "... and hash-access also works" ); ok( $db->exists("key1"), "exists() function works" ); ok( exists $db->{key2}, "exists() works against tied hash" ); +ok( !exists $db->{key4}, "exists() function works for keys that aren't there" ); +is( $db->{key4}, undef, "Autovivified key4" ); +TODO: { + local $TODO = "Autovivification isn't correct yet"; + ok( exists $db->{key4}, "Autovivified key4 now exists" ); +} +delete $db->{key4}; +ok( !exists $db->{key4}, "And key4 doesn't exists anymore" ); + ## # count keys ## + is( scalar keys %$db, 3, "keys() works against tied hash" ); ## @@ -44,7 +51,7 @@ is( scalar keys %$db, 3, "keys() works against tied hash" ); ## my $temphash = {}; while ( my ($key, $value) = each %$db ) { - $temphash->{$key} = $value; + $temphash->{$key} = $value; } is( $temphash->{key1}, 'value1', "First key copied successfully using tied interface" ); @@ -54,8 +61,8 @@ is( $temphash->{key3}, 'value3', "Third key copied successfully" ); $temphash = {}; my $key = $db->first_key(); while ($key) { - $temphash->{$key} = $db->get($key); - $key = $db->next_key($key); + $temphash->{$key} = $db->get($key); + $key = $db->next_key($key); } is( $temphash->{key1}, 'value1', "First key copied successfully using OO interface" ); @@ -65,11 +72,11 @@ is( $temphash->{key3}, 'value3', "Third key copied successfully" ); ## # delete keys ## -TODO: { - local $TODO = "Delete should return the deleted value"; - is( delete $db->{key1}, 'value1', "delete through tied inteface works" ); - is( $db->delete("key2"), undef, "delete through OO inteface works" ); -} +is( delete $db->{key2}, undef, "delete through tied inteface works" ); +is( $db->delete("key1"), 'value1', "delete through OO inteface works" ); +is( $db->{key3}, 'value3', "The other key is still there" ); +ok( !exists $db->{key1}, "key1 doesn't exist" ); +ok( !exists $db->{key2}, "key2 doesn't exist" ); is( scalar keys %$db, 1, "After deleting two keys, 1 remains" ); @@ -97,10 +104,7 @@ is( $db->get("key1"), "value222222222222222222222222", "We set a value before cl # Make sure DB still works after closing / opening ## undef $db; -$db = DBM::Deep->new( "t/test.db" ); -if ($db->error()) { - die "ERROR: " . $db->error(); -} +$db = DBM::Deep->new( $filename ); is( $db->get("key1"), "value222222222222222222222222", "The value we set is still there after closure" ); ## @@ -118,8 +122,14 @@ my $first_key = $db->first_key(); my $next_key = $db->next_key($first_key); ok( - (($first_key eq "key1") || ($first_key eq "key2")) && - (($next_key eq "key1") || ($next_key eq "key2")) && - ($first_key ne $next_key) + (($first_key eq "key1") || ($first_key eq "key2")) && + (($next_key eq "key1") || ($next_key eq "key2")) && + ($first_key ne $next_key) ,"keys() still works if you replace long values with shorter ones" ); + +# Test autovivification + +$db->{unknown}{bar} = 1; +ok( $db->{unknown} ); +cmp_ok( $db->{unknown}{bar}, '==', 1 );