diff --git a/lib/Jemplate.pm b/lib/Jemplate.pm index 8358c76..b629b2f 100644 --- a/lib/Jemplate.pm +++ b/lib/Jemplate.pm @@ -374,11 +374,16 @@ sub compile_template_content { my $parse_tree = $parser->parse( $template_content, {name => $template_name} ) or die $parser->error; + my $used_names = ref $self ? \$self->{USED_NAMES} : \ {}; + warn "Duplicate template or block name $template_name\n" + if $$used_names->{$template_name}++; my $output = "Jemplate.templateMap['$template_name'] = " . $parse_tree->{BLOCK} . "\n"; for my $function_name (sort keys %{$parse_tree->{DEFBLOCKS}}) { + warn "Duplicate template or block name $function_name\n" + if $$used_names->{$function_name}++; $output .= "Jemplate.templateMap['$function_name'] = " . $parse_tree->{DEFBLOCKS}{$function_name} . diff --git a/t/9bug/gh8.t b/t/9bug/gh8.t new file mode 100755 index 0000000..19438a8 --- /dev/null +++ b/t/9bug/gh8.t @@ -0,0 +1,41 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use Test::More; + +use Jemplate; +my $jemplate = Jemplate->new; + +my %warning_seen; +local $SIG{__WARN__} = sub { + if ($_[0] =~ /Duplicate template or block name (b1|t2)/) { + ++$warning_seen{$1}; + } else { + die "Unexpected warning: @_"; + } +}; + +$jemplate->compile_template_content( + '[% BLOCK b1 %] first [% END %]', + 't1', +); + +$jemplate->compile_template_content( + '[% BLOCK b1 %] duplicate block [% END %]', + 't2', +); + +$jemplate->compile_template_content( + '[% BLOCK b2 %] duplicate template [% END %]', + 't2', +); + +is_deeply( + \%warning_seen, + { b1 => 1, t2 => 1 }, + 'duplicate warning seen' +); + +done_testing();