#!/usr/bin/perl

use strict;
use warnings;

use Template;

use Test::More tests => 31;

#print "Warning! this script creates a diretory called tt_test and creates more files in that directory\n\ncomment or remove this line in the script to run it.\n\nexiting now..\n\n"; exit;

mkdir('tt_test');
chdir('tt_test');

open(FILE, '>', 'test1.tt');
print FILE "OK [% IF test_var %][% END %]";
close(FILE);

open(FILE, '>', 'test2.tt');
print FILE "Broken [% IF test_var %]";
close(FILE);

open(FILE, '>', 'test3.tt');
print FILE "Broken [% IF test_var %]";
close(FILE);

print "\n# simplest test case.. try to process the same broken template twice\n";

my $tt = Template->new;
my $output;

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2] 1');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2] 2');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );

print "\n# we get the correct error from processing a different broken template\n";

ok( !$tt->process('test3.tt',{},\$output), 'process failed [test3]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test3.tt', 'error ok' );

print "\n# pause for a second and modify the broken template\n";

sleep(1);

open(FILE, '>>', 'test2.tt');
print FILE " ";
close(FILE);

print "\n# then we get a parse error (correct) again\n";

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2] 3');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2] 4');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );


print "\n# fresh tt object\n";

$tt = Template->new;


print "\n# it's only the broken template that is affected\n";

ok( $tt->process('test1.tt',{},\$output), 'process succeeded [test1]');

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );

ok( $tt->process('test1.tt',{},\$output), 'process succeeded [test1]');

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );

ok( $tt->process('test1.tt',{},\$output), 'process succeeded [test1]');


print "\n# CACHE_SIZE => 0 ?\n";

$tt = Template->new({ CACHE_SIZE => 0 });

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );


print "\n# COMPILE_DIR => './', COMPILE_EXT => 'tt' ?\n";

$tt = Template->new( COMPILE_DIR => './', COMPILE_EXT => '_compiled' );

ok( $tt->process('test1.tt',{},\$output), 'process succeeded [test1]');

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );



print "\n# COMPILE_DIR => './', COMPILE_EXT => 'tt', CACHE_SIZE => 0 ?\n";

$tt = Template->new( COMPILE_DIR => './', COMPILE_EXT => '_compiled', CACHE_SIZE => 0 );

ok( $tt->process('test1.tt',{},\$output), 'process succeeded [test1]');

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );

ok( !$tt->process('test2.tt',{},\$output), 'process failed [test2]');
cmp_ok( $tt->error, '=~', 'file error - parse error - test2.tt', 'error ok' );


