# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
######################### We start with some black magic to print on failure.
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
BEGIN { $| = 1; print "1..25\n"; }
END {print "not ok 1\n" unless $loaded;}
use Text::FillIn;
$loaded = 1;
&report(1);
######################### End of black magic.
# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):
sub report {
$TEST_NUM++;
print ( $_[0] ? "ok $TEST_NUM\n" : "not ok $TEST_NUM\n" );
}
# The variables for interpolation
$TVars{'var'} = 'text';
$TVars{'nestedtext'} = 'coconuts';
$TVars{'more_var'} = 'donuts';
$TVars{'var2'} = 'nested';
$TVars{'text\\]]'} = 'garbage';
# 2,3
&test_both('some [[$var]] and so on' => 'some text and so on');
# 4,5
&test_both('some [[ $nested[[$var]] ]] flambe' => 'some coconuts flambe');
# 6,7
&test_both('[[$var]]' => 'text');
# 8,9
&test_both('[[ $var ]]' => 'text');
# 10,11
&test_both('an example of [[$var]] and [[$more_var]] together' =>
'an example of text and donuts together');
# 12,13
&test_both('some [[$[[$var2]][[$var]]]] and some \\[[ text \\]]' =>
'some coconuts and some [[ text ]]');
# 14,15
&test_both('some [[$[[$var2]][[$var]]]] and some [[ $text\\]] ]]' =>
'some coconuts and some garbage');
# 16,17
&test_both('some [[&func1()]]?' => 'some snails?');
# 18,19
&test_both('some [[&func2(star,studded)]] SNAILS?' => 'some STAR*STUDDED SNAILS?');
# 20,21
&test_both('Pi is about [[&add_numbers(3,.1,.04,.001,.0006)]]' => 'Pi is about 3.1416');
# 22,23,24
{
my $t = new Text::FillIn('some [[$var} unbalanced');
$t->Rdelim('}');
&should_equal($t->interpret(), 'some text unbalanced');
$t = new Text::FillIn('some {$var]] unbalanced');
$t->Ldelim('{');
&should_equal($t->interpret(), 'some text unbalanced');
Text::FillIn->Ldelim('(');
$t = new Text::FillIn('some ($var]] unbalanced');
&should_equal($t->interpret(), 'some text unbalanced');
Text::FillIn->Ldelim('[[');
Text::FillIn->Rdelim(']]');
}
# 25
{
my $obj = bless {thing=>5}, 'MyPack';
sub MyPack::find_value { my $s = shift; $s->{shift()} }
my $t = new Text::FillIn('some [[$thing]] is 5');
$t->object($obj);
&should_equal($t->interpret(), 'some 5 is 5');
}
###################################################################
sub test_both {
&test_interpret(@_);
&test_print(@_);
}
sub test_interpret {
my ($raw_text, $cooked_text) = @_;
my $result = Text::FillIn->new($raw_text)->interpret();
&should_equal($result, $cooked_text);
}
sub test_print {
my $debug = 0;
my ($raw_text, $cooked_text) = @_;
my $template = new Text::FillIn($raw_text);
my $file = 'output_test';
open (TEMP, ">$file") or die "Couldn't create $file: $!";
my $prev_select = select TEMP;
$template->interpret_and_print();
close TEMP;
select $prev_select;
my $result = `cat $file`;
unlink $file or die $!;
&should_equal($result, $cooked_text);
}
sub should_equal {
my ($one, $two) = @_;
&report($one eq $two);
if ($one ne $two and $ENV{TEST_VERBOSE}) {
print STDERR "$one =/= $two\n";
}
}
sub TExport::func1 {
return "snails";
}
sub TExport::func2 {
return join '*', map {uc} @_;
}
sub TExport::add_numbers {
my $result;
foreach (@_) {
$result += $_;
}
return $result;
}