X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fcomp%2Frequire.t;h=d06834a3c56081382e27e5c0a5586ec255a5e370;hb=6b845e562be40aac749b544b6d494078c54de4aa;hp=203b996e068d3905d2cd62f6dfc9041ef6d65658;hpb=4a9ae47ac2dbde43455079cf404946a27c7b4906;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/comp/require.t b/t/comp/require.t index 203b996..d06834a 100755 --- a/t/comp/require.t +++ b/t/comp/require.t @@ -2,12 +2,18 @@ BEGIN { chdir 't' if -d 't'; - @INC = ('.'); + @INC = '.'; + push @INC, '../lib'; } # don't make this lexical $i = 1; -print "1..4\n"; + +my $Is_EBCDIC = (ord('A') == 193) ? 1 : 0; +my $Is_UTF8 = (${^OPEN} || "") =~ /:utf8/; +my $total_tests = 46; +if ($Is_EBCDIC || $Is_UTF8) { $total_tests -= 3; } +print "1..$total_tests\n"; sub do_require { %INC = (); @@ -19,8 +25,77 @@ sub do_require { sub write_file { my $f = shift; open(REQ,">$f") or die "Can't write '$f': $!"; + binmode REQ; + use bytes; print REQ @_; - close REQ; + close REQ or die "Could not close $f: $!"; +} + +eval {require 5.005}; +print "# $@\nnot " if $@; +print "ok ",$i++,"\n"; + +eval { require 5.005 }; +print "# $@\nnot " if $@; +print "ok ",$i++,"\n"; + +eval { require 5.005; }; +print "# $@\nnot " if $@; +print "ok ",$i++,"\n"; + +eval { + require 5.005 +}; +print "# $@\nnot " if $@; +print "ok ",$i++,"\n"; + +# new style version numbers + +eval { require v5.5.630; }; +print "# $@\nnot " if $@; +print "ok ",$i++,"\n"; + +eval { require 10.0.2; }; +print "# $@\nnot " unless $@ =~ /^Perl v10\.0\.2 required/; +print "ok ",$i++,"\n"; + +eval q{ use v5.5.630; }; +print "# $@\nnot " if $@; +print "ok ",$i++,"\n"; + +eval q{ use 10.0.2; }; +print "# $@\nnot " unless $@ =~ /^Perl v10\.0\.2 required/; +print "ok ",$i++,"\n"; + +my $ver = 5.005_63; +eval { require $ver; }; +print "# $@\nnot " if $@; +print "ok ",$i++,"\n"; + +# check inaccurate fp +$ver = 10.2; +eval { require $ver; }; +print "# $@\nnot " unless $@ =~ /^Perl v10\.200.0 required/; +print "ok ",$i++,"\n"; + +$ver = 10.000_02; +eval { require $ver; }; +print "# $@\nnot " unless $@ =~ /^Perl v10\.0\.20 required/; +print "ok ",$i++,"\n"; + +print "not " unless 5.5.1 gt v5.5; +print "ok ",$i++,"\n"; + +{ + print "not " unless v5.5.640 eq "\x{5}\x{5}\x{280}"; + print "ok ",$i++,"\n"; + + print "not " unless v7.15 eq "\x{7}\x{f}"; + print "ok ",$i++,"\n"; + + print "not " + unless v1.20.300.4000.50000.600000 eq "\x{1}\x{14}\x{12c}\x{fa0}\x{c350}\x{927c0}"; + print "ok ",$i++,"\n"; } # interaction with pod (see the eof) @@ -33,9 +108,43 @@ do_require "0;\n"; print "# $@\nnot " unless $@ =~ /did not return a true/; print "ok ",$i++,"\n"; +print "not " if exists $INC{'bleah.pm'}; +print "ok ",$i++,"\n"; + +my $flag_file = 'bleah.flg'; +# run-time error in require +for my $expected_compile (1,0) { + write_file($flag_file, 1); + print "not " unless -e $flag_file; + print "ok ",$i++,"\n"; + write_file('bleah.pm', "unlink '$flag_file' or die; \$a=0; \$b=1/\$a; 1;\n"); + print "# $@\nnot " if eval { require 'bleah.pm' }; + print "ok ",$i++,"\n"; + print "not " unless -e $flag_file xor $expected_compile; + print "ok ",$i++,"\n"; + print "not " unless exists $INC{'bleah.pm'}; + print "ok ",$i++,"\n"; +} + # compile-time failure in require do_require "1)\n"; -print "# $@\nnot " unless $@ =~ /syntax error/i; +# bison says 'parse error' instead of 'syntax error', +# various yaccs may or may not capitalize 'syntax'. +print "# $@\nnot " unless $@ =~ /(syntax|parse) error/mi; +print "ok ",$i++,"\n"; + +# previous failure cached in %INC +print "not " unless exists $INC{'bleah.pm'}; +print "ok ",$i++,"\n"; +write_file($flag_file, 1); +write_file('bleah.pm', "unlink '$flag_file'; 1"); +print "# $@\nnot " if eval { require 'bleah.pm' }; +print "ok ",$i++,"\n"; +print "# $@\nnot " unless $@ =~ /Compilation failed/i; +print "ok ",$i++,"\n"; +print "not " unless -e $flag_file; +print "ok ",$i++,"\n"; +print "not " unless exists $INC{'bleah.pm'}; print "ok ",$i++,"\n"; # successful require @@ -43,7 +152,79 @@ do_require "1"; print "# $@\nnot " if $@; print "ok ",$i++,"\n"; -END { unlink 'bleah.pm'; } +# do FILE shouldn't see any outside lexicals +my $x = "ok $i\n"; +write_file("bleah.do", <