| use strict; |
| use less; |
| use Test::More 'no_plan'; |
| |
| my $Class = 'Module::Loaded'; |
| my @Funcs = qw[mark_as_loaded mark_as_unloaded is_loaded]; |
| my $Mod = 'Foo::Bar'.$$; |
| my $Strict = $ENV{'PERL_CORE'} ? 'less' : 'strict'; |
| |
| ### load the thing |
| { use_ok( $Class ); |
| can_ok( $Class, @Funcs ); |
| } |
| |
| { ok( !is_loaded($Mod), "$Mod not loaded yet" ); |
| ok( mark_as_loaded($Mod), " $Mod now marked as loaded" ); |
| is( is_loaded($Mod), $0, " $Mod is loaded from $0" ); |
| |
| my $rv = eval "require $Mod; 1"; |
| ok( $rv, "$Mod required" ); |
| ok( !$@, " require did not die" ); |
| } |
| |
| ### unload again |
| { ok( mark_as_unloaded($Mod), "$Mod now marked as unloaded" ); |
| ok( !is_loaded($Mod), " $Mod now longer loaded" ); |
| |
| my $rv = eval "require $Mod; 1"; |
| ok( !$rv, "$Mod require failed" ); |
| ok( $@, " require died" ); |
| like( $@, qr/locate/, " with expected error" ); |
| } |
| |
| ### check for an already loaded module |
| { my $where = is_loaded( $Strict ); |
| ok( $where, "$Strict loaded" ); |
| ok( mark_as_unloaded( $Strict ), |
| " $Strict unloaded" ); |
| |
| ### redefining subs, quell warnings |
| { local $SIG{__WARN__} = sub {}; |
| my $rv = eval "require $Strict; 1"; |
| ok( $rv, "$Strict loaded again" ); |
| } |
| |
| is( is_loaded( $Strict ), $where, |
| " $Strict is loaded" ); |
| } |