From 06110195997969a66f4727b73e0e90e4b20bfbad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?= Date: Mon, 13 Apr 2015 14:02:42 +0200 Subject: [PATCH] Bug 13941 [1/2] Test tag with id/class attributes Test: - Apply the first patch [1/2] containg a new test checking tags in all templates - Run the test: prove xt/tt_valid.t - You get a list of templates with invalid tags. - Apply the second patch [2/2] fixing all invalid tags. - Re-run the test: It passes. --- xt/tt_valid.t | 80 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 30 deletions(-) diff --git a/xt/tt_valid.t b/xt/tt_valid.t index 507210f..b644dfb 100755 --- a/xt/tt_valid.t +++ b/xt/tt_valid.t @@ -17,9 +17,8 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -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; @@ -42,35 +41,56 @@ for my $theme ( grep { not /^\.|lib|js/ } readdir($dh) ) { } 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 => ' tag with id and class attributes', + check => sub { + my ($self, $name, $token) = @_; + return if $name =~ /bodytag\.inc/; + $_ = $token->{_string}; + push @{$self->{errors}->{$name}}, $token->{_lc} + if /^ {}, + }, +]; +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}->($_, "$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(); -- 2.3.5