SPOPS/t/20_gdbm.t
# -*-perl-*-
# $Id: 20_gdbm.t,v 3.0 2002/08/28 01:16:32 lachoy Exp $
use strict;
use constant GDBM_FILE => 'test.gdbm';
use constant NUM_TESTS => 17;
END {
cleanup();
}
sub cleanup { unlink GDBM_FILE if ( -f GDBM_FILE ) }
sub new_object {
eval { GDBMTest->new({ name => 'MyProject',
version => 1.14,
url => 'http://www.cwinters.com/',
author => 'La Choy (lachoy@cwinters.com)' }) };
}
{
# Check to see if GDBM_File is installed
eval { require GDBM_File };
if ( $@ ) {
print "1..0\n";
print "Skipping test on this platform\n";
exit;
}
require Test::More;
Test::More->import( tests => NUM_TESTS );
# Same with SPOPS::Initialize
require_ok( 'SPOPS::Initialize' );
my $spops_config = {
tester => {
class => 'GDBMTest',
isa => [ 'SPOPS::GDBM' ],
field => [ qw/ name version author url / ],
create_id => sub { return join '-', $_[0]->{name}, $_[0]->{version} },
gdbm_info => { filename => GDBM_FILE },
},
};
# Initialize class
my $class_init_list = eval { SPOPS::Initialize->process({ config => $spops_config }) };
ok( ! $@, "Initialize process run $@" );
is( $class_init_list->[0], 'GDBMTest', 'Initialize class' );
# Time for a test drive
{
# Make sure we can at least create an object
my $obj = new_object;
ok( ! $@, "Create object" );
# Make sure GDBM_WRCREAT really creates a new file
cleanup();
$obj = new_object;
eval { $obj->save({ perm => 'create' }) };
ok( ! $@, 'Object saved (create permission)' );
ok( -w GDBM_FILE, 'File created (create permission)' );
# Make sure GDBM_WRITE gets changed to GDBM_WRCREAT if the file doesn't exist
cleanup();
$obj = new_object;
eval { $obj->save({ perm => 'write' }) };
ok( ! $@, 'Object saved (write permission)' );
ok( -w GDBM_FILE, 'File created (write permission)' );
# See if it does the Right Thing on its own
cleanup();
$obj = new_object;
eval { $obj->save };
ok( ! $@, 'Object saved (no permission)' );
ok( -w GDBM_FILE, 'File created (no permission)' );
}
# Fetch an object, then clone it and save it (no cleanup from previous
{
my $obj = eval { GDBMTest->fetch( 'MyProject-1.14' ) };
ok( ! $@, 'Fetch object' );
is( $obj->{name}, 'MyProject', 'Fetch object (content check)' );
my $new_obj = eval { $obj->clone({ name => 'YourProject', version => 1.02 }) };
ok( ! $@, 'Clone object' );
isnt( $new_obj->{name}, $obj->{name}, 'Clone object (override content)' );
eval { $new_obj->save };
ok( ! $@, 'Save object' );
}
# Fetch the two objects in the db and be sure we got them all
{
my $obj_list = eval { GDBMTest->fetch_group };
ok( ! $@, 'Fetch group' );
is( scalar @{ $obj_list }, 2, 'Fetch group (number check)' );
}
}