The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 19;
BEGIN { use_ok('HTML::Template::Compiled') };

use lib 't';
use HTC_Utils qw($cache $cache_lock $tdir &cdir &remove_cache);
mkdir($cache);
my $htc = HTML::Template::Compiled->new(
	path => 't/templates',
	filename => 'dyn_include.htc',
#	debug => 1,
#    cache_debug => 1,
    file_cache => 1,
    file_cache_dir => $cache,
);
#exit;
for my $ix (1..2,undef) {
    for my $count (1..2) {
	$htc->param(
        file => (defined $ix? "dyn_included$ix.htc" : undef),
		test => 23,
	);
    my $out;
    eval {
        $out = $htc->output;
    };
    if (defined $ix) {
        #print $out;
        $out =~ s/\r\n|\r/\n/g;
        cmp_ok($out, "=~",
            "Dynamic include:", "dynamic include $ix.1");
        cmp_ok($out, "=~", "This is dynamically included file $ix\.", "dynamic include $ix.2");
        cmp_ok($out, "=~", "23", "dynamic include $ix.3");
    }
    else {
        #print "Error: $@\n";
        #print "out: $out\n";
        cmp_ok($out, "=~", 'Dynamic include:\s+$', "undefined filename");
    }
}
}

{
    my $htc = HTML::Template::Compiled->new(
        scalarref => \<<'EOM',
inc: <%include_string foo %>
EOM
        debug => 0,
    );
    $htc->param(
        foo => 'included=<%= bar%>',
        bar => 'real',
    );
    my $out = $htc->output;
    #print "out: $out\n";
    my $exp = 'inc: included=real';
    cmp_ok($out, '=~', $exp, "include_string");
}

{
    my $htc;
    eval {
        $htc = HTML::Template::Compiled->new(
            filename => 'user_template.html',
            path => 't/templates',
            no_includes => 1,
        );
    };
    my $error = "$@";
    cmp_ok($error, '=~', 'Syntax error.*near.*include', "no_includes");
}

{
    my $htc = HTML::Template::Compiled->new(
        filename => "wrapped.html",
        path => 't/templates',
#        debug => 1,
        loop_context_vars => 1,
        cache => 0,
    );
    $htc->param(
        foo => 23,
    );
    my $out = $htc->output;
    my $exp = <<"EOM";
wrapper:
<head>
wrapped in wrapper.html: foo: 23
  <head2>wrapped in wrapper2.html: foo2: 23</head2>

    <head>wrapped in wrapper1.html: foo1: 23</head>

</head>
EOM
    #warn __PACKAGE__.':'.__LINE__.": $out\n";
    for ($out, $exp) {
        s/[\r\n]/ /g;
        tr/ / /s;
    }
    cmp_ok($out, 'eq', $exp, "wrapper");
    $out = File::Spec->catfile('t', 'templates', 'out_fh.htc.output');
	open my $fh, '>', $out or die $!;
    $htc = HTML::Template::Compiled->new(
        filename => "wrapped.html",
        path => 't/templates',
#        debug => 1,
        loop_context_vars => 1,
        cache => 0,
        out_fh => 1,
    );
    $htc->param(
        foo => 23,
    );
	$htc->output($fh);
    close $fh;
    open $fh, "<", $out or die $!;
    my $out2 = do { local $/; <$fh> };
    #warn __PACKAGE__.':'.__LINE__.": $out2\n";
    for ($out2) {
        s/[\r\n]/ /g;
        tr/ / /s;
    }
    cmp_ok($out2, 'eq', $exp, "wrapper out_fh");
    unlink $out;
}

HTML::Template::Compiled->clear_filecache($cache);
remove_cache();
__END__
Dynamic include:
This is dynamically included file 1.
23