100 lines
3.5 KiB
Perl
100 lines
3.5 KiB
Perl
#!/usr/bin/env perl
|
|
## no critic (RequireLocalizedPunctuationVars)
|
|
|
|
use v5.14;
|
|
use warnings
|
|
FATAL => qw(all),
|
|
NONFATAL => qw(deprecated exec internal malloc newline once portable redefine recursion uninitialized);
|
|
|
|
use File::chdir;
|
|
|
|
use Test::Expander -tempdir => {}, -srand => time;
|
|
|
|
can_ok($CLASS, $METHOD);
|
|
|
|
ok(-d $TEMP_DIR, "temporary directory '$TEMP_DIR' created");
|
|
|
|
my $classPath = $CLASS =~ s{::}{/}gr;
|
|
my $testPath = path($TEMP_DIR)->child('t');
|
|
$testPath->child($classPath)->mkpath;
|
|
|
|
{
|
|
local $CWD = $testPath->parent->stringify; ## no critic (ProhibitLocalVars)
|
|
|
|
my $testFile = path('t')->child($classPath)->child($METHOD . '.t')->stringify;
|
|
my $envFile = path('t')->child($classPath)->child($METHOD . '.env');
|
|
|
|
is(Test2::Plugin::SRand->from, 'import arg', "random seed is supplied as 'time'");
|
|
|
|
subtest 'env variable filled from a variable' => sub {
|
|
our $var = 'abc';
|
|
my $name = 'ABC';
|
|
my $value = '$' . __PACKAGE__ . '::var';
|
|
$envFile->spew("$name = $value\nJust a comment line");
|
|
%ENV = (xxx => 'yyy');
|
|
|
|
ok(lives { $METHOD_REF->($METHOD, $CLASS, $testFile) }, 'successfully executed');
|
|
is(\%ENV, { $name => lc($name) }, "'%ENV' has the expected content");
|
|
};
|
|
|
|
subtest 'env variable filled by a self-implemented sub' => sub {
|
|
my $name = 'ABC';
|
|
my $value = __PACKAGE__ . "::testEnv(lc('$name'))";
|
|
$envFile->spew("$name = $value");
|
|
%ENV = (xxx => 'yyy');
|
|
|
|
ok(lives { $METHOD_REF->($METHOD, $CLASS, $testFile) }, 'successfully executed');
|
|
is(\%ENV, { $name => lc($name) }, "'%ENV' has the expected content");
|
|
};
|
|
|
|
subtest "env variable filled by a 'File::Temp::tempdir'" => sub {
|
|
my $name = 'ABC';
|
|
my $value = 'File::Temp::tempdir';
|
|
$envFile->spew("$name = $value");
|
|
%ENV = (xxx => 'yyy');
|
|
|
|
ok(lives { $METHOD_REF->($METHOD, $CLASS, $testFile) }, 'successfully executed');
|
|
is([ keys(%ENV) ], [ $name ], "'%ENV' has the expected keys");
|
|
ok(-d $ENV{$name}, 'temporary directory exists');
|
|
};
|
|
|
|
subtest 'env file does not exist' => sub {
|
|
$envFile->remove;
|
|
%ENV = (xxx => 'yyy');
|
|
|
|
ok(lives { $METHOD_REF->($METHOD, $CLASS, $testFile) }, 'successfully executed');
|
|
is(\%ENV, { xxx => 'yyy' }, "'%ENV' remained unchanged");
|
|
};
|
|
|
|
subtest 'directory structure does not correspond to class hierarchy' => sub {
|
|
$envFile->remove;
|
|
%ENV = (xxx => 'yyy');
|
|
|
|
ok(lives { $METHOD_REF->($METHOD, 'ABC::' . $CLASS, $testFile) }, 'successfully executed');
|
|
is(\%ENV, { xxx => 'yyy' }, "'%ENV' remained unchanged");
|
|
};
|
|
|
|
subtest 'env files exist on multiple levels' => sub {
|
|
path($envFile->parent . '.env')->spew("A = '1'\nB = '2'");
|
|
path($envFile->parent->parent . '.env')->spew("C = '0'");
|
|
$envFile->spew("C = '3'");
|
|
%ENV = (xxx => 'yyy');
|
|
|
|
local $CWD = $TEMP_DIR; ## no critic (ProhibitLocalVars)
|
|
ok(lives { $METHOD_REF->($METHOD, $CLASS, $testFile) }, 'successfully executed');
|
|
is(\%ENV, { A => '1', B => '2', C => '3' }, "'%ENV' has the expected content");
|
|
};
|
|
|
|
subtest 'env file invalid' => sub {
|
|
my $name = 'ABC';
|
|
my $value = 'abc->';
|
|
$envFile->spew("$name = $value");
|
|
|
|
like(dies { $METHOD_REF->($METHOD, $CLASS, $testFile) }, qr/syntax error/, 'expected exception raised');
|
|
};
|
|
}
|
|
|
|
done_testing();
|
|
|
|
sub testEnv { return $_[0] } ## no critic (RequireArgUnpacking)
|