123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #! /usr/bin/env perl
- BEGIN {
- #if ($ENV{PERL_CORE}){
- # chdir('t') if -d 't';
- # if ($^O eq 'MacOS') {
- # @INC = qw(: ::lib ::macos:lib);
- # } else {
- # @INC = '.';
- # push @INC, '../lib';
- # }
- #} else {
- # unshift @INC, 't';
- #}
- use Config;
- if (($Config{'extensions'} !~ /\bB\b/) ){
- print "1..0 # Skip -- Perl configured without B module\n";
- exit 0;
- }
- if ($] < 5.007 and $^O eq 'os2'){
- print "1..0 # Skip -- stash tests disabled for OS2 5.6\n";
- exit 0;
- }
- #if ($^O eq 'MSWin32' and $Config{cc} =~ /^cl/i) {
- # print "1..0 # Skip -- stash tests skipped on MSVC for now\n";
- # exit 0;
- #}
- }
- use Test::More tests => 4;
- use strict;
- use Config;
- my $got;
- my $Is_VMS = $^O eq 'VMS';
- my $Is_MacOS = $^O eq 'MacOS';
- my $path = join " ", map { qq["-I$_"] } @INC;
- $path = '"-I../lib" "-Iperl_root:[lib]"' if $Is_VMS; # gets too long otherwise
- my $redir = $Is_MacOS ? "" : "2>&1";
- my $cover = $ENV{HARNESS_PERL_SWITCHES} || "";
- my $X = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
- chomp($got = `$X $path "-MB::Stash" $cover "-Mwarnings" -e1`);
- $got =~ s/Using \w+blib\n// if $] < 5.008001;
- $got =~ s/-u//g;
- diag "got = $got";
- my @got = map { s/^\S+ //; $_ }
- sort { $a cmp $b }
- map { lc($_) . " " . $_ }
- split /,/, $got;
- diag "(after sorting)";
- diag "got = @got";
- ok (@got > 3, "not empty");
- ok ($got =~ /main,/, "contains main");
- ok ($got =~ /,warnings/, "contains warnings");
- @got = grep { ! /^(PerlIO|open)(?:::\w+)?$/ } @got;
- diag "(after perlio censorings)";
- diag "got = @got";
- @got = grep { ! /^Win32$/ } @got if $^O eq 'MSWin32';
- @got = grep { ! /^NetWare$/ } @got if $^O eq 'NetWare';
- @got = grep { ! /^(Cwd|File|File::Copy|OS2)$/ } @got if $^O eq 'os2';
- @got = grep { ! /^(Win32|Win32CORE|Cwd|Cygwin)$/} @got if $^O eq 'cygwin';
- @got = grep { ! /^(Devel::Cover)$/ } @got if $cover =~ /-MDevel::Cover/;
- # XXX freebsd prepends BSDPAN.pm ?
- @got = grep { ! /^(Exporter::Heavy|strict)$/} @got
- if $^O eq 'freebsd';
- @got = grep { ! /^(threads)$/} @got; # < 5.8.9
- if ($Is_VMS) {
- @got = grep { ! /^File(?:::Copy)?$/ } @got;
- @got = grep { ! /^VMS(?:::Filespec)?$/ } @got;
- @got = grep { ! /^vmsish$/ } @got;
- # Socket is optional/compiler version dependent
- @got = grep { ! /^Socket$/ } @got;
- }
- diag "(after platform censorings)";
- diag "got = @got";
- $got = "@got";
- my $expected = "attributes Carp Carp::Heavy DB Exporter Exporter::Heavy main Regexp strict warnings";
- if ($] < 5.008009) {
- $expected = "attributes Carp DB Exporter Exporter::Heavy main overload Regexp strict warnings";
- }
- if ($] < 5.008001) {
- $expected = "attributes Carp Carp::Heavy DB Exporter Exporter::Heavy main strict warnings";
- }
- if ($] >= 5.010) {
- $expected = "attributes Carp Carp::Heavy DB Exporter Exporter::Heavy main mro re Regexp strict Tie Tie::Hash warnings";
- }
- if ($] >= 5.011002) {
- $expected = "Carp DB Exporter Exporter::Heavy main mro re Regexp strict Tie Tie::Hash warnings";
- #Carp DB Exporter main mro re Regexp Tie Tie::Hash Tie::Hash::NamedCapture utf8 version warnings";
- }
- if ($] >= 5.011001 and $] < 5.011004) {
- $expected .= " XS::APItest::KeywordRPN";
- }
- if ($] >= 5.013004) {
- $expected = "Carp DB Exporter Exporter::Heavy main mro re Regexp strict Tie Tie::Hash warnings";
- }
- if ($] >= 5.013006) {
- $expected = "Carp DB Exporter Exporter::Heavy main mro re Regexp strict warnings";
- }
- $expected =~ s/(Exporter::Heavy|strict) //g if $^O eq 'freebsd';
- {
- no strict 'vars';
- if ($^O eq 'os2') {
- eval q(use vars '$OS2::is_aout';);
- }
- }
- TODO: {
- # todo: freebsd
- # local $TODO = "exact stashes may vary" if $^O !~ /^(MSWin32|cygwin|linux|darwin)$/;
- local $TODO = "exact stashes may vary";
- if ((($Config{static_ext} eq ' ')
- || ($Config{static_ext} eq '')
- || ($^O eq 'cygwin' and $Config{static_ext} =~ /^(Cwd )?Win32CORE$/))
- && !($^O eq 'os2' and $OS2::is_aout)
- ) {
- diag "got [$got]" if $got ne $expected;
- diag "expected [$expected]" if $got ne $expected;
- ok($got eq $expected);
- } else {
- ok(1, "skip: one or more static extensions");
- }
- }
|