]> wagnertech.de Git - kivitendo-erp.git/blobdiff - t/Support/Templates.pm
Automatisierte Syntaxtests, Framework für spätere Modultests.
[kivitendo-erp.git] / t / Support / Templates.pm
diff --git a/t/Support/Templates.pm b/t/Support/Templates.pm
new file mode 100644 (file)
index 0000000..61dda11
--- /dev/null
@@ -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 <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;