Blame t/16_invocant.t

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
}