The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use strict;
use warnings;
use Test::More 'no_plan';
use utf8;
use Template::Replace;

use FindBin;
use Data::Dumper;
use Encode;

#
# Prepare data directory ...
#
my $data_dir = "$FindBin::Bin/data";                       # construct path
$data_dir = $1 if $data_dir =~ m#^((?:/(?!\.\./)[^/]+)+)#; # un-taint
mkdir $data_dir unless -e $data_dir;                       # create if missing

#
# Cleanup beforehand ... no need for it so far!
#


#
# Let's have some prerequisites ...
#
my $tmpl;
my $str;
my $result;


#
# Testing tmpl->_read_file() ...
#
$tmpl = Template::Replace->new({ path => $data_dir }); # standard delimiters

$str = $tmpl->_read_file('tmpl1.txt');
ok( Encode::is_utf8($str), '_read_file() returns UTF-8 string' );

like( $str, qr/über/, '_read_file() returns correct German umlaut in UTF-8');

#diag( Dumper($str) );
ok( $str eq <<EOS
# t/data/tmpl1.txt:
Testdatei, 1. Zeile ...
2. Zeile der Testdatei

<!--( Abschnitt1 )-->
Erste Zeile von Abschnitt 1.
Zweite Zeile mit (\$Variable1\$) darin.
<!--( /Abschnitt1 )-->
<!--? !Abschnitt1 ?-->
Das hier sollte nicht erscheinen!
<!--? /!Abschnitt1 ?-->
<!--? Abschnitt1 ?-->
Das hier sollte erscheinen!
<!--? /Abschnitt1 ?-->
<!--? !Abschnitt2 ?-->
Abschnitt 2 ist nicht definiert!
<!--? /!Abschnitt2 ?-->

<!--# Ein Kommentar. #-->
Text nach Abschnitt1.
<!--#
	Ein mehrzeiliger Kommentar.
	Hier mit zweiter Zeile.
#-->
Noch eine Zeile ...
Include-Datei tmpl2.txt ...
Include-Datei subdir/tmpl3.txt geladen über tmpl2.txt
EOS
, '_read_file() returns template string with includes');


#
# Cleanup ... no need for it so far!
#