|
Packit |
37d9e7 |
#!/usr/bin/perl
|
|
Packit |
37d9e7 |
|
|
Packit |
37d9e7 |
use strict;
|
|
Packit |
37d9e7 |
BEGIN {
|
|
Packit |
37d9e7 |
$| = 1;
|
|
Packit |
37d9e7 |
$^W = 1;
|
|
Packit |
37d9e7 |
$ENV{PERL_PARAMS_UTIL_PP} ||= 1;
|
|
Packit |
37d9e7 |
}
|
|
Packit |
37d9e7 |
|
|
Packit |
37d9e7 |
use Test::More tests => 11;
|
|
Packit |
37d9e7 |
use File::Spec::Functions ':ALL';
|
|
Packit |
37d9e7 |
BEGIN {
|
|
Packit |
37d9e7 |
use_ok('Params::Util', qw(_INVOCANT));
|
|
Packit |
37d9e7 |
}
|
|
Packit |
37d9e7 |
|
|
Packit |
37d9e7 |
my $object = bless \do { my $i } => 'Params::Util::Test::Bogus::Whatever';
|
|
Packit |
37d9e7 |
my $false_obj1 = bless \do { my $i } => 0;
|
|
Packit |
37d9e7 |
my $false_obj2 = bless \do { my $i } => "\0";
|
|
Packit |
37d9e7 |
my $tied = tie my $x, 'Params::Util::Test::_INVOCANT::Tied';
|
|
Packit |
37d9e7 |
my $unpkg = 'Params::Util::Test::_INVOCANT::Fake';
|
|
Packit |
37d9e7 |
my $pkg = 'Params::Util::Test::_INVOCANT::Real'; eval "package $pkg;"; ## no critic
|
|
Packit |
37d9e7 |
|
|
Packit |
37d9e7 |
my @data = (# I
|
|
Packit |
37d9e7 |
[ undef , 0, 'undef' ],
|
|
Packit |
37d9e7 |
[ 1000 => 0, '1000' ],
|
|
Packit |
37d9e7 |
[ $unpkg => 1, qq("$unpkg") ],
|
|
Packit |
37d9e7 |
[ $pkg => 1, qq("$pkg") ],
|
|
Packit |
37d9e7 |
[ [] => 0, '[]' ],
|
|
Packit |
37d9e7 |
[ {} => 0, '{}' ],
|
|
Packit |
37d9e7 |
[ $object => 1, 'blessed reference' ],
|
|
Packit |
37d9e7 |
[ $false_obj1 => 1, 'blessed reference' ],
|
|
Packit |
37d9e7 |
[ $tied => 1, 'tied value' ],
|
|
Packit |
37d9e7 |
);
|
|
Packit |
37d9e7 |
|
|
Packit |
37d9e7 |
for my $datum (@data) {
|
|
Packit |
37d9e7 |
is(
|
|
Packit |
37d9e7 |
_INVOCANT($datum->[0]) ? 1 : 0,
|
|
Packit |
37d9e7 |
$datum->[1],
|
|
Packit |
37d9e7 |
"$datum->[2] " . ($datum->[1] ? 'is' : "isn't") . " _IN"
|
|
Packit |
37d9e7 |
);
|
|
Packit |
37d9e7 |
}
|
|
Packit |
37d9e7 |
|
|
Packit |
37d9e7 |
# Skip the most evil test except on automated testing, because it
|
|
Packit |
37d9e7 |
# fails on at least one common production OS (RedHat Enterprise Linux 4)
|
|
Packit |
37d9e7 |
# and the test case should be practically impossible to encounter
|
|
Packit |
37d9e7 |
# in real life. The damage the bug could cause users in production is
|
|
Packit |
37d9e7 |
# far lower than the damage caused by Params::Util failing to install.
|
|
Packit |
37d9e7 |
SKIP: {
|
|
Packit |
37d9e7 |
unless ( $ENV{AUTOMATED_TESTING} ) {
|
|
Packit |
37d9e7 |
skip("Skipping nasty test unless AUTOMATED_TESTING", 1);
|
|
Packit |
37d9e7 |
}
|
|
Packit |
37d9e7 |
ok( !! _INVOCANT($false_obj2), 'Testing null class as an invocant' );
|
|
Packit |
37d9e7 |
}
|
|
Packit |
37d9e7 |
|
|
Packit |
37d9e7 |
package Params::Util::Test::_INVOCANT::Tied;
|
|
Packit |
37d9e7 |
sub TIESCALAR {
|
|
Packit |
37d9e7 |
my ($class, $value) = @_;
|
|
Packit |
37d9e7 |
return bless \$value => $class;
|
|
Packit |
37d9e7 |
}
|