use strict; use Test::More 'no_plan'; use Encode; use Template::Provider::Encoding; use Template::Stash::ForceUTF8; use Template; my @files = qw( euc-jp.tt utf-8.tt utf-8-wo-encoding.tt utf-8-bom.tt ); my $author = "\x{5bae}\x{5ddd}"; # miyagawa my $place = "\x{6771}\x{4eac}"; # Tokyo my $author_utf8 = encode("utf-8", $author); my $place_utf8 = encode("utf-8", $place); for my $file (@files) { my $tt = Template->new( LOAD_TEMPLATES => [ Template::Provider::Encoding->new ], ); my $vars; $vars->{author} = $author; # Unicode string $vars->{my} = { place => $place }; # Unicode string $tt->process("t/$file", $vars, \my $out) or die $tt->error; ok Encode::is_utf8($out), "$file output is utf-8 flagged"; like $out, qr/$author/, "$file includes author name correctly"; like $out, qr/$place/, "$file includes place correctly"; unless ($file =~ /(-wo-|-bom)/) { my $encoding = ($file =~ /(.*)\.tt/)[0]; like $out, qr/encoding=$encoding/, "$file has encoding $encoding"; } } # test mixing Unicode flagged and UTF-8 bytes in the stash (Unicode flagged) for my $file (@files) { my $tt = Template->new( LOAD_TEMPLATES => [ Template::Provider::Encoding->new ], STASH => Template::Stash::ForceUTF8->new, ); my $vars; $vars->{author} = $author; # unicode string $vars->{my} = { place => $place_utf8 }; # utf-8 $tt->process("t/$file", $vars, \my $out) or die $tt->error; ok Encode::is_utf8($out), "$file output is utf-8 flagged"; like $out, qr/$author/, "$file includes author name correctly"; like $out, qr/$place/, "$file includes place correctly"; unless ($file =~ /(-wo-|-bom)/) { my $encoding = ($file =~ /(.*)\.tt/)[0]; like $out, qr/encoding=$encoding/, "$file has encoding $encoding"; } }