#!perl -w use strict; use Test::More; use Text::Xslate; use FindBin qw($Bin); use t::lib::Util; use File::Copy qw(copy move); use File::Path qw(rmtree); my @files = (path."/hello.tx", path."/for.tx"); my @caches; rmtree cache_dir; my $x = path."/hello.tx"; END{ move "$x.save" => $x if $x && -f "$x.save"; rmtree cache_dir; } { my $tx = Text::Xslate->new( path => [path], cache_dir => cache_dir, ); push @caches, $tx->find_file($_)->{cachepath} for qw(hello.tx for.tx); } for(1 .. 10) { my $tx = Text::Xslate->new( path => [path], cache_dir => cache_dir, ); is $tx->render('hello.tx', { lang => 'Xslate' }), "Hello, Xslate world!\n", "file (preload)"; is $tx->render('for.tx', { books => [ { title => "Foo" }, { title => "Bar" } ]}), "[Foo]\n[Bar]\n", "file (preload)"; ok -e $_, "$_ exists" for @caches; if(($_ % 3) == 0) { my $t = time + $_; utime $t, $t, @caches; } } for(1 .. 10) { my $tx = Text::Xslate->new(path => [path], cache_dir => cache_dir); is $tx->render('hello.tx', { lang => 'Xslate' }), "Hello, Xslate world!\n", "file (on demand)"; is $tx->render('for.tx', { books => [ { title => "Foo" }, { title => "Bar" } ]}), "[Foo]\n[Bar]\n", "file (on demand)"; if(($_ % 3) == 0) { my $t = time() + $_*10; utime $t, $t, @files; } } unlink @caches; my $tx = Text::Xslate->new(path => [path], cache_dir => cache_dir); is $tx->render('hello.tx', { lang => 'Xslate' }), "Hello, Xslate world!\n", "file"; # change the content move $x => "$x.save"; copy "$x.mod" => $x; utime $^T+10, $^T+10, $x; is $tx->render('hello.tx', { lang => 'Perl' }), "Hi, Perl.\n", "auto reload" for 1 .. 2; move "$x.save" => $x or diag "cannot move $x.save to $x: $!"; unlink @caches; note 'cache => 2 (release mode)'; $tx = Text::Xslate->new(cache => 2, path => [path], cache_dir => cache_dir); utime $^T, $^T, $x; is $tx->render('hello.tx', { lang => 'Xslate' }), "Hello, Xslate world!\n", "first" for 1 .. 2; # change the content move $x => "$x.save"; copy "$x.mod" => $x; utime $^T+10, $^T+10, $x; is $tx->render('hello.tx', { lang => 'Xslate' }), "Hello, Xslate world!\n", "second (modified, but not reloaded)" for 1 .. 2; done_testing;