#!/usr/bin/perl -w
use strict;
use constant NO_SUCH_FILE => 'this_file_had_so_better_not_be_here';
use Test::More tests => 19;
{
use autodie qw(open);
eval { open(my $fh, '<', NO_SUCH_FILE); };
like($@,qr{Can't open},"autodie qw(open) in lexical scope");
no autodie qw(open);
eval { open(my $fh, '<', NO_SUCH_FILE); };
is($@,"","no autodie qw(open) in lexical scope");
use autodie qw(open);
eval { open(my $fh, '<', NO_SUCH_FILE); };
like($@,qr{Can't open},"autodie qw(open) in lexical scope 2");
no autodie; # Should turn off all autodying subs
eval { open(my $fh, '<', NO_SUCH_FILE); };
is($@,"","no autodie in lexical scope 2");
# Turn our pragma on one last time, so we can verify that
# falling out of this block reverts it back to previous
# behaviour.
use autodie qw(open);
eval { open(my $fh, '<', NO_SUCH_FILE); };
like($@,qr{Can't open},"autodie qw(open) in lexical scope 3");
}
eval { open(my $fh, '<', NO_SUCH_FILE); };
is($@,"","autodie open outside of lexical scope");
eval {
use autodie; # Should turn on everything
open(my $fh, '<', NO_SUCH_FILE);
};
like($@, qr{Can't open}, "vanilla use autodie turns on everything.");
eval { open(my $fh, '<', NO_SUCH_FILE); };
is($@,"","vanilla autodie cleans up");
{
use autodie qw(:io);
eval { open(my $fh, '<', NO_SUCH_FILE); };
like($@,qr{Can't open},"autodie q(:io) makes autodying open");
no autodie qw(:io);
eval { open(my $fh, '<', NO_SUCH_FILE); };
is($@,"", "no autodie qw(:io) disabled autodying open");
}
{
package Testing_autodie;
use Test::More;
use constant NO_SUCH_FILE => ::NO_SUCH_FILE();
use Fatal qw(open);
eval { open(my $fh, '<', NO_SUCH_FILE); };
like($@, qr{Can't open}, "Package fatal working");
is(ref $@,"","Old Fatal throws strings");
{
use autodie qw(open);
ok(1,"use autodie allowed with Fatal");
eval { open(my $fh, '<', NO_SUCH_FILE); };
like($@, qr{Can't open}, "autodie and Fatal works");
isa_ok($@, "autodie::exception"); # autodie throws real exceptions
}
eval { open(my $fh, '<', NO_SUCH_FILE); };
like($@, qr{Can't open}, "Package fatal working after autodie");
is(ref $@,"","Old Fatal throws strings after autodie");
eval " no autodie qw(open); ";
ok($@,"no autodie on Fataled sub an error.");
eval "
no autodie qw(close);
use Fatal 'close';
";
like($@, qr{not allowed}, "Using fatal after autodie is an error.");
}