X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Flib%2F1_compile.t;h=72628c30a797ffa2114cffa26de4a4ae0b604b56;hb=d9f203a5233af6609a4b98c6d12d865eadc274ea;hp=d0669941b6e6c6f2c8d55bd7836e420ae3b27c83;hpb=6ae1853a767e2d521a436636dcee7dc1bef576db;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/lib/1_compile.t b/t/lib/1_compile.t index d066994..72628c3 100644 --- a/t/lib/1_compile.t +++ b/t/lib/1_compile.t @@ -1,119 +1,53 @@ #!./perl +# Modules should have their own tests. For historical reasons, some +# do not. This does basic compile tests on modules that have no tests +# of their own. + BEGIN { - chdir '..' if -d '../pod' && -d '../t'; - @INC = 'lib'; + chdir 't'; + @INC = '../lib'; } use strict; use warnings; -use Config; - -my %Core_Modules; -my %Test; - -unless (open(MANIFEST, "MANIFEST")) { - die "$0: failed to open 'MANIFEST': $!\n"; -} - -sub add_by_name { - $Core_Modules{$_[0]}++; -} - -while () { - if (m!^(lib)/(\S+?)\.pm\s!) { - # Collecting modules names from under ext/ would be - # rather painful since the mapping from filenames - # to module names is not 100%. - my ($dir, $module) = ($1, $2); - $module =~ s!/!::!g; - add_by_name($module); - } elsif (m!^(lib|ext)/(\S+?)(?:\.t|/test.pl)\s!) { - my ($dir, $test) = ($1, $2); - $test =~ s!(\w+)/\1$!$1! if $dir eq 'ext'; - $test =~ s!/t/[^/]+$!!; - $test =~ s!/!::!g; - $Test{$test}++; - } -} - -close(MANIFEST); - -# Delete stuff that can't be tested here. - -sub delete_by_name { - delete $Core_Modules{$_[0]}; -} - -sub has_extension { - $Config{extensions} =~ /\b$_[0]\b/i; -} - -sub delete_unless_has_extension { - delete $Core_Modules{$_[0]} unless has_extension($_[0]); -} - -foreach my $known_extension (split(' ', $Config{known_extensions})) { - delete_unless_has_extension($known_extension); -} - -sub delete_by_prefix { - for my $match (grep { /^$_[0]/ } keys %Core_Modules) { - delete_by_name($match); - } -} - -delete_by_name('CGI::Fast'); # won't load without FCGI - -delete_by_name('Devel::DProf'); # needs to be run as -d:DProf +use File::Spec::Functions; -delete_by_prefix('ExtUtils::MM_'); # ExtUtils::MakeMaker's domain - -delete_by_prefix('File::Spec::'); # File::Spec's domain -add_by_name('File::Spec::Functions'); # put this back +# Okay, this is the list. -delete_by_prefix('Attribute::Handlers');# we test this, and we have demos +my @Core_Modules = grep /\S/, ; +chomp @Core_Modules; -sub using_feature { - my $use = "use$_[0]"; - exists $Config{$use} && - defined $Config{$use} && - $Config{$use} eq 'define'; +if (eval { require Socket }) { + # Two Net:: modules need the Convert::EBCDIC if in EBDCIC. + if (ord("A") != 193 || eval { require Convert::EBCDIC }) { + push @Core_Modules, qw(Net::Cmd Net::POP3); + } } -unless (using_feature('threads') && has_extension('Thread')) { - delete_by_name('Thread'); - delete_by_prefix('Thread::'); -} +@Core_Modules = sort @Core_Modules; -unless (has_extension('NDBM_File')) { - delete_by_name('Memoize::NDBM_File'); -} +print "1..".(1+@Core_Modules)."\n"; -delete_by_prefix('unicode::'); - -# Delete all modules which have their own tests. -# This makes this test a lot faster. -foreach my $mod (sort keys %Test) { - delete_by_name($mod); -} -foreach my $mod () { - chomp $mod; - print "### $mod has a test but is in DATA of $0\n" if exists $Test{$mod}; - delete_by_name($mod); +my $message + = "ok 1 - All modules should have tests # TODO Make Schwern Poorer\n"; +if (@Core_Modules) { + print "not $message"; +} else { + print $message; } +print <<'EOREWARD'; +# http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-04/msg01223.html +# 20010421230349.P2946@blackrider.blackstar.co.uk +EOREWARD -# Okay, this is the list. - -my @Core_Modules = sort keys %Core_Modules; - -print "1..".@Core_Modules."\n"; - -my $test_num = 1; +my $test_num = 2; foreach my $module (@Core_Modules) { - print "$module compile failed\nnot " unless compile_module($module); - print "ok $test_num\n"; + my $todo = ''; + $todo = "# TODO $module needs porting on $^O" if $module eq 'ByteLoader' && $^O eq 'VMS'; + print "# $module compile failed\nnot " unless compile_module($module); + print "ok $test_num $todo\n"; $test_num++; } @@ -121,79 +55,17 @@ foreach my $module (@Core_Modules) { # out of our namespace. sub compile_module { my ($module) = $_[0]; - - my $out = scalar `$^X "-Ilib" t/lib/compmod.pl $module`; + + my $compmod = catfile(curdir(), 'lib', 'compmod.pl'); + my $lib = '-I' . catdir(updir(), 'lib'); + + my $out = scalar `$^X $lib $compmod $module`; print "# $out"; return $out =~ /^ok/; } -# Add here modules that have their own test scripts and therefore -# need not be test-compiled by 1_compile.t. +# These modules have no tests of their own. +# Keep up to date with +# http://www.pobox.com/~schwern/cgi-bin/perl-qa-wiki.cgi?UntestedModules +# and vice-versa. The list should only shrink. __DATA__ -B::ShowLex -CGI::Apache -CGI::Carp -CGI::Cookie -CGI::Form -CGI::Pretty -CGI::Push -CGI::Switch -CGI::Util -Carp::Heavy -CPAN::Nox -Devel::DProf -Exporter::Heavy -ExtUtils::Constant -ExtUtils::MakeMaker -Filter::Util::Call -GDBM_File -I18N::LangTags::List -IO::Dir -IO::File -IO::Handle -IO::Pipe -IO::Poll -IO::Seekable -IO::Select -IO::Socket -IO::Socket::INET -IO::Socket::UNIX -Locale::Constants -Locale::Country -Locale::Currency -Locale::Language -MIME::QuotedPrint -Math::BigFloat -Math::BigInt::Calc -Memoize::AnyDBM_File -Memoize::Expire -Memoize::ExpireFile -Memoize::ExpireTest -Memoize::NDBM_File -Memoize::SDBM_File -Memoize::Storable -NDBM_File -ODBM_File -Pod::Checker -Pod::Find -Pod::Text -Pod::Usage -SDBM_File -Safe -Scalar::Util -Sys::Syslog -Test::More -Test::ParseWords -Text::Tabs -Text::Wrap -Thread -Tie::Array -Tie::Handle -Tie::Hash -Time::tm -UNIVERSAL -attributes -base -bytes -ops -warnings::register