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
  # 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/,