The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

use strict;
# qw(no_plan);
tests => 4;
use_ok('HTML::Template');
my ($fh, $template_string, @template_array);
my ($template);
my ($type, $cache_option);
open $fh, 'templates/simple.tmpl'
or die "Couldn't open simple.tmpl for reading: $!";
{
local $/;
$template_string = <$fh>;
seek $fh, 0, 0;
}
@template_array = <$fh>;
seek $fh, 0, 0;
test_caching_precluded('scalarref', \$template_string, 'cache');
test_caching_precluded('arrayref', \@template_array, 'double_cache');
test_caching_precluded('filehandle', $fh, 'file_cache');
sub test_caching_precluded {
my ($type, $source, $cache_option) = @_;
my ($template);
eval { $template = HTML::Template->new(type => $type, source => $source, $cache_option => 1,); };
like($@, qr/Cannot have caching when template source is not file/, "Cannot have caching when template source is not file");
}
=head1 NAME
t/09-caching-precluded.t
=head1 OBJECTIVE
In HTML::Template v2.7, it was in principle possible to pass to the
constructor an option which called for caching even in cases where the
template source was I<not> a file.
$template = HTML::Template->new(
type => 'scalarref',
source => \$template_string,
cache => 1,
);
The documentation indicated it was
not possible to cache results coming from a filehandle, string or array,
but the module itself did not handle a violation of this rule cleanly.
If you attempted to construct an HTML::Template object such as the
example above, you would get three distinct and confusing error
messages.
Phalanx has modified C<HTML::Template::new()> to preclude the
possibility of any of the six cache options having a
true value if the template source is a filehandle, string or array. The
constructor now does additional error-checking and, if a violation is
found, the program dies and an appropriate error message is emitted via
C<croak> and analyzed.
=cut
__END__
#use lib("./t/testlib");
#use_ok('_Auxiliary', qw{
# test_caching_precluded
#});
# my ($warn, $template);
# local $SIG{__WARN__} = sub {$warn = $_[0]};
# like( $warn,
# qr/$cache_option option automatically reset to zero when template source is not file/,