# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
-use warnings;
-use strict;
-use Test::More tests => 2;
+use Modern::Perl;
+use Test::More tests => 3;
use File::Find;
use Cwd;
use C4::TTParser;
}
close $dh;
-my @files_with_directive_in_tag = do {
- my @files;
- find( sub {
- my $dir = getcwd();
- return if $dir =~ /blib/;
- return unless /\.(tt|inc)$/;
- my $name = $_;
- my $parser = C4::TTParser->new;
- $parser->build_tokens( $name );
- my @lines;
- while ( my $token = $parser->next_token ) {
+my $checkers = [
+ {
+ description => 'TT syntax: not using TT directive within HTML tag',
+ check => sub {
+ my ($self, $name, $token) = @_;
my $attr = $token->{_attr};
next unless $attr;
- push @lines, $token->{_lc} if $attr->{'[%'} or $attr->{'[%-'};
+ push @{$self->{errors}->{$name}}, $token->{_lc} if $attr->{'[%'} or $attr->{'[%-'};
+ },
+ errors => {},
+ },
+ {
+ description => '<body> tag with id and class attributes',
+ check => sub {
+ my ($self, $name, $token) = @_;
+ return if $name =~ /bodytag\.inc/;
+ my $tag = $token->{_string};
+ push @{$self->{errors}->{$name}}, $token->{_lc}
+ if $tag =~ /^<body/ &&
+ ($tag !~ /id=".+"/ || $tag !~ /class=".+"/);
+ },
+ errors => {},
+ },
+];
+find( sub {
+ my $dir = getcwd();
+ return if $dir =~ /blib/;
+ return unless /\.(tt|inc)$/;
+ ($dir) = $dir =~ /koha-tmpl\/(.*)$/;
+ my $name = $_;
+ my $parser = C4::TTParser->new;
+ $parser->build_tokens( $name );
+ while ( my $token = $parser->next_token ) {
+ my $attr = $token->{_attr};
+ next unless $attr;
+ for my $checker (@$checkers) {
+ $checker->{check}->($checker, "$dir/$name", $token);
}
- ($dir) = $dir =~ /koha-tmpl\/(.*)$/;
- push @files, { name => "$dir/$name", lines => \@lines } if @lines;
- }, @themes
- );
- @files;
-};
-
-
-ok( !@files_with_directive_in_tag, "TT syntax: not using TT directive within HTML tag" )
- or diag(
- "Files list: \n",
- join( "\n", map { $_->{name} . ': ' . join(', ', @{$_->{lines}})
- } @files_with_directive_in_tag )
- );
+ }
+ }, @themes
+);
+
+for my $check (@$checkers) {
+ my @files = sort keys %{$check->{errors}};
+ ok( !@files, $check->{description} )
+ or diag(
+ "Files list: \n",
+ join( "\n", map { "$_: " . join(', ', @{$check->{errors}->{$_}})
+ } @files )
+ );
+}
my $testtoken = 0;
my $ttparser = C4::TTParser->new();
This test validate Template Toolkit (TT) Koha files.
-For the time being an unique validation is done: Test if TT files contain TT
-directive within HTML tag. For example:
+For the time being, two validations are done:
+
+[1] Test if TT files contain TT directive within HTML tag. For example:
<li[% IF
This kind of constuction MUST be avoided because it break Koha translation
process.
+[2] Test tag <body> tags have both attibutes 'id' and 'class'
+
=head1 USAGE
From Koha root directory: