#!perl -w
use strict;
use warnings;
use Test::More;
use File::Path qw(rmtree);
use File::Basename;
use constant CACHE_DIR => basename(__FILE__);
BEGIN { rmtree(CACHE_DIR) }
END { rmtree(CACHE_DIR) }
use Text::Xslate;
my $compile_called = 0;
{
package MyEngine;
our @ISA = qw(Text::Xslate);
sub compile {
my($self, @args) = @_;
::note 'compile!';
$compile_called++;
return $self->SUPER::compile(@args);
}
}
my $phase = 0;
foreach my $i(0, 1) {
my %vpath = (
hello => 'hello#' . $i,
);
my $tx = MyEngine->new(
cache_dir => CACHE_DIR,
path => [\%vpath],
);
foreach my $j(0, 1) {
note "# $i-$j";
is $tx->render('hello'), 'hello#' . $i;
if($phase == 0) {
is $compile_called, 1, 'compiling at first time';
}
elsif($phase == 1) {
is $compile_called, 1, 'using cache, not compiled';
}
elsif($phase == 2) {
is $compile_called, 2, 're-compiled because %vpath changed';
}
elsif($phase == 3) {
is $compile_called, 2, 'using cache';
}
else {
fail 'something failed';
}
$phase++;
}
}
done_testing;