summaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to 't')
-rw-r--r--t/001compile.t144
-rw-r--r--t/Support/Files.pm30
2 files changed, 75 insertions, 99 deletions
diff --git a/t/001compile.t b/t/001compile.t
index 07e47160a..4a2ea0eda 100644
--- a/t/001compile.t
+++ b/t/001compile.t
@@ -13,11 +13,11 @@
# 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.
+# Portions created by Zach Lipton are Copyright (C) 2001 Zach Lipton.
+# All Rights Reserved.
#
# Contributor(s): Zach Lipton <zach@zachlipton.com>
+# Max Kanat-Alexander <mkanat@bugzilla.org>
#################
@@ -25,91 +25,97 @@
###Compilation###
use strict;
+use 5.008001;
use lib qw(. lib t);
-use Bugzilla::Constants;
use Support::Files;
-
use Test::More tests => scalar(@Support::Files::testitems);
-# Need this to get the available driver information
-use DBI;
-my @DBI_drivers = DBI->available_drivers;
+BEGIN {
+ use_ok('Bugzilla::Constants');
+ use_ok('Bugzilla');
+}
-# Bugzilla requires Perl 5.8.1 now. Checksetup will tell you this if you run it, but
-# it tests it in a polite/passive way that won't make it fail at compile time. We'll
-# slip in a compile-time failure if it's missing here so a tinderbox on < 5.8.1 won't
-# pass and mistakenly let people think Bugzilla works on any perl below 5.8.1.
-require 5.008001;
+use constant FEATURE_FILES => (
+ jsonrpc => ['Bugzilla/WebService/Server/JSONRPC.pm', 'jsonrpc.cgi'],
+ xmlrpc => ['Bugzilla/WebService/Server/XMLRPC.pm', 'xmlrpc.cgi',
+ 'Bugzilla/WebService.pm', 'Bugzilla/WebService/*.pm'],
+ moving => ['importxml.pl'],
+ auth_ldap => ['Bugzilla/Auth/Verify/LDAP.pm'],
+ auth_radius => ['Bugzilla/Auth/Verify/RADIUS.pm'],
+ inbound_email => ['email_in.pl'],
+ jobqueue => ['Bugzilla/Job/*', 'Bugzilla/JobQueue.pm',
+ 'Bugzilla/JobQueue/*', 'jobqueue.pl'],
+ patch_viewer => ['Bugzilla/Attachment/PatchReader.pm'],
+ updates => ['Bugzilla/Update.pm'],
+);
-# Capture the TESTOUT from Test::More or Test::Builder for printing errors.
-# This will handle verbosity for us automatically.
-my $fh;
-{
- local $^W = 0; # Don't complain about non-existent filehandles
- if (-e \*Test::More::TESTOUT) {
- $fh = \*Test::More::TESTOUT;
- } elsif (-e \*Test::Builder::TESTOUT) {
- $fh = \*Test::Builder::TESTOUT;
- } else {
- $fh = \*STDOUT;
+sub map_files_to_feature {
+ my %features = FEATURE_FILES;
+ my %files;
+ foreach my $feature (keys %features) {
+ my @my_files = @{ $features{$feature} };
+ foreach my $pattern (@my_files) {
+ foreach my $file (glob $pattern) {
+ $files{$file} = $feature;
+ }
+ }
}
+ return \%files;
}
-my @testitems = @Support::Files::testitems;
-my $perlapp = "\"$^X\"";
-
-# Test the scripts by compiling them
-
-foreach my $file (@testitems) {
- $file =~ s/\s.*$//; # nuke everything after the first space (#comment)
- next if (!$file); # skip null entries
+sub compile_file {
+ my ($file) = @_;
- # Skip mod_perl.pl in all cases. It doesn't compile correctly from the command line.
- if ($file eq 'mod_perl.pl') {
- ok(1, "Skipping mod_perl.pl");
- next;
+ if ($file =~ s/\.pm$//) {
+ $file =~ s{/}{::}g;
+ use_ok($file);
+ return;
}
- # Check that we have a DBI module to support the DB, if this is a database
- # module (but not Schema)
- if ($file =~ m#Bugzilla/DB/([^/]+)\.pm$# && $file ne "Bugzilla/DB/Schema.pm") {
- if (!grep(lc($_) =~ /$1/i, @DBI_drivers)) {
- ok(1,$file." - Skipping, as the DBD module not installed");
- next;
- }
- }
+ open(my $fh, $file);
+ my $bang = <$fh>;
+ close $fh;
- open (FILE,$file);
- my $bang = <FILE>;
- close (FILE);
my $T = "";
if ($bang =~ m/#!\S*perl\s+-.*T/) {
$T = "T";
}
- my $command = "$perlapp -c$T $file 2>&1";
- my $loginfo=`$command`;
- #print '@@'.$loginfo.'##';
- if ($loginfo =~ /syntax ok$/im) {
- # Special hack due to CPAN.pm on Windows with Cygwin installed throwing
- # strings of the form "Set up gcc environment - 3.4.4 (cygming special,
- # gdc 0.12, using dmd 0.125)". See bug 416047 for details.
- if (ON_WINDOWS
- && grep($_ eq $file, 'install-module.pl', 'Bugzilla/Install/CPAN.pm'))
- {
- $loginfo =~ s/^Set up gcc environment.*?\n//;
+
+ my $perl = qq{"$^X"};
+ my $output = `$perl -wc$T $file 2>&1`;
+ chomp($output);
+ my $return_val = $?;
+ $output =~ s/^\Q$file\E syntax OK$//ms;
+ diag($output) if $output;
+ ok(!$return_val, $file) or diag('--ERROR');
+}
+
+my @testitems = @Support::Files::testitems;
+my $file_features = map_files_to_feature();
+
+# Test the scripts by compiling them
+foreach my $file (@testitems) {
+ # These were already compiled, above.
+ next if ($file eq 'Bugzilla.pm' or $file eq 'Bugzilla/Constants.pm');
+ SKIP: {
+ if ($file eq 'mod_perl.pl') {
+ skip 'mod_perl.pl cannot be compiled from the command line', 1;
}
- if ($loginfo ne "$file syntax OK\n") {
- ok(0,$file." --WARNING");
- print $fh $loginfo;
+ my $feature = $file_features->{$file};
+ if ($feature and !Bugzilla->feature($feature)) {
+ skip "$file: $feature not enabled", 1;
}
- else {
- ok(1,$file);
+
+ # Check that we have a DBI module to support the DB, if this
+ # is a database module (but not Schema)
+ if ($file =~ m{Bugzilla/DB/([^/]+)\.pm$}
+ and $file ne "Bugzilla/DB/Schema.pm")
+ {
+ my $module = lc($1);
+ my $dbd = DB_MODULE->{$module}->{dbd}->{module};
+ eval("use $dbd; 1") or skip "$file: $dbd not installed", 1;
}
- }
- else {
- ok(0,$file." --ERROR");
- print $fh $loginfo;
+
+ compile_file($file);
}
}
-
-exit 0;
diff --git a/t/Support/Files.pm b/t/Support/Files.pm
index 07f1c2f6c..d24cc2264 100644
--- a/t/Support/Files.pm
+++ b/t/Support/Files.pm
@@ -25,44 +25,14 @@ package Support::Files;
use File::Find;
-# exclude_deps is a hash of arrays listing the files to be excluded
-# if a module is not available
-#
@additional_files = ();
-%exclude_deps = (
- 'XML::Twig' => ['importxml.pl'],
- 'Net::LDAP' => ['Bugzilla/Auth/Verify/LDAP.pm'],
- 'Authen::Radius' => ['Bugzilla/Auth/Verify/RADIUS.pm'],
- 'Email::Reply' => ['email_in.pl'],
- 'Email::MIME::Attachment::Stripper' => ['email_in.pl'],
- 'JSON::RPC' => ['Bugzilla/WebService/Server/JSONRPC.pm']
-);
-
@files = glob('*');
find(sub { push(@files, $File::Find::name) if $_ =~ /\.pm$/;}, 'Bugzilla');
-sub have_pkg {
- my ($pkg) = @_;
- my ($msg, $vnum, $vstr);
- no strict 'refs';
- eval { my $p; ($p = $pkg . ".pm") =~ s!::!/!g; require $p; };
- return !($@);
-}
-
-@exclude_files = ();
-foreach $dep (keys(%exclude_deps)) {
- if (!have_pkg($dep)) {
- push @exclude_files, @{$exclude_deps{$dep}};
- }
-}
-
sub isTestingFile {
my ($file) = @_;
my $exclude;
- foreach $exclude (@exclude_files) {
- if ($file eq $exclude) { return undef; } # get rid of excluded files.
- }
if ($file =~ /\.cgi$|\.pl$|\.pm$/) {
return 1;