diff options
author | Nicholas Clark <nick@ccl4.org> | 2012-06-13 16:45:40 +0200 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2012-06-21 08:59:00 +0200 |
commit | 92508f95d17cda6a6995cd4650e72c3ac1187c37 (patch) | |
tree | 6fd2857e2b31b99af9c3cc02eb7832ce17876477 /lib/File | |
parent | 17c017a51cc9557d7d50c5113b67db8442762c56 (diff) | |
download | perl-92508f95d17cda6a6995cd4650e72c3ac1187c37.tar.gz |
*Actually* test that bug 20011110.104 is fixed.
Bug ID 20011110.104 (RT #7896) was fixed by commit 2f173a711df6278f in Nov
2001, but the test that commit added never actually tested this.
The initial problem was that the new code, as written, used C<stat>,
intending that to call File::stat::stat(). However the refactoring of the
test script (all part of the same commit) from C<use File::stat;> to
C<use_ok( 'File::stat' );> (not in a BEGIN block) intentionally eliminated
the export of &File::stat::stat. This means that plain C<stat> is the
core builtin.
Fixing this as-is to File::stat::stat() won't help, as tests have
subsequently been added earlier in the script that trigger the autoloading
of Symbol by File::stat (commit 83716b1ec25b41f2 in Feb 2002). Moving the
tests earlier won't help now that the test uses File::Temp, as that uses
IO::Seekable which uses IO::Handle, which unconditionally loads Symbol.
The simplest solution seems to be to move the test to its own file.
Diffstat (limited to 'lib/File')
-rw-r--r-- | lib/File/stat-7896.t | 28 | ||||
-rw-r--r-- | lib/File/stat.t | 4 |
2 files changed, 28 insertions, 4 deletions
diff --git a/lib/File/stat-7896.t b/lib/File/stat-7896.t new file mode 100644 index 0000000000..57b2685852 --- /dev/null +++ b/lib/File/stat-7896.t @@ -0,0 +1,28 @@ +#!./perl -w +use strict; + +use Test::More; +use File::stat; + +# This is possibly a bit black-box, but for now it works. +# If (either) File::stat stops lazy loading Symbol, or Test::More starts, it +# should be revisited +is($INC{'Symbol.pm'}, undef, "Symbol isn't loaded yet"); + +# ID 20011110.104 (RT #7896) +$! = 0; +is($!, '', '$! is empty'); +is(File::stat::stat('/notafile'), undef, 'invalid file should fail'); +isnt($!, '', 'should populate $!, given invalid file'); +my $e = $!; + +isnt($INC{'Symbol.pm'}, undef, "Symbol has been loaded"); + +# Repeat twice +is(File::stat::stat('/notafile'), undef, 'invalid file should fail again'); +is($!, $e, '$! should be consistent for an invalid file'); +$e = $!; +is(File::stat::stat('/notafile'), undef, 'invalid file should fail again'); +is($!, $e, '$! should be consistent for an invalid file'); + +done_testing(); diff --git a/lib/File/stat.t b/lib/File/stat.t index 437078269c..105115b9fe 100644 --- a/lib/File/stat.t +++ b/lib/File/stat.t @@ -142,10 +142,6 @@ SKIP: ok(-p($pstat), "check -p detects a pipe"); } -local $!; -$stat = stat '/notafile'; -isnt( $!, '', 'should populate $!, given invalid file' ); - # Testing pretty much anything else is unportable. done_testing; |