Blame t/hints_pod_examples.t

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;