#!/usr/bin/perl -Tw use Test::More tests => 16; use_ok "UNIVERSAL::require"; use lib qw(t); is( Dummy->require, 23, 'require()' ); is( $UNIVERSAL::require::ERROR, '', ' $ERROR empty' ); ok( $Dummy::VERSION, ' $VERSION ok' ); { $SIG{__WARN__} = sub { warn @_ unless $_[0] =~ /^Subroutine \w+ redefined/ }; delete $INC{'Dummy.pm'}; is( Dummy->require(0.4), 23, 'require($version)' ); is( $UNIVERSAL::require::ERROR, '', ' $ERROR empty' ); delete $INC{'Dummy.pm'}; ok( !Dummy->require(1.0), 'require($version) fail' ); like( $UNIVERSAL::require::ERROR, '/^Dummy version 1.* required--this is only version 0.5/' ); } { my $warning = ''; local $SIG{__WARN__} = sub { $warning = join '', @_ }; eval 'require UNIVERSAL'; is( $warning, '', 'loading UNIVERSAL doesnt interfere' ); } my $evil = "Dummy; Test::More::fail('this should never be called');"; ok !$evil->require; isnt $@, ''; # make sure $@ and ERROR are set appropriately { local $@; ok( !$@, '$@ unset' ); # do a failed eval a before we try to load Dummy again eval { die $$ }; like( $@, qr/$$/, ' $@ set to ' . $$ ); ok( Dummy->require, " ->require()" ); ok( !$@, ' $@ unset ' . $@ ); ok( !$UNIVERSAL::require::ERROR, ' $ERROR unset ' ); }