The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
# there were mojibake when caches were used
use strict;
use warnings;

use Text::Xslate;

#use if !Text::Xslate->USE_XS,
#    'Test::More', skip_all => 'PP impl differs from XS impl';

use Test::More;
use File::Temp qw(tempdir);
use Encode qw(decode);

binmode $_, 'utf8' for
    \*STDOUT,
    \*STDERR,
    Test::More->builder->output,
    Test::More->builder->failure_output,
    Test::More->builder->todo_output;


sub d {
    return decode('utf8', shift);
}

my %vpath = (
    'layout.tx' => d(<<'T'),
<p>
: block content -> {}
</p>
T
    foo => d(<<'T'),
: cascade layout;

: around content -> {
<em><: $bar :></em>
: }
T
);

my $tmpdir = tempdir(DIR => ".", CLEANUP => 1);

my %opts = (
    path      => \%vpath,
    cache     => 1,
    cache_dir => $tmpdir,
);
my %vars = (
    bar => ('こんにちは'),
);

my $expected = d(<<'T');
<p>
<em>こんにちは</em>
</p>
T

note 'utf-8 encoded bytes';
foreach my $i(1 .. 2) {
    my $tx = Text::Xslate->new(\%opts);

    for my $j(1 .. 2) {
    is $tx->render(foo => \%vars),
        $expected, "process $i, render $j";
    }
}

$tmpdir = tempdir(DIR => ".", CLEANUP => 1);

note 'text string';
utf8::decode($vars{bar});
foreach my $i(1 .. 2) {
    my $tx = Text::Xslate->new(\%opts);

    for my $j(1 .. 2) {
    is $tx->render(foo => \%vars),
        $expected, "process $i, render $j";
    }
}

undef $tmpdir;

done_testing;