|
Packit |
6427f8 |
#!/usr/bin/perl -w
|
|
Packit |
6427f8 |
use strict;
|
|
Packit |
6427f8 |
use warnings;
|
|
Packit |
6427f8 |
use autodie::hints;
|
|
Packit |
6427f8 |
use Test::More;
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use constant PERL510 => ( $] >= 5.010 );
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
BEGIN {
|
|
Packit |
6427f8 |
if (not PERL510) {
|
|
Packit |
6427f8 |
plan skip_all => "Only subroutine hints supported in 5.8.x";
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
else {
|
|
Packit |
6427f8 |
plan 'no_plan';
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
use FindBin;
|
|
Packit |
6427f8 |
use lib "$FindBin::Bin/lib";
|
|
Packit |
6427f8 |
use Hints_pod_examples qw(
|
|
Packit |
6427f8 |
undef_scalar false_scalar zero_scalar empty_list default_list
|
|
Packit |
6427f8 |
empty_or_false_list undef_n_error_list foo re_fail bar
|
|
Packit |
6427f8 |
think_positive my_system
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
use autodie qw( !
|
|
Packit |
6427f8 |
undef_scalar false_scalar zero_scalar empty_list default_list
|
|
Packit |
6427f8 |
empty_or_false_list undef_n_error_list foo re_fail bar
|
|
Packit |
6427f8 |
think_positive my_system
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
my %scalar_tests = (
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# Test code # Exception expected?
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'undef_scalar()' => 1,
|
|
Packit |
6427f8 |
'undef_scalar(1)', => 0,
|
|
Packit |
6427f8 |
'undef_scalar(0)', => 0,
|
|
Packit |
6427f8 |
'undef_scalar("")', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'false_scalar(0)', => 1,
|
|
Packit |
6427f8 |
'false_scalar()', => 1,
|
|
Packit |
6427f8 |
'false_scalar(undef)', => 1,
|
|
Packit |
6427f8 |
'false_scalar("")', => 1,
|
|
Packit |
6427f8 |
'false_scalar(1)', => 0,
|
|
Packit |
6427f8 |
'false_scalar("1")', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'zero_scalar("0")', => 1,
|
|
Packit |
6427f8 |
'zero_scalar(0)', => 1,
|
|
Packit |
6427f8 |
'zero_scalar(1)', => 0,
|
|
Packit |
6427f8 |
'zero_scalar(undef)', => 0,
|
|
Packit |
6427f8 |
'zero_scalar("")', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'foo(0)', => 1,
|
|
Packit |
6427f8 |
'foo(undef)', => 0,
|
|
Packit |
6427f8 |
'foo(1)', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'bar(0)', => 1,
|
|
Packit |
6427f8 |
'bar(undef)', => 0,
|
|
Packit |
6427f8 |
'bar(1)', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
're_fail(-1)', => 0,
|
|
Packit |
6427f8 |
're_fail("FAIL")', => 1,
|
|
Packit |
6427f8 |
're_fail("_FAIL")', => 1,
|
|
Packit |
6427f8 |
're_fail("_fail")', => 0,
|
|
Packit |
6427f8 |
're_fail("fail")', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'think_positive(-1)' => 1,
|
|
Packit |
6427f8 |
'think_positive(-2)' => 1,
|
|
Packit |
6427f8 |
'think_positive(0)' => 0,
|
|
Packit |
6427f8 |
'think_positive(1)' => 0,
|
|
Packit |
6427f8 |
'think_positive(2)' => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'my_system(1)' => 1,
|
|
Packit |
6427f8 |
'my_system(2)' => 1,
|
|
Packit |
6427f8 |
'my_system(0)' => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
my %list_tests = (
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'empty_list()', => 1,
|
|
Packit |
6427f8 |
'empty_list(())', => 1,
|
|
Packit |
6427f8 |
'empty_list([])', => 0,
|
|
Packit |
6427f8 |
'empty_list(0)', => 0,
|
|
Packit |
6427f8 |
'empty_list("")', => 0,
|
|
Packit |
6427f8 |
'empty_list(undef)', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'default_list()', => 1,
|
|
Packit |
6427f8 |
'default_list(0)', => 0,
|
|
Packit |
6427f8 |
'default_list("")', => 0,
|
|
Packit |
6427f8 |
'default_list(undef)', => 1,
|
|
Packit |
6427f8 |
'default_list(1)', => 0,
|
|
Packit |
6427f8 |
'default_list("str")', => 0,
|
|
Packit |
6427f8 |
'default_list(1, 2)', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'empty_or_false_list()', => 1,
|
|
Packit |
6427f8 |
'empty_or_false_list(())', => 1,
|
|
Packit |
6427f8 |
'empty_or_false_list(0)', => 1,
|
|
Packit |
6427f8 |
'empty_or_false_list(undef)',=> 1,
|
|
Packit |
6427f8 |
'empty_or_false_list("")', => 1,
|
|
Packit |
6427f8 |
'empty_or_false_list("0")', => 1,
|
|
Packit |
6427f8 |
'empty_or_false_list(1,2)', => 0,
|
|
Packit |
6427f8 |
'empty_or_false_list("a")', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'undef_n_error_list(undef, 1)' => 1,
|
|
Packit |
6427f8 |
'undef_n_error_list(undef, "a")' => 1,
|
|
Packit |
6427f8 |
'undef_n_error_list()' => 0,
|
|
Packit |
6427f8 |
'undef_n_error_list(0, 1)' => 0,
|
|
Packit |
6427f8 |
'undef_n_error_list("", 1)' => 0,
|
|
Packit |
6427f8 |
'undef_n_error_list(1)' => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'foo(0)', => 1,
|
|
Packit |
6427f8 |
'foo(undef)', => 0,
|
|
Packit |
6427f8 |
'foo(1)', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'bar(0)', => 1,
|
|
Packit |
6427f8 |
'bar(undef)', => 0,
|
|
Packit |
6427f8 |
'bar(1)', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
're_fail(-1)', => 1,
|
|
Packit |
6427f8 |
're_fail("FAIL")', => 0,
|
|
Packit |
6427f8 |
're_fail("_FAIL")', => 0,
|
|
Packit |
6427f8 |
're_fail("_fail")', => 0,
|
|
Packit |
6427f8 |
're_fail("fail")', => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'think_positive(-1)' => 1,
|
|
Packit |
6427f8 |
'think_positive(-2)' => 1,
|
|
Packit |
6427f8 |
'think_positive(0)' => 0,
|
|
Packit |
6427f8 |
'think_positive(1)' => 0,
|
|
Packit |
6427f8 |
'think_positive(2)' => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
'my_system(1)' => 1,
|
|
Packit |
6427f8 |
'my_system(2)' => 1,
|
|
Packit |
6427f8 |
'my_system(0)' => 0,
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# On Perl 5.8, autodie doesn't correctly propagate into string evals.
|
|
Packit |
6427f8 |
# The following snippet forces the use of autodie inside the eval if
|
|
Packit |
6427f8 |
# we really really have to. For 5.10+, we don't want to include this
|
|
Packit |
6427f8 |
# fix, because the tests will act as a canary if we screw up string
|
|
Packit |
6427f8 |
# eval propagation.
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
my $perl58_fix = (
|
|
Packit |
6427f8 |
PERL510 ?
|
|
Packit |
6427f8 |
q{} :
|
|
Packit |
6427f8 |
q{use autodie qw(
|
|
Packit |
6427f8 |
undef_scalar false_scalar zero_scalar empty_list default_list
|
|
Packit |
6427f8 |
empty_or_false_list undef_n_error_list foo re_fail bar
|
|
Packit |
6427f8 |
think_positive my_system bizarro_system
|
|
Packit |
6427f8 |
);}
|
|
Packit |
6427f8 |
);
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# Some of the tests provide different hints for scalar or list context
|
|
Packit |
6427f8 |
# NOTE: these tests are sensitive to order (not sure why) therefore
|
|
Packit |
6427f8 |
# this loop must use a sorted list of keys . Otherwise there is an occasional
|
|
Packit |
6427f8 |
# failure like this:
|
|
Packit |
6427f8 |
#
|
|
Packit |
6427f8 |
# Failed test 'scalar test - zero_scalar("")'
|
|
Packit |
6427f8 |
# at cpan/autodie/t/hints_pod_examples.t line 168.
|
|
Packit |
6427f8 |
# got: 'Can't zero_scalar(''): at cpan/autodie/t/hints_pod_examples.t line 157
|
|
Packit |
6427f8 |
# '
|
|
Packit |
6427f8 |
# expected: ''
|
|
Packit |
6427f8 |
#
|
|
Packit |
6427f8 |
#
|
|
Packit |
6427f8 |
# my $scalar = zero_scalar("");
|
|
Packit |
6427f8 |
# 1;
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
foreach my $test (sort keys %scalar_tests) {
|
|
Packit |
6427f8 |
my $exception_expected= $scalar_tests{$test};
|
|
Packit |
6427f8 |
my $ok= eval(my $code= "
|
|
Packit |
6427f8 |
$perl58_fix
|
|
Packit |
6427f8 |
my \$scalar = $test;
|
|
Packit |
6427f8 |
1;
|
|
Packit |
6427f8 |
");
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
if ($exception_expected) {
|
|
Packit |
6427f8 |
isnt($ok ? "" : "$@", "", "scalar test - $test")
|
|
Packit |
6427f8 |
or diag($code);
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
else {
|
|
Packit |
6427f8 |
is($ok ? "" : "$@", "", "scalar test - $test")
|
|
Packit |
6427f8 |
or diag($code);
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
# this set of test is not *known* to be order dependent however we sort it anyway out caution
|
|
Packit |
6427f8 |
foreach my $test (sort keys %list_tests) {
|
|
Packit |
6427f8 |
my $exception_expected= $list_tests{$test};
|
|
Packit |
6427f8 |
eval "
|
|
Packit |
6427f8 |
$perl58_fix
|
|
Packit |
6427f8 |
my \@array = $test;
|
|
Packit |
6427f8 |
";
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
if ($exception_expected) {
|
|
Packit |
6427f8 |
isnt("$@", "", "array test - $test");
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
else {
|
|
Packit |
6427f8 |
is($@, "", "array test - $test");
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
}
|
|
Packit |
6427f8 |
|
|
Packit |
6427f8 |
1;
|