App-Env
view release on metacpan or search on metacpan
use Test2::V0;
use Test::Lib;
use App::Env;
use App::Env::Site1::App1;
use App::Env::Site1::App2;
# cache initial directory
my %InitialEnv = %{ App::Env->new( 'null' ) };
sub reset_env {
%ENV = %InitialEnv;
App::Env::Site1::App1::reset();
App::Env::Site1::App2::reset();
for my $site ( undef, qw[ Site1 Sitee2 ] ) {
my @site = defined $site ? ( Site => $site ) : ();
App::Env::uncache( App => 'App1', @site );
App::Env::uncache( App => 'App2', @site );
}
}
#############################################################
# check simple caching and uncaching
subtest 'Simple' => sub {
reset_env;
is( App::Env->new( 'App1' )->env->{Site1_App1}, 1, 'import func 1, cache on' );
is( App::Env->new( 'App1' )->env->{Site1_App1}, 1, 'import func 2, cache on' );
App::Env::uncache( App => 'App1' );
is( App::Env->new( 'App1' )->env->{Site1_App1}, 2, 'import func 2, deleted cache' );
is( App::Env->new( 'App1' )->env->{Site1_App1}, 2, 'import func 2, cache on' );
# check that correct site is uncached
is( App::Env->new( 'App1', { Site => 'Site2' } )->env( 'Site2_App1' ), 1, 'import site2' );
App::Env::uncache( App => 'App1', Site => 'Site2' );
is( App::Env->new( 'App1' )->env->{Site1_App1}, 2, 'cache site1 after uncache of site 2' );
};
#############################################################
subtest 'CacheID' => sub {
reset_env;
is( App::Env->new( 'App1' )->env->{Site1_App1}, 1, 'import App1, id => default' );
is( App::Env->new( 'App1', { CacheID => 'foo' } )->env->{Site1_App1},
2, 'import App1, id => "foo"' );
# verify that the old one is still cached.
is( App::Env->new( 'App1' )->env->{Site1_App1}, 1, 're-import App1, id => default' );
# and now try for foo again
is( App::Env->new( 'App1', { CacheID => 'foo' } )->env->{Site1_App1},
2, 're-import App1, id => "foo"' );
# merge. should pull in fresh App1
{
my $env = App::Env->new( 'App1', 'App2' );
is( $env->{Site1_App1}, 3, 'merge App1 & App2, id => default; check App1' );
is( $env->{Site1_App2}, 1, 'merge App1 & App2, id => default; check App2' );
}
# App1 cache should be untouched
is( App::Env->new( 'App1' )->env->{Site1_App1}, 1, 're-import App1, id => default' );
# App2 hasn't been cached, so should increment
is( App::Env->new( 'App2' )->env->{Site1_App2}, 2, 'import App2, id => default' );
# uncache App2 and import it to increment the counter,
# then reimport merge to see if it's being cached
App::Env::uncache( App => 'App2' );
is( App::Env->new( 'App2' )->env->{Site1_App2}, 3, 'uncache App2; import App2, id => default' );
# now check merge. should be same as above as it was cached
{
my $env = App::Env->new( 'App1', 'App2' );
ok( $env->{Site1_App1} == 3, 're-import App1 & App2, id => default; check App1' );
ok( $env->{Site1_App2} == 1, 're-import App1 & App2, id => default; check App2' );
}
# now explicitly delete CacheID foo, and import it to increment counter
{
App::Env::uncache( { CacheID => 'foo' } );
my $env = App::Env->new( 'App1', { CacheID => 'foo' } );
is( $env->{Site1_App1}, 4, 'uncache App1/"foo", import App1/"foo"' );
}
App::Env::uncache( All => 1 );
ok( App::Env::_Util::is_CacheEmpty, 'uncache all' );
};
#############################################################
# check Object caching
subtest 'Object caching' => sub {
reset_env;
my ( $obj1, $obj2 );
# get new App1
$obj1 = App::Env->new( 'App1' );
is( $obj1->env->{Site1_App1}, 1, 'method 1, cache on' );
# make sure that next attempt is cached
$obj2 = App::Env->new( 'App1' );
( run in 1.197 second using v1.01-cache-2.11-cpan-d8267643d1d )