X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/34211d2356367e21aa8f624caa7b17ee4b8ec4ac..1d91e75c53e7da5bf2c1b334f5aeecf241dc5ec4:/t/Support/Templates.pm diff --git a/t/Support/Templates.pm b/t/Support/Templates.pm new file mode 100644 index 000000000..61dda11c7 --- /dev/null +++ b/t/Support/Templates.pm @@ -0,0 +1,151 @@ +# -*- Mode: perl; indent-tabs-mode: nil -*- +# +# The contents of this file are subject to the Mozilla Public +# License Version 1.1 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS +# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +# implied. See the License for the specific language governing +# rights and limitations under the License. +# +# The Original Code are the Bugzilla tests. +# +# The Initial Developer of the Original Code is Jacob Steenhagen. +# Portions created by Jacob Steenhagen are +# Copyright (C) 2001 Jacob Steenhagen. All +# Rights Reserved. +# +# Contributor(s): Jacob Steenhagen +# David D. Kilzer +# Tobias Burnus +# + +package Support::Templates; + +use strict; + +use lib 't'; +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; + +# 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 = (); + +# 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, "templates/webpages") || die "Can't open 'templates': $!"; +# my @files = grep { /^[a-z-]+$/i } readdir(DIR); +# closedir DIR; +# +# foreach my $langdir (@files) { +# next if($langdir =~ /^CVS$/i); +# +# my $path = File::Spec->catdir('templates', $langdir, 'custom'); +# my @dirs = (); +# push(@dirs, $path) if(-d $path); +# $path = File::Spec->catdir('templates', $langdir, 'extension'); +# push(@dirs, $path) if(-d $path); +# $path = File::Spec->catdir('templates', $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 { + # Prune CVS directories + if (-d $_ && $_ eq 'CVS') { + $File::Find::prune = 1; + return; + } + + # Only include files ending in '.html' + if (-f $_ && $_ =~ m/\.html$/i) { + my $filename; + my $local_dir = File::Spec->abs2rel($File::Find::dir, + $File::Find::topdir); + + # File::Spec 3.13 and newer return "." instead of "" if both + # arguments of abs2rel() are identical. + $local_dir = "" if ($local_dir eq "."); + + if ($local_dir) { + $filename = File::Spec->catfile($local_dir, $_); + } else { + $filename = $_; + } + + push(@files, $filename); + } +} + +# Scan the given template include path for templates +sub find_actual_files { + my $include_path = $_[0]; + @files = (); + find(\&find_templates, $include_path); + return @files; +} + +@include_paths = qw(templates/webpages); + +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. +my %seen; + +foreach my $file (@Support::Files::testitems) { + open (FILE, $file); + my @lines = ; + close (FILE); + foreach my $line (@lines) { +# if ($line =~ m/template->process\(\"(.+?)\", .+?\)/) { + if ($line =~ m/->parse_html_template\((['"])(.+?)\1/) { + my $template = $2; + # Ignore templates with $ in the name, since they're + # probably vars, not real files + next if $template =~ m/\$/; + next if $seen{$template}; + push (@referenced_files, $template); + $seen{$template} = 1; + } + } +} + +1;