1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
#!/usr/bin/perl -w
use strict;
use lib 't/lib';
use vars qw( $class $subclass );
use Test::More tests => 39;
# ------------------------------------------------------------------------
BEGIN {
$class = 'Data::Phrasebook';
use_ok $class;
$subclass = 'MyPhrasebook';
use_ok $subclass;
}
my $file = 't/01phrases.txt';
my $file2 = 't/01phrases2.txt';
# ------------------------------------------------------------------------
{
my $obj = $class->new;
isa_ok( $obj => "${class}::Plain", 'Class new' );
$obj->file( $file );
is( $obj->file() => $file , 'Set/get file works');
$obj->file( $file2 );
is( $obj->file() => $file2 , 'Reset/get file works');
}
{
my $obj = $subclass->new;
isa_ok( $obj => "${class}::Plain", 'Subclass new' );
$obj->file( $file );
is( $obj->file() => $file , 'Set/get file works');
}
{
my $obj = $subclass->new( class => 'MyClass' );
isa_ok( $obj => "MyClass", 'Subbed subclass new' );
$obj->file( $file );
is( $obj->file() => $file , 'Set/get file works');
}
{
my $obj;
eval { $obj = $subclass->new( class => 'BadClass' ); };
is( $obj, undef, 'Nonexistent subbed subclass new' );
}
{
my $obj = $class->new( file => $file );
isa_ok( $obj => "${class}::Plain", 'New with file' );
is( $obj->file() => $file , 'Get file works');
{
$obj->delimiters( qr{ \[% \s+ (\w+) \s+ %\] }x );
my $str = $obj->fetch( 'foo', {
my => "Iain's",
place => 'locale',
});
is ($str, "Welcome to Iain's world. It is a nice locale.",
'Fetch matches' );
}
{
$obj->delimiters( qr{ :(\w+) }x );
my $str = $obj->fetch( 'bar', {
my => "Bob's",
place => 'whatever',
});
is ($str, "Welcome to Bob's world. It is a nice whatever.",
'Fetch matches' );
}
}
{
my $obj = $class->new;
$obj->file( $file );
is( $obj->file() => $file , 'Set/get file works');
my $str = $obj->fetch( 'baz' );
is($str, 'This is File 1');
$obj->file( $file2 );
is( $obj->file() => $file2 , 'Set/get file works');
$str = $obj->fetch( 'baz' );
is($str, 'This is File 2');
$obj->file( $file );
eval { $str = $obj->fetch( 'bar' ); };
like($@, qr/No value/);
eval { $str = $obj->fetch( 'notfound' ); };
like($@, qr/No mapping/);
}
{
eval { my $obj = $class->new(class => 'Plain', loader => 'Bogus' ); $obj->fetch( 'bar' ); };
like($@, qr/no loader available of that name/);
}
{
BEGIN { use_ok 'Data::Phrasebook::Loader'; }
my $obj = Data::Phrasebook::Loader->new();
isa_ok( $obj => "${class}::Loader::Text", 'Loader new' );
is( $obj->class, 'Text', 'default loader = Text' );
}
{
BEGIN { use_ok 'Data::Phrasebook::Loader::Fake'; }
BEGIN { use_ok 'Data::Phrasebook::Loader'; }
my $fake = Data::Phrasebook::Loader::Fake->new();
isa_ok( $fake => "${class}::Loader::Fake", 'new Fake Loader' );
is( $fake->class, 'Fake', 'pretend loader = Fake' );
is( $fake->load, undef, 'Fake - failed to load' );
is( $fake->get, undef, 'Fake - failed to get' );
is_deeply( [$fake->dicts], [], 'Fake - no dictionaries' );
is_deeply( [$fake->keywords], [], 'Fake - no keywords' );
my $obj = $subclass->new;
is( $obj->loader, 'Text', 'empty loader => Text' );
is( $obj->loaded(), undef, 'nothing loaded' );
is( $obj->loaded($fake), $fake, 'Fake loaded' );
is( $obj->loader, 'Fake', 'Fake loader' );
$obj = $subclass->new;
is( $obj->loaded(), undef, 'nothing loaded' );
is( $obj->loaded($fake), $fake, 'Fake loaded' );
is( $obj->loader, 'Fake', 'Fake loader' );
}
|