From b996f2f722e069d479b6f948c4a7e271beab166a Mon Sep 17 00:00:00 2001 From: "gerv%gerv.net" <> Date: Fri, 24 Jan 2003 07:34:00 +0000 Subject: Bug 126955 - Bugzilla should support translated/localized templates. Patch by burnus; r=gerv, a=justdave. --- t/004template.t | 118 +++++++++++++++++++++++++++---------------------- t/005no_tabs.t | 9 ++-- t/Support/Templates.pm | 71 +++++++++++++++++++++++++---- 3 files changed, 132 insertions(+), 66 deletions(-) (limited to 't') diff --git a/t/004template.t b/t/004template.t index be0dd04ec..8429b774f 100644 --- a/t/004template.t +++ b/t/004template.t @@ -20,6 +20,7 @@ # Contributor(s): Jacob Steenhagen # Zach Lipton # David D. Kilzer +# Tobias Burnus # ################# @@ -37,8 +38,7 @@ use CGI qw(-no_debug); use File::Spec 0.82; use Template; -use Test::More tests => ( scalar(@Support::Templates::referenced_files) - + scalar(@Support::Templates::actual_files) * 2); +use Test::More tests => ( scalar(@referenced_files) + $num_actual_files * 2 ); # Capture the TESTOUT from Test::More or Test::Builder for printing errors. # This will handle verbosity for us automatically. @@ -54,72 +54,84 @@ my $fh; } } -my $include_path = $Support::Templates::include_path; +# Checks whether one of the passed files exists +sub existOnce { + foreach my $file (@_) { + return $file if -e $file; + } + return 0; +} # Check to make sure all templates that are referenced in # Bugzilla exist in the proper place. -foreach my $file(@Support::Templates::referenced_files) { - my $path = File::Spec->catfile($include_path, $file); - if (-e $path) { - ok(1, "$path exists"); - } else { - ok(0, "$path does not exist --ERROR"); +foreach my $lang (@languages) { + foreach my $file (@referenced_files) { + my @path = map(File::Spec->catfile($_, $file), + split(':', $include_path{$lang})); + if (my $path = existOnce(@path)) { + ok(1, "$path exists"); + } else { + ok(0, "$file cannot be located --ERROR"); + print $fh "Looked in:\n " . join("\n ", @path); + } } } -# Processes all the templates to make sure they have good syntax -my $provider = Template::Provider->new( -{ - INCLUDE_PATH => $include_path , - # Need to define filters used in the codebase, they don't - # actually have to function in this test, just be defined. - # See globals.pl for the actual codebase definitions. - FILTERS => +foreach my $include_path (@include_paths) { + # Processes all the templates to make sure they have good syntax + my $provider = Template::Provider->new( { - html_linebreak => sub { return $_; }, - js => sub { return $_ } , - strike => sub { return $_ } , - url_quote => sub { return $_ } , - xml => sub { return $_ } , - quoteUrls => sub { return $_ } , - bug_link => [ sub { return sub { return $_; } }, 1] , - csv => sub { return $_ } , - time => sub { return $_ } , - }, -} -); - -foreach my $file(@Support::Templates::actual_files) { - my $path = File::Spec->catfile($include_path, $file); - if (-e $path) { - my ($data, $err) = $provider->fetch($file); - - if (!$err) { - ok(1, "$file syntax ok"); + INCLUDE_PATH => $include_path , + # Need to define filters used in the codebase, they don't + # actually have to function in this test, just be defined. + # See globals.pl for the actual codebase definitions. + FILTERS => + { + html_linebreak => sub { return $_; }, + js => sub { return $_ } , + strike => sub { return $_ } , + url_quote => sub { return $_ } , + xml => sub { return $_ } , + quoteUrls => sub { return $_ } , + bug_link => [ sub { return sub { return $_; } }, 1] , + csv => sub { return $_ } , + time => sub { return $_ } , + }, + } + ); + + foreach my $file (@{$actual_files{$include_path}}) { + my $path = File::Spec->catfile($include_path, $file); + if (-e $path) { + my ($data, $err) = $provider->fetch($file); + + if (!$err) { + ok(1, "$file syntax ok"); + } + else { + ok(0, "$file has bad syntax --ERROR"); + print $fh $data . "\n"; + } } else { - ok(0, "$file has bad syntax --ERROR"); - print $fh $data . "\n"; + ok(1, "$path doesn't exist, skipping test"); } } - else { - ok(1, "$path doesn't exist, skipping test"); - } -} -# check to see that all templates have a version string: + # check to see that all templates have a version string: -foreach my $file(@Support::Templates::actual_files) { - my $path = File::Spec->catfile($include_path, $file); - open(TMPL, $path); - my $firstline = ; - if ($firstline =~ /\d+\.\d+\@[\w\.-]+/) { - ok(1,"$file has a version string"); - } else { - ok(0,"$file does not have a version string --ERROR"); + foreach my $file (@{$actual_files{$include_path}}) { + my $path = File::Spec->catfile($include_path, $file); + open(TMPL, $path); + my $firstline = ; + if ($firstline =~ /\d+\.\d+\@[\w\.-]+/) { + ok(1,"$file has a version string"); + } else { + ok(0,"$file does not have a version string --ERROR"); + } + close(TMPL); } - close(TMPL); } exit 0; diff --git a/t/005no_tabs.t b/t/005no_tabs.t index f1d5f9be5..51433fe13 100644 --- a/t/005no_tabs.t +++ b/t/005no_tabs.t @@ -34,12 +34,13 @@ use Support::Templates; use File::Spec 0.82; use Test::More tests => ( scalar(@Support::Files::testitems) - + scalar(@Support::Templates::actual_files)); + + $Support::Templates::num_actual_files); my @testitems = @Support::Files::testitems; -my @templates = map(File::Spec->catfile($Support::Templates::include_path, $_), - @Support::Templates::actual_files); -push(@testitems, @templates); +for my $path (@Support::Templates::include_paths) { + push(@testitems, map(File::Spec->catfile($path, $_), + Support::Templates::find_actual_files($path))); +} foreach my $file (@testitems) { open (FILE, "$file"); diff --git a/t/Support/Templates.pm b/t/Support/Templates.pm index 4ef582de4..e90565392 100644 --- a/t/Support/Templates.pm +++ b/t/Support/Templates.pm @@ -19,6 +19,7 @@ # # Contributor(s): Jacob Steenhagen # David D. Kilzer +# Tobias Burnus # package Support::Templates; @@ -26,18 +27,60 @@ package Support::Templates; use strict; use lib 't'; -use vars qw($include_path @referenced_files @actual_files); +use base qw(Exporter); +@Support::Templates::EXPORT = + qw(@languages @include_paths %include_path @referenced_files + %actual_files $num_actual_files); +use vars qw(@languages @include_paths %include_path @referenced_files + %actual_files $num_actual_files); use Support::Files; use File::Find; use File::Spec 0.82; -# Note that $include_path is assumed to only contain ONE path, not -# a list of colon-separated paths. -$include_path = File::Spec->catdir('template', 'en', 'default'); +# The available template languages +@languages = (); + +# The colon separated includepath per language +%include_path = (); + +# All include paths +@include_paths = (); + +# Files which are referenced in the cgi files @referenced_files = (); -@actual_files = (); + +# All files sorted by include_path +%actual_files = (); + +# total number of actual_files +$num_actual_files = 0; + +# Scan for the template available languages and include paths +{ + opendir(DIR, "template") || die "Can't open 'template': $!"; + my @files = grep { /^[a-z-]+$/i } readdir(DIR); + closedir DIR; + + foreach my $langdir (@files) { + next if($langdir =~ /^CVS$/i); + + my $path = File::Spec->catdir('template', $langdir, 'custom'); + my @dirs = (); + push(@dirs, $path) if(-d $path); + $path = File::Spec->catdir('template', $langdir, 'default'); + push(@dirs, $path) if(-d $path); + + next if(scalar(@dirs) == 0); + push(@languages, $langdir); + push(@include_paths, @dirs); + $include_path{$langdir} = join(":",@dirs); + } +} + + +my @files; # Local subroutine used with File::Find sub find_templates { @@ -59,13 +102,23 @@ sub find_templates { $filename = $_; } - push(@actual_files, $filename); + push(@files, $filename); } } -# Scan the template include path for templates then put them in -# in the @actual_files array to be used by various tests. -map(find(\&find_templates, $_), split(':', $include_path)); +# Scan the given template include path for templates +sub find_actual_files { + my $include_path = $_[0]; + @files = (); + find(\&find_templates, $include_path); + return @files; +} + + +foreach my $include_path (@include_paths) { + $actual_files{$include_path} = [ find_actual_files($include_path) ]; + $num_actual_files += scalar(@{$actual_files{$include_path}}); +} # Scan Bugzilla's perl code looking for templates used and put them # in the @referenced_files array to be used by the 004template.t test. -- cgit v1.2.3-24-g4f1b