From a50c16bae2f0418653d281511195034ca0afbdbb Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Wed, 29 Apr 2009 16:51:11 -0500 Subject: [PATCH] new author test for syntax errors in HTML templates Added a new author test to look for syntax errors in the HTML templates. Run by doing prove xt/author/valid-templates.t from the root of a Koha source tree. This test will help catch the following errors: * unbalanced TMPL_IF, TMPL_UNLESS, and TMPL_LOOP contructs, e.g., cases where a TMPL_IF is not closed by a /TMPL_IF. * references to nonexistant include files * syntax errors within a HTML::Template::Pro tag This test currently ignores errors related to TMPL_IF EXPR, which is currently deprecated for use in Koha -- this may be made stricter in the future. Signed-off-by: Galen Charlton --- xt/author/test_template.pl | 58 ++++++++++++++++++++++++ xt/author/valid-templates.t | 90 +++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100755 xt/author/test_template.pl create mode 100644 xt/author/valid-templates.t diff --git a/xt/author/test_template.pl b/xt/author/test_template.pl new file mode 100755 index 0000000000..9f94eb59a2 --- /dev/null +++ b/xt/author/test_template.pl @@ -0,0 +1,58 @@ +#!/usr/bin/perl + +# Copyright (C) 2009 LibLime +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +use warnings; + +=head1 NAME + +test_template.pl + +=head2 DESCRIPTION + +This helper script is invoked by xt/author/valid-templates.t +and tests a template for basic syntax errors by having +HTML::Template::Pro parse it. + +=cut + +use FindBin qw($Bin); +use HTML::Template::Pro; + +my $filename = $ARGV[0]; +my $include_dir = $ARGV[1]; + +my $template = HTML::Template::Pro->new( + filename => $filename, + die_on_bad_params => 1, + global_vars => 1, + case_sensitive => 1, + loop_context_vars => 1, # enable: __first__, __last__, __inner__, __odd__, __counter__ + path => [$include_dir], +); + +$template->output; # tossing output + +=head1 AUTHOR + +Koha Developement team + +Galen Charlton + +=cut diff --git a/xt/author/valid-templates.t b/xt/author/valid-templates.t new file mode 100644 index 0000000000..abdac58f30 --- /dev/null +++ b/xt/author/valid-templates.t @@ -0,0 +1,90 @@ +#!/usr/bin/perl + +# Copyright (C) 2009 LibLime +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +use warnings; + +=head1 NAME + +valid-templates.t + +=head1 DESCRIPTION + +This test checks all staff and OPAC templates and includes for syntax errors +by running a helper script that loads each template into a HTML::Template::Pro +object and calls the output() method, which forces the template to be parsed. +HTML::Template::Pro currently reports any syntax errors to STDERR. + +This test currently ignores error messages of the form + +EXPR:at pos n: non-initialized variable foo + +However, note that TMPL_IF EXPR is currently discouraged for use in Koha +templates. + +=cut + +use Test::More qw/no_plan/; +use File::Find; +use File::Spec; +use FindBin; +use IPC::Open3; + +foreach my $type qw(intranet opac) { + my $template_dir = File::Spec->rel2abs("koha-tmpl/$type-tmpl/prog/en/modules"); + my $include_dir = File::Spec->rel2abs("koha-tmpl/$type-tmpl/prog/en/includes"); + + my $template_test = gen_template_test($include_dir); + find({ wanted => $template_test, no_chdir => 1 }, $template_dir, $include_dir); +} + +sub gen_template_test { + my $include_dir = shift; + return sub { + return unless -f $File::Find::name; + + # We're starting a seprate process to test the template + # because some of the error messages we're interested in + # are written directly to STDERR in HTML::Template::Pro's + # XS code. I haven't found any other way to capture + # those messages. --gmc + local *CHILD_IN; + local *CHILD_OUT; + my $pid = open3(\*CHILD_IN, \*CHILD_OUT, \*CHILD_ERR, + "$FindBin::Bin/test_template.pl", $File::Find::name, $include_dir); + my @errors = (); + while () { + push @errors, $_; + } + waitpid($pid, 0); + + @errors = grep { ! /^EXPR:.*non-initialized variable/ } @errors; # ignoring EXPR errors for now + my $rel_filename = File::Spec->abs2rel($File::Find::name); + ok(@errors == 0, "no errors in $rel_filename") or diag(join("", @errors) ); + } + +} + +=head1 AUTHOR + +Koha Developement team + +Galen Charlton + +=cut -- 2.39.2