1#!/usr/bin/perl -w
2use strict;
3
4use Test::More 'no_plan';
5
6sub mytest {
7    return $_[0];
8}
9
10is(mytest(q{foo}),q{foo},"Mytest returns input");
11
12my $return = eval { mytest(undef); };
13
14ok(!defined($return), "mytest returns undef without autodie");
15is($@,"","Mytest doesn't throw an exception without autodie");
16
17$return = eval {
18    use autodie qw(mytest);
19
20    mytest('foo');
21};
22
23is($return,'foo',"Mytest returns input with autodie");
24is($@,"","No error should be thrown");
25
26$return = eval {
27    use autodie qw(mytest);
28
29    mytest(undef);
30};
31
32isa_ok($@,'autodie::exception',"autodie mytest/undef throws exception");
33
34# We set initial values here because we're expecting $data to be
35# changed to undef later on.   Having it as undef to begin with means
36# we can't see mytest(undef) working correctly.
37
38my ($data, $data2) = (1,1);
39
40eval {
41    use autodie qw(mytest);
42
43    {
44        no autodie qw(mytest);
45
46        $data  = mytest(undef);
47        $data2 = mytest('foo');
48    }
49};
50
51is($@,"","no autodie can counter use autodie for user subs");
52ok(!defined($data), "mytest(undef) should return undef");
53is($data2, "foo", "mytest(foo) should return foo");
54
55eval {
56    mytest(undef);
57};
58
59is($@,"","No lingering failure effects");
60
61$return = eval {
62    mytest("bar");
63};
64
65is($return,"bar","No lingering return effects");
66