5 # This is here because Tie::File is STOOPID.
13 filename => $filename,
21 open( my $fh, $self->{filename} );
31 open( my $fh, $self->{filename} );
41 use Test::More tests => 24;
43 use_ok( 'DBM::Deep' );
45 my $audit_file = 't/audit.txt';
51 tie @audit, 'My::Tie::File', $audit_file;
53 my $db = DBM::Deep->new({
56 audit_file => $audit_file,
58 isa_ok( $db, 'DBM::Deep' );
61 $audit[0], qr/^\# Database created on/,
62 "Audit file header written to",
66 like( $audit[1], qr{^\$db->{foo} = 'bar';}, "Basic assignment correct" );
69 like( $audit[2], qr{^\$db->{foo} = 'baz';}, "Basic update correct" );
71 $db->{bar} = { a => 1 };
72 like( $audit[3], qr{\$db->\{bar\} = \{\};}, "Hash assignment correct" );
73 like( $audit[4], qr{\$db->\{bar\}\{a\} = '1';}, "... child 1 good" );
75 $db->{baz} = [ 1 .. 2 ];
76 like( $audit[5], qr{\$db->{baz} = \[\];}, "Array assignment correct" );
77 like( $audit[6], qr{\$db->{baz}\[0\] = '1';}, "... child 1 good" );
78 like( $audit[7], qr{\$db->{baz}\[1\] = '2';}, "... child 2 good" );
83 like( $audit[8], qr{\$db->{baz}\[5\] = \[\];}, "Child array assignment correct" );
84 like( $audit[9], qr{\$db->{baz}\[5\]\[0\] = '3';}, "... child 1 good" );
85 like( $audit[10], qr{\$db->{baz}\[5]\[1] = '4';}, "... child 2 good" );
86 like( $audit[11], qr{\$db->{baz}\[5]\[2] = '5';}, "... child 3 good" );
91 $db = DBM::Deep->new({
93 audit_file => $audit_file,
97 like( $audit[12], qr{\$db->{new} = '9';}, "Writing after closing the file works" );
99 my $export = $db->export;
104 my $db = DBM::Deep->new({
105 file => 't/test2.db',
112 my $export2 = $db->export;
114 is_deeply( $export2, $export, "And recovery works" );
118 $db = DBM::Deep->new({
120 audit_file => $audit_file,
124 like( $audit[13], qr{delete \$db->{baz};}, "Deleting works" );
126 $export = $db->export;
131 my $db = DBM::Deep->new({
132 file => 't/test2.db',
139 my $export2 = $db->export;
141 is_deeply( $export2, $export, "And recovery works" );
145 $db = DBM::Deep->new({
147 audit_file => $audit_file,
151 like( $audit[14], qr{\$db->{bar} = \{\};}, "Clearing works" );
153 $export = $db->export;
158 my $db = DBM::Deep->new({
159 file => 't/test2.db',
166 my $export2 = $db->export;
168 is_deeply( $export2, $export, "And recovery works" );
172 $db = DBM::Deep->new({
174 audit_file => $audit_file,
177 $db->{blessed} = bless { a => 5, b => 3 }, 'Floober';
178 like( $audit[15], qr{\$db->{blessed} = bless {}, 'Floober';},
179 "Assignment of a blessed reference works" );
180 like( $audit[16], qr{\$db->{blessed}{a} = '5';}, "... child 1" );
181 like( $audit[17], qr{\$db->{blessed}{b} = '3';}, "... child 2" );
183 $export = $db->export;
188 my $db = DBM::Deep->new({
189 file => 't/test2.db',
196 my $export2 = $db->export;
198 is_deeply( $export2, $export, "And recovery works" );