1use strict; 2use less; 3use Test::More 'no_plan'; 4 5my $Class = 'Module::Loaded'; 6my @Funcs = qw[mark_as_loaded mark_as_unloaded is_loaded]; 7my $Mod = 'Foo::Bar'.$$; 8my $Strict = $ENV{'PERL_CORE'} ? 'less' : 'strict'; 9 10### load the thing 11{ use_ok( $Class ); 12 can_ok( $Class, @Funcs ); 13} 14 15{ ok( !is_loaded($Mod), "$Mod not loaded yet" ); 16 ok( mark_as_loaded($Mod), " $Mod now marked as loaded" ); 17 is( is_loaded($Mod), $0, " $Mod is loaded from $0" ); 18 19 my $rv = eval "require $Mod; 1"; 20 ok( $rv, "$Mod required" ); 21 ok( !$@, " require did not die" ); 22} 23 24### unload again 25{ ok( mark_as_unloaded($Mod), "$Mod now marked as unloaded" ); 26 ok( !is_loaded($Mod), " $Mod now longer loaded" ); 27 28 my $rv = eval "require $Mod; 1"; 29 ok( !$rv, "$Mod require failed" ); 30 ok( $@, " require died" ); 31 like( $@, qr/locate/, " with expected error" ); 32} 33 34### check for an already loaded module 35{ my $where = is_loaded( $Strict ); 36 ok( $where, "$Strict loaded" ); 37 ok( mark_as_unloaded( $Strict ), 38 " $Strict unloaded" ); 39 40 ### redefining subs, quell warnings 41 { local $SIG{__WARN__} = sub {}; 42 my $rv = eval "require $Strict; 1"; 43 ok( $rv, "$Strict loaded again" ); 44 } 45 46 is( is_loaded( $Strict ), $where, 47 " $Strict is loaded" ); 48} 49