use strict;
use warnings;
use Test::More;
use Test::Database::Driver;
# fake the databases() method
my @db;
{
no strict;
@{"Test::Database::Driver::Zlonk::ISA"} = qw( Test::Database::Driver );
*{"Test::Database::Driver::Zlonk::databases"} = sub {@db};
}
# our test plans
my @names = ( 0, 1, 3, 2, 4 );
my @expected = ( 0, 1, 2, 2, 4, 5 );
plan tests => 4 + @expected;
# check the basename
like( Test::Database::Driver::Zlonk->_basename(),
qr/^tdd_zlonk_\w+_$/, "_basename looks correct" );
# test _set_key
my $bad = 'a b c';
ok( !eval { Test::Database::Driver->_set_key($bad); 1 }, "Bad key: $bad" );
like( $@, qr/^Invalid format for key '$bad' at/, 'Expected error message' );
# set a correct key
Test::Database::Driver->_set_key('clunk');
like( Test::Database::Driver::Zlonk->_basename(),
qr/^tdd_zlonk_\w+_clunk_$/, "_basename looks correct (with key)" );
# now correctly compute our expectations
my $dbname = Test::Database::Driver::Zlonk->_basename();
@names = map {"$dbname$_"} @names;
@expected = map {"$dbname$_"} @expected;
for my $expected (@expected) {
is( Test::Database::Driver::Zlonk->available_dbname(),
$expected, "available_dbname() = $expected" );
push @db, shift @names;
}