4 use warnings FATAL => 'all';
11 use_ok( 'DBM::Deep' );
14 DBM::Deep->new({ _test => 1 });
15 } qr/lock_exclusive must be implemented in a child class/, 'Must define lock_exclusive in Storage';
19 *{"DBM::Deep::Storage::Test::lock_exclusive"} = sub { 1 };
23 DBM::Deep->new({ _test => 1 });
24 } qr/setup must be implemented in a child class/, 'Must define setup in Engine';
28 *{"DBM::Deep::Engine::Test::setup"} = sub { 1 };
32 DBM::Deep->new({ _test => 1 });
33 } qr/unlock must be implemented in a child class/, 'Must define unlock in Storage';
37 *{"DBM::Deep::Storage::Test::unlock"} = sub { 1 };
41 DBM::Deep->new({ _test => 1 });
42 } qr/flush must be implemented in a child class/, 'Must define flush in Storage';
46 *{"DBM::Deep::Storage::Test::flush"} = sub { 1 };
51 $db = DBM::Deep->new({ _test => 1 });
52 } "We finally have enough defined to instantiate";
56 } qr/lock_shared must be implemented in a child class/, 'Must define lock_shared in Storage';
60 *{"DBM::Deep::Storage::Test::lock_shared"} = sub { 1 };
65 } 'We have lock_shared defined';
67 # Yes, this is ordered for good reason. Think about it.
70 Engine => 'begin_work',
82 Storage => 'is_writable',
83 Engine => 'write_value',
86 Engine => 'read_value',
89 Engine => 'delete_key',
92 Engine => 'key_exists',
94 # Why is this one's error message bleeding through?
103 # If only I could use natatime(). *sighs*
105 my ($entry, $requirements) = splice @methods, 0, 2;
106 if ( $entry eq 'clear' ) {
107 diag "Please ignore the spurious die for clear. I can't figure out how to prevent it"
109 while ( @$requirements ) {
110 my ($class, $child_method) = splice @$requirements, 0, 2;
114 } qr/$child_method must be implemented in a child class/,
115 "'$entry' requires '$child_method' to be defined in the '$class'";
119 *{"DBM::Deep::${class}::Test::${child_method}"} = sub { 1 };
125 } "Finally have enough for '$entry' to work";
129 $db->_engine->sector_type;
130 } qr/sector_type must be implemented in a child class/, 'Must define sector_type in Storage';
134 *{"DBM::Deep::Engine::Test::sector_type"} = sub { 'DBM::Deep::Iterator::Test' };
138 $db->_engine->sector_type;
139 } 'We have sector_type defined';
143 } qr/iterator_class must be implemented in a child class/, 'Must define iterator_class in Iterator';
147 *{"DBM::Deep::Engine::Test::iterator_class"} = sub { 'DBM::Deep::Iterator::Test' };
152 } qr/reset must be implemented in a child class/, 'Must define reset in Iterator';
156 *{"DBM::Deep::Iterator::Test::reset"} = sub { 1 };
161 } qr/get_next_key must be implemented in a child class/, 'Must define get_next_key in Iterator';
165 *{"DBM::Deep::Iterator::Test::get_next_key"} = sub { 1 };
170 } 'Finally have enough for first_key to work.';