Update autodie to CPAN version 2.26
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Sat, 27 Dec 2014 16:19:50 +0000 (16:19 +0000)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Sat, 27 Dec 2014 16:19:50 +0000 (16:19 +0000)
  [DELTA]

2.26      2014-12-26 16:27:23+00:00 UTC

        * BUGFIX / INCOMPAT: Remove "fileno" and "umask" from the list of
                             CORE subs protected by autodie and Fatal.
                             When they return undef, it is not a failure.

        * BUGFIX: Fixed an error that could occur during global destruction of
          the form "(in cleanup) Can't use an undefined value as an ARRAY
          reference at .../autodie/Scope/GuardStack.pm line 48 during global
          destruction" (Thanks to Dave Rolsky).

        * BUGFIX: The open-pragma is now properly ignored when open is
                  given an explicit layer.  This brings autodie protected
                  open in sync with open.  Thanks to Gregory Oschwald and
                  Graham Knop for the report + test case and the patch.
                  (GH#52 + GH#53)

        * BUGFIX: Hide the "SCALAR" (buffer) argument in the string
                  representation of autodie::exception for the read,
                  sysread and syswrite CORE subs.  This is to avoid
                  a dump of binary data to the screen/log when a
                  (sys)read or syswrite fails.

        * FEATURE: Let autodie::exception work in equality tests and
                   string comparison via "overload fallback".
                   (Thanks to Michael G. Schwern)

        * DOC: Mention that "kill" is in the ":ipc" category.  It has
               been there since autodie v2.14.
               (Thanks to Felipe Gasper for reporting it, RT#97320).

        * INTERNAL: Use "parent" instead of "base" for inheritance.  Also
                    avoid some @ISA relationships that were redundant.
                    Either truly redundant ones or by importing "import"
                    from Exporter v5.57.
                    -  This change implies that perl 5.8 users must now
                       also fetch "parent" from cpan.
                    (Thanks to Olivier MenguĂ©, GH#59)

        * DEVEL / TEST: The autodie module now accepts an undefined Fatal
                        version, assuming it to be development version.
                        Test cases that require versions are now either
                        skipped or considered "release" test.

        * TEST / INTERNAL: Enabled travis-ci for Perl 5.20

        * TEST: Close temp file before re-opening in t/truncate.t.
                (Thanks to Craig A. Berry, RT#96609)

        * TEST: Pass O_TRUNC with O_CREAT to sysopen in t/utf8_open.t.
                (Thanks to Craig A. Berry, RT#87237)

        * TEST: Clean up temp file in t/truncate.t.
                (Thanks to Dave Mitchell, RT#100688)

35 files changed:
MANIFEST
Porting/Maintainers.pl
cpan/autodie/lib/Fatal.pm
cpan/autodie/lib/autodie.pm
cpan/autodie/lib/autodie/Scope/Guard.pm
cpan/autodie/lib/autodie/Scope/GuardStack.pm
cpan/autodie/lib/autodie/ScopeUtil.pm
cpan/autodie/lib/autodie/exception.pm
cpan/autodie/lib/autodie/exception/system.pm
cpan/autodie/lib/autodie/hints.pm
cpan/autodie/lib/autodie/skip.pm
cpan/autodie/t/autodie_skippy.pm
cpan/autodie/t/exceptions.t
cpan/autodie/t/import-into.t [new file with mode: 0644]
cpan/autodie/t/internal.t
cpan/autodie/t/lib/Hints_pod_examples.pm
cpan/autodie/t/lib/Hints_provider_does.pm
cpan/autodie/t/lib/Hints_provider_easy_does_it.pm
cpan/autodie/t/lib/Hints_provider_isa.pm
cpan/autodie/t/lib/Hints_test.pm
cpan/autodie/t/lib/Some/Module.pm
cpan/autodie/t/lib/autodie/test/au.pm
cpan/autodie/t/lib/autodie/test/au/exception.pm
cpan/autodie/t/lib/autodie/test/badname.pm
cpan/autodie/t/lib/autodie/test/missing.pm
cpan/autodie/t/lib/lethal.pm
cpan/autodie/t/lib/my/autodie.pm
cpan/autodie/t/lib/my/pragma.pm [new file with mode: 0644]
cpan/autodie/t/lib/pujHa/ghach.pm
cpan/autodie/t/lib/pujHa/ghach/Dotlh.pm
cpan/autodie/t/read.t [new file with mode: 0644]
cpan/autodie/t/truncate.t
cpan/autodie/t/utf8_open.t
cpan/autodie/t/version.t
cpan/autodie/t/version_tag.t

index 798e263..6eb0ed8 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -82,6 +82,7 @@ cpan/autodie/t/hints_provider_does.t  autodie - Test hints/does roles
 cpan/autodie/t/hints_provider_easy_does_it.t   autodie - Test easy hints/does
 cpan/autodie/t/hints_provider_isa.t    autodie - Test hints/inheritance
 cpan/autodie/t/hints.t                 autodie - Test hints interface
+cpan/autodie/t/import-into.t
 cpan/autodie/t/internal-backcompat.t   autodie - Back-compatibility tests
 cpan/autodie/t/internal.t              autodie - internal interface tests
 cpan/autodie/t/kill.t
@@ -98,6 +99,7 @@ cpan/autodie/t/lib/Hints_provider_isa.pm      autodie - Hints/inherit helper
 cpan/autodie/t/lib/Hints_test.pm       autodie - Hints test helper
 cpan/autodie/t/lib/lethal.pm           autodie - with a better name
 cpan/autodie/t/lib/my/autodie.pm       autodie - blog_hints.t helper
+cpan/autodie/t/lib/my/pragma.pm
 cpan/autodie/t/lib/OtherTypes.pm       autodie - Format clobberer helper.
 cpan/autodie/t/lib/pujHa/ghach/Dotlh.pm        autodie - With Klingon honour
 cpan/autodie/t/lib/pujHa/ghach.pm      autodie - Like a Klingon
@@ -105,6 +107,7 @@ cpan/autodie/t/lib/Some/Module.pm   autodie - blog_hints.t helper
 cpan/autodie/t/mkdir.t                 autodie - filesystem tests
 cpan/autodie/t/no_carp.t
 cpan/autodie/t/open.t                  autodie - Testing open
+cpan/autodie/t/read.t
 cpan/autodie/t/recv.t                  autodie - send/recv tests
 cpan/autodie/t/repeat.t                        autodie - repeat autodie leak tests
 cpan/autodie/t/rt-74246.t
index 9931aab..080c51e 100755 (executable)
@@ -133,7 +133,7 @@ use File::Glob qw(:case);
     },
 
     'autodie' => {
-        'DISTRIBUTION' => 'PJF/autodie-2.25.tar.gz',
+        'DISTRIBUTION' => 'NTHYKIER/autodie-2.26.tar.gz',
         'FILES'        => q[cpan/autodie],
         'EXCLUDED'     => [
             qr{benchmarks},
@@ -156,12 +156,6 @@ use File::Glob qw(:case);
                 t/system.t
                 )
         ],
-        'CUSTOMIZED'   => [
-            # Waiting to be merged upstream: see CPAN RT#87237
-            qw(        t/utf8_open.t ),
-            # Waiting to be merged upstream: see CPAN RT#96609
-            qw(        t/truncate.t ),
-        ],
     },
 
     'AutoLoader' => {
index 493219d..8fe7899 100644 (file)
@@ -50,7 +50,7 @@ use constant ERROR_58_HINTS => q{Non-subroutine %s hints for %s are not supporte
 
 use constant MIN_IPC_SYS_SIMPLE_VER => 0.12;
 
-our $VERSION = '2.25'; # VERSION: Generated by DZP::OurPkg::Version
+our $VERSION = '2.26'; # VERSION: Generated by DZP::OurPkg::Version
 
 our $Debug ||= 0;
 
@@ -78,10 +78,10 @@ my %TAGS = (
     ':io'      => [qw(:dbm :file :filesys :ipc :socket
                        read seek sysread syswrite sysseek )],
     ':dbm'     => [qw(dbmopen dbmclose)],
-    ':file'    => [qw(open close flock sysopen fcntl fileno binmode
+    ':file'    => [qw(open close flock sysopen fcntl binmode
                      ioctl truncate)],
     ':filesys' => [qw(opendir closedir chdir link unlink rename mkdir
-                      symlink rmdir readlink umask chmod chown utime)],
+                      symlink rmdir readlink chmod chown utime)],
     ':ipc'     => [qw(:msg :semaphore :shm pipe kill)],
     ':msg'     => [qw(msgctl msgget msgrcv msgsnd)],
     ':threads' => [qw(fork)],
@@ -116,6 +116,9 @@ my %TAGS = (
     # chown, utime, kill were added in 2.14
     ':v214'    => [qw(:v213 chown utime kill)],
 
+    # umask was removed in 2.26
+    ':v225' => [qw(:io :threads umask fileno)],
+
     # Version specific tags.  These allow someone to specify
     # use autodie qw(:1.994) and know exactly what they'll get.
 
@@ -140,23 +143,22 @@ my %TAGS = (
     ':2.10'  => [qw(:v213)],
     ':2.11'  => [qw(:v213)],
     ':2.12'  => [qw(:v213)],
-    ':2.13'  => [qw(:v213)],
-    ':2.14'  => [qw(:default)],
-    ':2.15'  => [qw(:default)],
-    ':2.16'  => [qw(:default)],
-    ':2.17'  => [qw(:default)],
-    ':2.18'  => [qw(:default)],
-    ':2.19'  => [qw(:default)],
-    ':2.20'  => [qw(:default)],
-    ':2.21'  => [qw(:default)],
-    ':2.22'  => [qw(:default)],
-    ':2.23'  => [qw(:default)],
-    ':2.24'  => [qw(:default)],
-    ':2.25'  => [qw(:default)],
+    ':2.13'  => [qw(:v213)],     # Last release without chown
+    ':2.14'  => [qw(:v225)],
+    ':2.15'  => [qw(:v225)],
+    ':2.16'  => [qw(:v225)],
+    ':2.17'  => [qw(:v225)],
+    ':2.18'  => [qw(:v225)],
+    ':2.19'  => [qw(:v225)],
+    ':2.20'  => [qw(:v225)],
+    ':2.21'  => [qw(:v225)],
+    ':2.22'  => [qw(:v225)],
+    ':2.23'  => [qw(:v225)],
+    ':2.24'  => [qw(:v225)],
+    ':2.25'  => [qw(:v225)],
+    ':2.26'  => [qw(:default)],
 );
 
-# chmod was only introduced in 2.07
-# chown was only introduced in 2.14
 
 {
     # Expand :all immediately by expanding and flattening all tags.
@@ -213,7 +215,7 @@ my %Retval_action = (
     "CORE::open"        => q{
 
     # apply the open pragma from our caller
-    if( defined $retval ) {
+    if( defined $retval && !( @_ >= 3 && $_[1] =~ /:/ )) {
         # Get the caller's hint hash
         my $hints = (caller 0)[10];
 
@@ -587,19 +589,11 @@ sub unimport {
         # (eg, mixing Fatal with no autodie)
 
         $^H{$NO_PACKAGE}{$sub} = 1;
-        my $current_sub = \&$sub;
-        $reinstall_subs{$symbol} = $current_sub;
-
-        if (my $original_sub = $Original_user_sub{$sub}) {
-            # Hey, we've got an original one of these, put it back.
-            $uninstall_subs{$symbol} = $original_sub;
-            next;
-        }
-
-        # We don't have an original copy of the sub, on the assumption
-        # it's core (or doesn't exist), we'll just nuke it.
-
-        $uninstall_subs{$symbol} = undef;
+        # Record the current sub to be reinstalled at end of scope
+        # and then restore the original (can be undef for "CORE::"
+        # subs)
+        $reinstall_subs{$symbol} = \&$sub;
+        $uninstall_subs{$symbol} = $Original_user_sub{$sub};
 
     }
 
@@ -1248,6 +1242,9 @@ sub _make_fatal {
         # This could be something that we've fatalised that
         # was in core.
 
+       # Store the current sub in case we need to restore it.
+       $sref = \&$sub;
+
         if ( $Package_Fatal{$sub} and exists($CORE_prototype_cache{"CORE::$name"})) {
 
             # Something we previously made Fatal that was core.
@@ -1262,7 +1259,7 @@ sub _make_fatal {
             # on, indicating this subroutine should be placed
             # back when we're finished.
 
-            $sref = \&$sub;
+
 
         } else {
 
@@ -1270,7 +1267,7 @@ sub _make_fatal {
             # then look-up the name of the original sub for the rest of
             # our processing.
 
-            if (exists($Is_fatalised_sub{\&$sub})) {
+            if (exists($Is_fatalised_sub{$sref})) {
                 # $sub is one of our wrappers around a CORE sub or a
                 # user sub.  Instead of wrapping our wrapper, lets just
                 # generate a new wrapper for the original sub.
@@ -1279,7 +1276,7 @@ sub _make_fatal {
                 #   mixing between use Fatal + use autodie can occur).
                 # - Even for nested autodie, we need this as the leak guards
                 #   differ.
-                my $s = $Is_fatalised_sub{\&$sub};
+                my $s = $Is_fatalised_sub{$sref};
                 if (defined($s)) {
                     # It is a wrapper for a user sub
                     $sub = $s;
@@ -1294,7 +1291,6 @@ sub _make_fatal {
             # A regular user sub, or a user sub wrapping a
             # core sub.
 
-            $sref = \&$sub;
             if (!$core) {
                 # A non-CORE sub might have hints and such...
                 $proto = prototype($sref);
index f2c98c2..15d7134 100644 (file)
@@ -3,14 +3,13 @@ use 5.008;
 use strict;
 use warnings;
 
-use Fatal ();
-our @ISA = qw(Fatal);
+use parent qw(Fatal);
 our $VERSION;
 
 # ABSTRACT: Replace functions with ones that succeed or die with lexical scope
 
 BEGIN {
-    our $VERSION = '2.25'; # VERSION: Generated by DZP::OurPkg::Version
+    our $VERSION = '2.26'; # VERSION: Generated by DZP::OurPkg::Version
 }
 
 use constant ERROR_WRONG_FATAL => q{
@@ -39,7 +38,7 @@ BEGIN {
     # If we have the wrong Fatal, then we've probably loaded the system
     # one, not our own.  Complain, and give a useful hint. ;)
 
-    if ($Fatal::VERSION ne $VERSION) {
+    if (defined($Fatal::VERSION) and defined($VERSION) and $Fatal::VERSION ne $VERSION) {
         my $autodie_path = $INC{'autodie.pm'};
 
         $autodie_path =~ s/autodie\.pm//;
@@ -171,7 +170,7 @@ Autodie uses a simple set of categories to group together similar
 built-ins.  Requesting a category type (starting with a colon) will
 enable autodie for all built-ins beneath that category.  For example,
 requesting C<:file> will enable autodie for C<close>, C<fcntl>,
-C<fileno>, C<open> and C<sysopen>.
+C<open> and C<sysopen>.
 
 The categories are currently:
 
@@ -192,7 +191,6 @@ The categories are currently:
                     chmod
                     chown
                     fcntl
-                    fileno
                     flock
                     ioctl
                     open
@@ -210,6 +208,7 @@ The categories are currently:
                     symlink
                     unlink
                 :ipc
+                    kill
                     pipe
                     :msg
                         msgctl
@@ -332,6 +331,18 @@ Functions called in list context are assumed to have failed if they
 return an empty list, or a list consisting only of a single undef
 element.
 
+Some builtins (e.g. C<chdir> or C<truncate>) has a call signature that
+cannot completely be representated with a Perl prototype.  This means
+that some valid Perl code will be invalid under autodie.  As an example:
+
+  chdir(BAREWORD);
+
+Without autodie (and assuming BAREWORD is an open
+filehandle/dirhandle) this is a valid call to chdir.  But under
+autodie, C<chdir> will behave like it had the prototype ";$" and thus
+BAREWORD will be a syntax error (under "use strict".  Without strict, it
+will interpreted as a filename).
+
 =head1 DIAGNOSTICS
 
 =over 4
@@ -398,8 +409,9 @@ C<autodie> with block eval is considered good practice.
 
 =head2 REPORTING BUGS
 
-Please report bugs via the CPAN Request Tracker at
-L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie>.
+Please report bugs via the GitHub Issue Tracker at
+L<https://github.com/pjf/autodie/issues> or via the CPAN Request
+Tracker at L<https://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie>.
 
 =head1 FEEDBACK
 
index 053399a..db38e36 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 
 # ABSTRACT: Wrapper class for calling subs at end of scope
-our $VERSION = '2.25'; # VERSION
+our $VERSION = '2.26'; # VERSION
 
 # This code schedules the cleanup of subroutines at the end of
 # scope.  It's directly inspired by chocolateboy's excellent
index 844dcf4..75300ff 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use autodie::Scope::Guard;
 
 # ABSTRACT: Hook stack for managing scopes via %^H
-our $VERSION = '2.25'; # VERSION
+our $VERSION = '2.26'; # VERSION
 
 my $H_KEY_STEM = __PACKAGE__ . '/guard';
 my $COUNTER = 0;
@@ -44,7 +44,10 @@ sub push_hook {
         #  then hook 2.  hook 3 will then be destroyed, but do nothing
         #  since its "frame" was already popped and finally hook 1
         #  will be popped and take its own frame with it.
-        $self->_pop_hook while @{$self} > $size;
+        #
+        #  We need to check that $self still exists since things can get weird
+        #  during global destruction.
+        $self->_pop_hook while $self && @{$self} > $size;
     });
     push(@{$self}, [$hook, $h_key]);
     return;
index bf7f836..2029209 100644 (file)
@@ -12,7 +12,7 @@ use autodie::Scope::GuardStack;
 our @EXPORT_OK = qw(on_end_of_compile_scope);
 
 # ABSTRACT: Utilities for managing %^H scopes
-our $VERSION = '2.25'; # VERSION
+our $VERSION = '2.26'; # VERSION
 
 # docs says we should pick __PACKAGE__ /<whatever>
 my $H_STACK_KEY = __PACKAGE__ . '/stack';
index 3709d58..15d0914 100644 (file)
@@ -4,19 +4,18 @@ use strict;
 use warnings;
 use Carp qw(croak);
 
-our $VERSION = '2.25'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.26'; # VERSION: Generated by DZP::OurPkg:Version
 # ABSTRACT: Exceptions from autodying functions.
 
 our $DEBUG = 0;
 
 use overload
-    q{""} => "stringify"
+    q{""} => "stringify",
+    # Overload smart-match only if we're using 5.10 or up
+    ($] >= 5.010 ? ('~~'  => "matches") : ()),
+    fallback => 1
 ;
 
-# Overload smart-match only if we're using 5.10
-
-use if ($] >= 5.010), overload => '~~'  => "matches";
-
 my $PACKAGE = __PACKAGE__;  # Useful to have a scalar for hash keys.
 
 =head1 NAME
@@ -286,10 +285,13 @@ work closely with the C<autodie::exception> model.
 #        get used in most programs.
 
 my %formatter_of = (
-    'CORE::close'   => \&_format_close,
-    'CORE::open'    => \&_format_open,
-    'CORE::dbmopen' => \&_format_dbmopen,
-    'CORE::flock'   => \&_format_flock,
+    'CORE::close'    => \&_format_close,
+    'CORE::open'     => \&_format_open,
+    'CORE::dbmopen'  => \&_format_dbmopen,
+    'CORE::flock'    => \&_format_flock,
+    'CORE::read'     => \&_format_readwrite,
+    'CORE::sysread'  => \&_format_readwrite,
+    'CORE::syswrite' => \&_format_readwrite,
 );
 
 # TODO: Our tests only check LOCK_EX | LOCK_NB is properly
@@ -391,6 +393,41 @@ sub _format_close {
 
 }
 
+# Default formatter for CORE::read, CORE::sysread and CORE::syswrite
+#
+# Similar to default formatter with the buffer filtered out as it
+# may contain binary data.
+sub _format_readwrite {
+    my ($this) = @_;
+    my $call = $this->function;
+    local $! = $this->errno;
+
+    # Trim package name off dying sub for error messages.
+    $call =~ s/.*:://;
+
+    # These subs receive the following arguments (in order):
+    #
+    # * FILEHANDLE
+    # * SCALAR (buffer, we do not want to write this)
+    # * LENGTH (optional for syswrite)
+    # * OFFSET (optional for all)
+    my (@args) = @{$this->args};
+    my $arg_name = $args[1];
+    if (defined($arg_name)) {
+        if (ref($arg_name)) {
+            my $name = blessed($arg_name) || ref($arg_name);
+            $arg_name = "<${name}>";
+        } else {
+            $arg_name = '<BUFFER>';
+        }
+    } else {
+        $arg_name = '<UNDEF>';
+    }
+    $args[1] = $arg_name;
+
+    return "Can't $call(" . join(q{, }, @args) . "): $!";
+}
+
 # Default formatter for CORE::open
 
 use constant _FORMAT_OPEN => "Can't open '%s' for %s: '%s'";
index 08e6c5b..d63a607 100644 (file)
@@ -2,10 +2,10 @@ package autodie::exception::system;
 use 5.008;
 use strict;
 use warnings;
-use base 'autodie::exception';
+use parent 'autodie::exception';
 use Carp qw(croak);
 
-our $VERSION = '2.25'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.26'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Exceptions from autodying system().
 
index b58d09b..3c9d679 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 
 use constant PERL58 => ( $] < 5.009 );
 
-our $VERSION = '2.25'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.26'; # VERSION: Generated by DZP::OurPkg:Version
 
 # ABSTRACT: Provide hints about user subroutines to autodie
 
@@ -347,8 +347,6 @@ use constant DEFAULT_HINTS => {
 
 use constant HINTS_PROVIDER => 'autodie::hints::provider';
 
-use base qw(Exporter);
-
 our $DEBUG = 0;
 
 # Only ( undef ) is a strange but possible situation for very
index c4531b5..1462acd 100644 (file)
@@ -2,7 +2,7 @@ package autodie::skip;
 use strict;
 use warnings;
 
-our $VERSION = '2.25'; # VERSION
+our $VERSION = '2.26'; # VERSION
 
 # This package exists purely so people can inherit from it,
 # which isn't at all how roles are supposed to work, but it's
index 3baa9b5..804e52f 100644 (file)
@@ -2,7 +2,7 @@ package autodie_skippy;
 use strict;
 use warnings;
 use autodie;
-use base qw(autodie::skip);
+use parent qw(autodie::skip);
 
 # This should skip upwards to the caller.
 
index 123cf8e..4e7545d 100644 (file)
@@ -44,3 +44,5 @@ ok($@ ~~ ':file',     "Exception from close / class :file"    );
 ok($@ ~~ ':io',                "Exception from close / class :io"      );
 ok($@ ~~ ':all',       "Exception from close / class :all"     );
 
+ok $@ eq $@.'',                 "string overloading is complete (eq)";
+ok( ($@ cmp $@.'') == 0,        "string overloading is complete (cmp)" );
diff --git a/cpan/autodie/t/import-into.t b/cpan/autodie/t/import-into.t
new file mode 100644 (file)
index 0000000..a7289dc
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+BEGIN {
+    eval 'use Import::Into';
+    plan skip_all => 'Test needs Import::Into' if $@;
+}
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+use my::pragma qw(open);
+
+plan tests => 1;
+
+my::pragma->dont_die();
+
+eval {
+    open(my $fd, '<', 'random-file');
+};
+ok($@, 'my::pragma can use import::into');
+
index c118944..3853044 100644 (file)
@@ -1,9 +1,11 @@
 #!/usr/bin/perl -w
 use strict;
 
+use Scalar::Util qw(blessed);
+
 use constant NO_SUCH_FILE => "this_file_or_dir_had_better_not_exist_XYZZY";
 
-use Test::More tests => 6;
+use Test::More tests => 9;
 
 # Lexical tests using the internal interface.
 
@@ -17,13 +19,28 @@ like($@, qr{:lexical must be used as first}, ":lexical must come first");
        use Fatal qw(:lexical chdir);
 
        eval { chdir(NO_SUCH_FILE); };
-       like ($@, qr/^Can't chdir/, "Lexical fatal chdir");
-
-       no Fatal qw(:lexical chdir);
+       my $err = $@;
+       like ($err, qr/^Can't chdir/, "Lexical fatal chdir");
+      TODO: {
+          local $TODO = 'Fatal should not (but does) throw autodie::exceptions';
+          is(blessed($err), undef,
+             "Fatal does not throw autodie::exceptions");
+        }
+
+       {
+               no Fatal qw(:lexical chdir);
+               eval { chdir(NO_SUCH_FILE); };
+               is ($@, "", "No lexical fatal chdir");
+        }
 
        eval { chdir(NO_SUCH_FILE); };
-       is ($@, "", "No lexical fatal chdir");
-
+       $err = $@;
+       like ($err, qr/^Can't chdir/, "Lexical fatal chdir returns");
+      TODO: {
+          local $TODO = 'Fatal should not (but does) throw autodie::exceptions';
+          is(blessed($err), undef,
+             "Fatal does not throw autodie::exceptions");
+        }
 }
 
 eval { chdir(NO_SUCH_FILE); };
index d88d98e..05db908 100644 (file)
@@ -2,7 +2,7 @@ package Hints_pod_examples;
 use strict;
 use warnings;
 
-use base qw(Exporter);
+use Exporter 5.57 'import';
 
 our %DOES = ( 'autodie::hints::provider' => 1 );
 
index 403e4b4..688ca1e 100644 (file)
@@ -1,7 +1,7 @@
 package Hints_provider_does;
 use strict;
 use warnings;
-use base qw(Exporter);
+use Exporter 5.57 'import';
 
 our @EXPORT_OK = qw(always_fail always_pass no_hints);
 
index 27dbcb2..6f9d8a5 100644 (file)
@@ -1,7 +1,7 @@
 package Hints_provider_easy_does_it;
 use strict;
 use warnings;
-use base qw(Exporter);
+use Exporter 5.57 'import';
 
 our @EXPORT_OK = qw(always_fail always_pass no_hints);
 
index ad15e3b..695b6db 100644 (file)
@@ -1,7 +1,7 @@
 package Hints_provider_isa;
 use strict;
 use warnings;
-use base qw(Exporter);
+use Exporter 5.57 'import';
 
 our @EXPORT_OK = qw(always_fail always_pass no_hints);
 
index 4010788..7dd189b 100644 (file)
@@ -2,7 +2,7 @@ package Hints_test;
 use strict;
 use warnings;
 
-use base qw(Exporter);
+use Exporter 5.57 'import';
 
 our @EXPORT_OK = qw(
     fail_on_empty fail_on_false fail_on_undef
index a24ec93..85bb844 100644 (file)
@@ -1,7 +1,7 @@
 package Some::Module;
 use strict;
 use warnings;
-use base qw(Exporter);
+use Exporter 5.57 'import';
 
 our @EXPORT_OK = qw(some_sub);
 
index 7a50e8f..fca789b 100644 (file)
@@ -2,7 +2,7 @@ package autodie::test::au;
 use strict;
 use warnings;
 
-use base qw(autodie);
+use parent qw(autodie);
 
 use autodie::test::au::exception;
 
index 5811fc1..0c0efec 100644 (file)
@@ -2,7 +2,7 @@ package autodie::test::au::exception;
 use strict;
 use warnings;
 
-use base qw(autodie::exception);
+use parent qw(autodie::exception);
 
 sub time_for_a_beer {
     return "Now's a good time for a beer.";
index 2a621a9..1552ed0 100644 (file)
@@ -1,5 +1,5 @@
 package autodie::test::badname;
-use base qw(autodie);
+use parent qw(autodie);
 
 sub exception_class {
     return 'autodie::test::badname::$@#%';  # Doesn't exist!
index b6166a5..82f2096 100644 (file)
@@ -1,5 +1,5 @@
 package autodie::test::missing;
-use base qw(autodie);
+use parent qw(autodie);
 
 sub exception_class {
     return "autodie::test::missing::exception";  # Doesn't exist!
index a49600a..08c3cb6 100644 (file)
@@ -3,6 +3,6 @@ package lethal;
 # A dummy package showing how we can trivially subclass autodie
 # to our tastes.
 
-use base qw(autodie);
+use parent qw(autodie);
 
 1;
index 1ad1250..9b909bf 100644 (file)
@@ -2,7 +2,7 @@ package my::autodie;
 use strict;
 use warnings;
 
-use base qw(autodie);
+use parent qw(autodie);
 use autodie::exception;
 use autodie::hints;
 
diff --git a/cpan/autodie/t/lib/my/pragma.pm b/cpan/autodie/t/lib/my/pragma.pm
new file mode 100644 (file)
index 0000000..185d54f
--- /dev/null
@@ -0,0 +1,16 @@
+package my::pragma;
+
+use Import::Into qw(into);
+
+sub import {
+    shift(@_);
+    autodie->import::into(1, @_);
+    return;
+}
+
+sub dont_die {
+    open(my $fd, '<', 'random-file');
+    return $fd;
+}
+
+1;
index a55164b..530c781 100644 (file)
@@ -17,7 +17,7 @@ package pujHa'ghach;
 use strict;
 use warnings;
 
-use base qw(autodie);
+use parent qw(autodie);
 
 sub exception_class {
     return "pujHa'ghach::Dotlh";      # Dotlh - status
index c7bbf8b..2fbf3db 100644 (file)
@@ -9,7 +9,7 @@ package pujHa'ghach::Dotlh;
 use strict;
 use warnings;
 
-use base qw(autodie::exception);
+use parent qw(autodie::exception);
 
 sub stringify {
     my ($this) = @_;
diff --git a/cpan/autodie/t/read.t b/cpan/autodie/t/read.t
new file mode 100644 (file)
index 0000000..152bf31
--- /dev/null
@@ -0,0 +1,19 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use autodie;
+
+use Test::More tests => 2;
+
+my $buffer = 'should-not-appear';
+eval {
+    read('BOFH', $buffer, 1024);
+};
+like($@, qr/Can't read\(BOFH, <BUFFER>, 1024\)/,
+     'read should not show the buffer');
+eval {
+    read('BOFH', $buffer, 1024, 5);
+};
+like($@, qr/Can't read\(BOFH, <BUFFER>, 1024, 5\)/,
+     'read should not show the buffer');
index 7af7226..a2acfeb 100644 (file)
@@ -11,7 +11,7 @@ my ($truncate_status, $tmpfh, $tmpfile);
 
 # Some systems have a screwy tempfile. We don't run our tests there.
 eval {
-    ($tmpfh, $tmpfile) = tempfile();
+    ($tmpfh, $tmpfile) = tempfile(UNLINK => 1);
 };
 
 if ($@ or !defined $tmpfh) {
index d328853..5ccd5e3 100644 (file)
@@ -9,7 +9,6 @@ use autodie;
 
 use Fcntl;
 use File::Temp;
-
 use Test::More;
 
 if( $] < '5.01000' ) {
@@ -73,6 +72,15 @@ else {
         my @layers = PerlIO::get_layers($fh);
         ok( (grep { $_ eq 'utf8' } @layers), "open implicit read honors open pragma" ) or diag join ", ", @layers;
     }
+
+    # raw
+    {
+        open my $fh, ">:raw", $file;
+
+        my @layers = PerlIO::get_layers($fh);
+
+        ok( !(grep { $_ eq 'utf8' } @layers), 'open pragma is not used if raw is specified' ) or diag join ", ", @layers;
+    }
 }
 
 
index a729129..7accf05 100644 (file)
@@ -1,6 +1,11 @@
 #!/usr/bin/perl -w
 use strict;
-use Test::More tests => 4;
+use Test::More;
+
+if (not $ENV{RELEASE_TESTING}) {
+    plan( skip_all => 'Release test.  Set $ENV{RELEASE_TESTING} to true to run.');
+}
+plan tests => 8;
 
 # For the moment, we'd like all our versions to be the same.
 # In order to play nicely with some code scanners, they need to be
@@ -13,6 +18,10 @@ require autodie::hints;
 require autodie::exception;
 require autodie::exception::system;
 
+ok(defined($autodie::VERSION), 'autodie has a version');
+ok(defined($autodie::exception::VERSION), 'autodie::exception has a version');
+ok(defined($autodie::hints::VERSION), 'autodie::hints has a version');
+ok(defined($Fatal::VERSION), 'Fatal has a version');
 is($Fatal::VERSION, $autodie::VERSION);
 is($autodie::VERSION, $autodie::exception::VERSION);
 is($autodie::exception::VERSION, $autodie::exception::system::VERSION);
index 2a01351..4860a49 100644 (file)
@@ -21,7 +21,9 @@ my $version = $autodie::VERSION;
 
 SKIP: {
 
-    if ($version =~ /_/) { skip "Tag test skipped on dev release", 1 }
+    if (not defined($version) or $version =~ /_/) {
+       skip "Tag test skipped on dev release", 1;
+    }
 
     # Expanding our current version should work!
     eval { my $foo = autodie->_expand_tag(":$version"); };