7e036c63c8f4ac1c42ebe2298a01e8bd79892d58
[dbsrgits/DBM-Deep.git] / t / lib / TestSimpleHash.pm
1 package TestSimpleHash;
2
3 use 5.6.0;
4
5 use strict;
6 use warnings;
7
8 use Test::More;
9 use Test::Exception;
10
11 use base 'TestBase';
12
13 sub A_assignment : Test( 23 ) {
14     my $self = shift;
15     my $db = $self->{db};
16
17     my @keys = keys %{$self->{data}};
18
19     push @keys, $keys[0] while @keys < 3;
20
21     #die "@keys\n";
22
23     cmp_ok( keys %$db, '==', 0 );
24
25     foreach my $k ( @keys[0..2] ) {
26         ok( !exists $db->{$k} );
27         ok( !$db->exists( $k ) );
28     }
29
30     $db->{$keys[0]} = $self->{data}{$keys[0]};
31     $db->put( $keys[1] => $self->{data}{$keys[1]} );
32     $db->store( $keys[2] => $self->{data}{$keys[2]} );
33
34     foreach my $k ( @keys[0..2] ) {
35         ok( $db->exists( $k ) );
36         ok( exists $db->{$k} );
37
38         is( $db->{$k}, $self->{data}{$k} );
39         is( $db->get($k), $self->{data}{$k} );
40         is( $db->fetch($k), $self->{data}{$k} );
41     }
42
43     if ( @keys > 3 ) {
44         $db->{$_} = $self->{data}{$_} for @keys[3..$#keys];
45     }
46
47     cmp_ok( keys %$db, '==', @keys );
48 }
49
50 sub B_check_keys : Test( 1 ) {
51     my $self = shift;
52     my $db = $self->{db};
53
54     my @control = sort keys %{$self->{data}};
55     my @test1 = sort keys %$db;
56     is_deeply( \@test1, \@control );
57 }
58
59 sub C_each : Test( 1 ) {
60     my $self = shift;
61     my $db = $self->{db};
62
63     my $temp = {};
64     while ( my ($k,$v) = each %$db ) {
65         $temp->{$k} = $v;
66     }
67
68     is_deeply( $temp, $self->{data} );
69 }
70
71 sub D_firstkey : Test( 1 ) {
72     my $self = shift;
73     my $db = $self->{db};
74
75     my $temp = {};
76
77     my $key = $db->first_key;
78     while ( $key ) {
79         $temp->{$key} = $db->get( $key );
80         $key = $db->next_key( $key );
81     }
82
83     is_deeply( $temp, $self->{data} );
84 }
85
86 sub E_delete : Test( 12 ) {
87     my $self = shift;
88     my $db = $self->{db};
89
90     my @keys = keys %{$self->{data}};
91     cmp_ok( keys %$db, '==', @keys );
92
93     my $key1 = $keys[0];
94     ok( exists $db->{$key1} );
95     is( $db->{$key1}, $self->{data}{$key1} );
96     is( delete $db->{$key1}, $self->{data}{$key1} );
97     ok( !exists $db->{$key1} );
98     cmp_ok( keys %$db, '==', @keys - 1 );
99
100     my $key2 = $keys[1];
101     ok( exists $db->{$key2} );
102     is( $db->{$key2}, $self->{data}{$key2} );
103     is( $db->delete( $key2 ), $self->{data}{$key2} );
104     ok( !exists $db->{$key2} );
105     cmp_ok( keys %$db, '==', @keys - 2 );
106
107     @{$db}{ @keys[0,1] } = @{$self->{data}}{@keys[0,1]};
108
109     cmp_ok( keys %$db, '==', @keys );
110 }
111
112 sub F_clear : Test( 3 ) {
113     my $self = shift;
114     my $db = $self->{db};
115
116     my @keys = keys %{$self->{data}};
117     cmp_ok( keys %$db, '==', @keys );
118
119     %$db = ();
120
121     cmp_ok( keys %$db, '==', 0 );
122
123     %$db = %{$self->{data}};
124     cmp_ok( keys %$db, '==', @keys );
125 }
126
127 sub G_reassign_and_close : Test( 4 ) {
128     my $self = shift;
129
130     my @keys = keys %{$self->{data}};
131
132     my $key1 = $keys[0];
133
134     my $long_value = 'long value' x 100;
135     $self->{db}{$key1} = $long_value;
136     is( $self->{db}{$key1}, $long_value );
137
138     my $filename = $self->{db}->_root->{file};
139     undef $self->{db};
140
141     $self->{db} = DBM::Deep->new( $filename );
142
143     is( $self->{db}{$key1}, $long_value );
144
145     $self->{db}{$key1} = $self->{data}{$key1};
146     is( $self->{db}{$key1}, $self->{data}{$key1} );
147
148     cmp_ok( keys %{$self->{db}}, '==', @keys );
149 }
150
151 1;
152 __END__