Automatisierte Syntaxtests, Framework für spätere Modultests.
[kivitendo-erp.git] / t / 002goodperl.t
diff --git a/t/002goodperl.t b/t/002goodperl.t
new file mode 100644 (file)
index 0000000..3196d00
--- /dev/null
@@ -0,0 +1,129 @@
+# -*- 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 Zach Lipton
+# Portions created by Zach Lipton are
+# Copyright (C) 2001 Zach Lipton.  All
+# Rights Reserved.
+#
+# Contributor(s): Zach Lipton <zach@zachlipton.com>
+#                 Jacob Steenhagen <jake@bugzilla.org>
+#                 David D. Kilzer <ddkilzer@theracingworld.com>
+
+
+#################
+#Bugzilla Test 2#
+####GoodPerl#####
+
+use strict;
+
+use lib 't';
+
+use Support::Files;
+
+use Test::More tests => (scalar(@Support::Files::testitems) * 3);
+
+my @testitems = @Support::Files::testitems; # get the files to test.
+
+foreach my $file (@testitems) {
+    $file =~ s/\s.*$//; # nuke everything after the first space (#comment)
+    next if (!$file); # skip null entries
+    if (! open (FILE, $file)) {
+        ok(0,"could not open $file --WARNING");
+    }
+    my $file_line1 = <FILE>;
+    close (FILE);
+
+    $file =~ m/.*\.(.*)/;
+    my $ext = $1;
+
+    if ($file_line1 !~ m/^#\!/) {
+        ok(1,"$file does not have a shebang");
+    } else {
+        my $flags;
+        if (!defined $ext || $ext eq "pl") {
+            # standalone programs aren't taint checked yet
+            $flags = "w";
+        } elsif ($ext eq "pm") {
+            ok(0, "$file is a module, but has a shebang");
+            next;
+        } elsif ($ext eq "cgi") {
+            # cgi files must be taint checked
+            $flags = "wT";
+        } else {
+            ok(0, "$file has shebang but unknown extension");
+            next;
+        }
+
+        if ($file_line1 =~ m#^\#\!/usr/bin/perl\s#) {
+            if ($file_line1 =~ m#\s-$flags#) {
+                ok(1,"$file uses standard perl location and -$flags");
+            } else {
+                ok(0,"$file is MISSING -$flags --WARNING");
+            }
+        } else {
+            ok(0,"$file uses non-standard perl location");
+        }
+    }
+}
+
+foreach my $file (@testitems) {
+    my $found_use_strict = 0;
+    $file =~ s/\s.*$//; # nuke everything after the first space (#comment)
+    next if (!$file); # skip null entries
+    if (! open (FILE, $file)) {
+        ok(0,"could not open $file --WARNING");
+        next;
+    }
+    while (my $file_line = <FILE>) {
+        if ($file_line =~ m/^\s*use strict/) {
+            $found_use_strict = 1;
+            last;
+        }
+    }
+    close (FILE);
+    if ($found_use_strict) {
+        ok(1,"$file uses strict");
+    } else {
+        ok(0,"$file DOES NOT use strict --WARNING");
+    }
+}
+
+# Check to see that all error messages use tags (for l10n reasons.)
+foreach my $file (@testitems) {
+    $file =~ s/\s.*$//; # nuke everything after the first space (#comment)
+    next if (!$file); # skip null entries
+    if (! open (FILE, $file)) {
+        ok(0,"could not open $file --WARNING");
+        next;
+    }
+    my $lineno = 0;
+    my $error = 0;
+
+    while (!$error && (my $file_line = <FILE>)) {
+        $lineno++;
+        if ($file_line =~ /Throw.*Error\("(.*?)"/) {
+            if ($1 =~ /\s/) {
+                ok(0,"$file has a Throw*Error call on line $lineno which doesn't use a tag --ERROR");
+                $error = 1;
+            }
+        }
+    }
+
+    ok(1,"$file uses Throw*Error calls correctly") if !$error;
+
+    close(FILE);
+}
+
+exit 0;