6 sub export { 'export' };
10 use Test::More tests => 64;
11 use File::Temp qw( tempfile tempdir );
13 use_ok( 'DBM::Deep' );
15 my $dir = tempdir( CLEANUP => 1 );
16 my ($fh, $filename) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir );
18 my $db = DBM::Deep->new(
28 $db->{blessed} = $obj;
29 is( $db->{blessed}{a}, 1 );
30 is( $db->{blessed}{b}[0], 1 );
31 is( $db->{blessed}{b}[1], 2 );
32 is( $db->{blessed}{b}[2], 3 );
38 $db->{blessed2} = $obj2;
40 is( $db->{blessed2}[0]{a}, 'foo' );
41 is( $db->{blessed2}[1], '2' );
43 $db->{unblessed} = {};
44 $db->{unblessed}{a} = 1;
45 $db->{unblessed}{b} = [];
46 $db->{unblessed}{b}[0] = 1;
47 $db->{unblessed}{b}[1] = 2;
48 $db->{unblessed}{b}[2] = 3;
50 is( $db->{unblessed}{a}, 1 );
51 is( $db->{unblessed}{b}[0], 1 );
52 is( $db->{unblessed}{b}[1], 2 );
53 is( $db->{unblessed}{b}[2], 3 );
57 my $db = DBM::Deep->new(
62 my $obj = $db->{blessed};
63 isa_ok( $obj, 'Foo' );
64 can_ok( $obj, 'export', 'foo' );
65 ok( !$obj->can( 'STORE' ), "... but it cannot 'STORE'" );
68 is( $obj->{b}[0], 1 );
69 is( $obj->{b}[1], 2 );
70 is( $obj->{b}[2], 3 );
72 my $obj2 = $db->{blessed2};
73 isa_ok( $obj, 'Foo' );
74 can_ok( $obj, 'export', 'foo' );
75 ok( !$obj->can( 'STORE' ), "... but it cannot 'STORE'" );
77 is( $obj2->[0]{a}, 'foo' );
78 is( $obj2->[1], '2' );
80 is( $db->{unblessed}{a}, 1 );
81 is( $db->{unblessed}{b}[0], 1 );
82 is( $db->{unblessed}{b}[1], 2 );
83 is( $db->{unblessed}{b}[2], 3 );
86 is( $db->{blessed}{c}, 'new' );
90 my $db = DBM::Deep->new(
94 is( $db->{blessed}{c}, 'new' );
96 my $structure = $db->export();
98 my $obj = $structure->{blessed};
99 isa_ok( $obj, 'Foo' );
100 can_ok( $obj, 'export', 'foo' );
101 ok( !$obj->can( 'STORE' ), "... but it cannot 'STORE'" );
104 is( $obj->{b}[0], 1 );
105 is( $obj->{b}[1], 2 );
106 is( $obj->{b}[2], 3 );
108 my $obj2 = $structure->{blessed2};
109 isa_ok( $obj, 'Foo' );
110 can_ok( $obj, 'export', 'foo' );
111 ok( !$obj->can( 'STORE' ), "... but it cannot 'STORE'" );
113 is( $obj2->[0]{a}, 'foo' );
114 is( $obj2->[1], '2' );
116 is( $structure->{unblessed}{a}, 1 );
117 is( $structure->{unblessed}{b}[0], 1 );
118 is( $structure->{unblessed}{b}[1], 2 );
119 is( $structure->{unblessed}{b}[2], 3 );
123 my $db = DBM::Deep->new(
127 my $obj = $db->{blessed};
128 isa_ok( $obj, 'DBM::Deep' );
129 can_ok( $obj, 'export', 'STORE' );
130 ok( !$obj->can( 'foo' ), "... but it cannot 'foo'" );
133 is( $obj->{b}[0], 1 );
134 is( $obj->{b}[1], 2 );
135 is( $obj->{b}[2], 3 );
137 my $obj2 = $db->{blessed2};
138 isa_ok( $obj2, 'DBM::Deep' );
139 can_ok( $obj2, 'export', 'STORE' );
140 ok( !$obj2->can( 'foo' ), "... but it cannot 'foo'" );
142 is( $obj2->[0]{a}, 'foo' );
143 is( $obj2->[1], '2' );
145 is( $db->{unblessed}{a}, 1 );
146 is( $db->{unblessed}{b}[0], 1 );
147 is( $db->{unblessed}{b}[1], 2 );
148 is( $db->{unblessed}{b}[2], 3 );
151 my ($fh2, $filename2) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir );
153 my $db = DBM::Deep->new(
162 $db->import( { blessed => $obj } );
166 my $db = DBM::Deep->new(
171 my $blessed = $db->{blessed};
172 isa_ok( $blessed, 'Foo' );
173 is( $blessed->{a}, 1 );
178 # test blessing hash into short named class (Foo), then re-blessing into
179 # longer named class (FooFoo) and replacing key in db file, then validating
180 # content after that point in file to check for corruption.
182 my ($fh3, $filename3) = tempfile( 'tmpXXXX', UNLINK => 1, DIR => $dir );
183 my $db = DBM::Deep->new(
188 my $obj = bless {}, 'Foo';
190 $db->{blessed} = $obj;
191 $db->{after} = "hello";
193 my $obj2 = bless {}, 'FooFoo';
195 $db->{blessed} = $obj2;
197 is( $db->{after}, "hello" );