--- /dev/null
+# -*- 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 <jake@bugzilla.org>
+# David D. Kilzer <ddkilzer@kilzer.net>
+# Tobias Burnus <burnus@net-b.de>
+#
+
+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 = <FILE>;
+ 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;