It now only fails for compile warnings in WebGUI files, not prereqs. The compile checks on the upgrades and utility scripts run much faster, resulting in the entire test taking about 10% of the time it previously did. It will also BAIL_OUT for any compile errors, preventing any other tests from being run.
108 lines
3 KiB
Perl
108 lines
3 KiB
Perl
#-------------------------------------------------------------------
|
|
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
|
|
#-------------------------------------------------------------------
|
|
# Please read the legal notices (docs/legal.txt) and the license
|
|
# (docs/license.txt) that came with this distribution before using
|
|
# this software.
|
|
#-------------------------------------------------------------------
|
|
# http://www.plainblack.com info@plainblack.com
|
|
#-------------------------------------------------------------------
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
# We don't load WebGUI::Test, because we want to test the
|
|
# loading of WebGUI::Session ourselves
|
|
|
|
use Test::More;
|
|
use File::Find;
|
|
use File::Spec;
|
|
use File::Spec::Functions;
|
|
use File::Basename;
|
|
use Cwd qw(realpath);
|
|
|
|
my $wgRoot = realpath catdir(dirname(__FILE__), updir);
|
|
my $wgLib = catdir($wgRoot, 'lib');
|
|
|
|
my @modules = findModules($wgLib);
|
|
my @scripts = findScripts(catdir($wgRoot, 'docs', 'upgrades'), catdir($wgRoot, 'sbin'));
|
|
|
|
plan tests => 2 * (scalar @modules + scalar @scripts);
|
|
my $failed_compile = 0;
|
|
|
|
foreach my $library (@modules) {
|
|
my $warnings = '';
|
|
local $^W = 1;
|
|
local $SIG{__WARN__} = sub {
|
|
my $warn = shift;
|
|
# file the warning occurred in
|
|
my $warning_file = realpath( (caller(0))[1] );
|
|
# only care about it if it is within the WebGUI lib directory
|
|
if ($warning_file =~ /^\Q$wgLib/) {
|
|
$warnings .= $warn;
|
|
}
|
|
};
|
|
eval {
|
|
require $library;
|
|
};
|
|
chomp $warnings;
|
|
is($@, '', "$library compiles successfully")
|
|
|| $failed_compile++;
|
|
is($warnings, '', "$library compiles without warnings");
|
|
}
|
|
|
|
my $script_compiler = <<'END_SCRIPT';
|
|
return 1;
|
|
package WebGUI::Test::ScriptTest::%s;
|
|
use warnings;
|
|
# line 1 "%s"
|
|
%s
|
|
END_SCRIPT
|
|
|
|
for my $script (@scripts) {
|
|
open my $fh, '<', $script;
|
|
my $script_content = do { local $/; <$fh> };
|
|
close $fh;
|
|
my $short_name = File::Spec->abs2rel($script, $wgRoot);
|
|
my $package_name = $script;
|
|
$package_name =~ s{.*/}{}msx;
|
|
$package_name =~ s/\W//msxg;
|
|
my $to_compile = sprintf $script_compiler, $package_name, $short_name, $script_content;
|
|
|
|
my $warnings = '';
|
|
local $SIG{__WARN__} = sub {
|
|
$warnings .= shift;
|
|
};
|
|
eval $to_compile;
|
|
chomp $warnings;
|
|
is($@, '', "$short_name compiles successfully");
|
|
is($warnings, '', "$short_name compiles without warnings");
|
|
}
|
|
|
|
if ($failed_compile) {
|
|
BAIL_OUT("Failed to compile $failed_compile modules!");
|
|
}
|
|
|
|
#----------------------------------------
|
|
sub findModules {
|
|
my $libDir = shift;
|
|
my @modules;
|
|
File::Find::find( {
|
|
no_chdir => 1,
|
|
wanted => sub {
|
|
return unless $File::Find::name =~ /\.pm$/;
|
|
my $lib = File::Spec->abs2rel($File::Find::name, $libDir);
|
|
push @modules, $lib;
|
|
},
|
|
}, $libDir);
|
|
return @modules;
|
|
}
|
|
|
|
sub findScripts {
|
|
my @scripts;
|
|
for my $dir (@_) {
|
|
push @scripts, glob("$dir/*.pl");
|
|
}
|
|
return @scripts;
|
|
}
|
|
|