#!perl -w use strict; use Test::More; use Text::Xslate; use Fatal qw(open); use File::Path qw(rmtree); use t::lib::Util; my $tx = Text::Xslate->new(path => [path], cache_dir => cache_dir); rmtree cache_dir; END{ rmtree cache_dir } eval { $tx->load_file("hello.tx"); }; is $@, '', "load_file -> success"; eval { $tx->load_file("no_such_file"); }; like $@, qr/LoadError/xms, "load_file -> LoadError"; like $@, qr/\b no_such_file \b/xms, "include the filename"; my $cache = $tx->find_file('hello.tx')->{cachepath}; ok -e $cache, "$cache exists"; open my($out), '>', $cache; print $out "This is a broken txc file\n"; close $out; eval { $tx->load_file("hello.tx"); }; is $@, '', 'XSLATE_MAGIC unmatched (-> auto reload)'; is $tx->render("hello.tx", { lang => 'Xslate'}), "Hello, Xslate world!\n"; # virtual paths my %vpath = ( 'foo.tx' => 'Hello, world!', ); $tx = Text::Xslate->new( path => \%vpath, cache_dir => cache_dir, cache => 1, ); my $fi = $tx->find_file('foo.tx'); ok !defined($fi->{cache_mtime}) or diag explain($fi); $tx->load_file('foo.tx'); $fi = $tx->find_file('foo.tx'); ok defined($fi->{cache_mtime}) or diag explain($fi); eval { $tx->find_file(File::Spec->catfile(File::Spec->updir, 'foo.tx')); }; like $@, qr/Forbidden/, "updir ('..') is forbidden"; like $@, qr/updir/; like $@, qr/foo\.tx/; eval { $tx->find_file(('/..' x 10) . '/etc/passwd'); }; like $@, qr/Forbidden/; like $@, qr/updir/; like $@, qr{/etc/passwd}; done_testing;