Env-Modify
view release on metacpan or search on metacpan
{
local $Env::Modify::SHELL = 'csh';
my $c0 = eval { system("$bin_true") };
if ($@) {
diag "Think csh status is broken in Shell-GetEnv $Shell::GetEnv::VERSION: $@";
$skip_csh = "can't retrieve csh status in Shell-GetEnv $Shell::GetEnv::VERSION";
chomp($skip_csh);
}
}
open SOURCE,'>','my_setenv.sh';
print SOURCE "setenv foo bar\n";
print SOURCE "setenv baz quux\n";
print SOURCE "setenv abc 123\n";
close SOURCE;
for my $sh (qw(csh tcsh)) {
local %ENV = ();
local $Env::Modify::SHELL = $sh;
SKIP: {
if ($sh eq 'csh' && $skip_csh) {
skip "$skip_csh. Skipping csh", 5;
}
# this can fail on csh that require you to say "setenv foo $status"
# instead of "setenv foo $?". Fix needed in Shell::GetEnv
my $c0 = eval { system("$bin_true") };
if ($@ && $@ =~ /error opening pipe/) {
skip "shell $sh not available for testing", 5;
}
ok($c0 == 0, "/bin/true returns true in $sh");
no warnings 'uninitialized';
ok($ENV{foo} eq '' && $ENV{baz} eq '' && $ENV{'abc'} eq '',
'initial environment is clean');
my $c1 = eval { source("my_setenv.sh") };
if ($@) {
diag $@;
ok(0, "source() return true status in $sh");
skip "source() did not return true in $sh", 2;
}
ok($c1 == 0, "source() returned true status in $sh");
ok($ENV{foo} eq 'bar', "export in $sh source successful");
ok($ENV{baz} eq 'quux' && $ENV{abc} eq '123',
"late export in $sh source successful");
}
}
unlink "my_setenv.sh";
SKIP:
{
local $Env::Modify::SHELL = 'dash';
$ENV{why} = "I don't know";
my $c0 = eval { system("export why=because") };
if ($@ && $@ =~ /error (opening|closing) pipe/) {
skip "dash shell not available for test", 4;
}
ok($ENV{why} eq 'because', 'dash shell - export');
ok($c0 == 0, 'dash returned true');
my $c1 = system("setenv why tomorrow");
ok($ENV{why} ne 'tomorrow', 'dash shell does not recognize setenv');
ok($c1 != 0, 'dash returned false');
}
SKIP:
{
local $Env::Modify::SHELL = 'csh';
$ENV{cat} = 'dog';
$ENV{turtle} = 'frog';
# this can fail on csh that require you to say "setenv foo $status"
# instead of "setenv foo $?". Fix needed in Shell::GetEnv
my $c0 = eval { system("setenv cat fish") };
if ($@ && $@ =~ /error (opening|closing) pipe/) {
skip "csh shell not available for test", 4;
}
my $c1 = system("export turtle=dove"); # not valid in csh
ok($ENV{cat} eq 'fish', 'csh - setenv');
ok($c0 == 0, 'csh return true');
ok($ENV{turtle} eq 'frog', 'csh does not recognize export');
ok($c1 != 0, 'csh returned false');
}
SKIP:
{
local $Env::Modify::SHELL = 'tcsh';
$ENV{meaning} = '19';
my $c0 = eval { system("setenv meaning 42") };
if ($@ && $@ =~ /error (opening|closing) pipe/) {
skip "tcsh shell not available for test", 4;
}
ok($ENV{meaning} eq '42', 'tcsh');
ok($c0 == 0, 'tcsh returned true');
my $c1 = system("export meaning=75");
ok($ENV{meaning} ne '75', 'tcsh does not recognize export');
ok($c1 != 0, 'tcsh returned false');
}
{
local $Env::Modify::SHELL = 'bogush';
$ENV{abc} = "def";
eval {
system("export abc=123");
system("setenv abc 123");
};
ok($@ && $@ =~ /unsupported shell/, 'unsupported shell exception');
ok($ENV{abc} eq 'def', 'no change for bogus shell');
}
SKIP:
{
local $Env::Modify::SHELL = "ksh";
$ENV{when} = "later";
$ENV{where} = "over there";
my $c0 = eval { system("export when=now") };
if ($@ && $@ =~ /error (opening|closing) pipe/) {
skip "ksh shell not available for test", 4;
}
ok($ENV{when} eq 'now', 'ksh - export');
ok($c0 == 0, 'ksh returned true');
my $c1 = system("setenv where here 2>/dev/null");
ok($ENV{where} ne 'here', 'ksh does not recognize setenv');
ok($c1 != 0, 'ksh returned false');
}
SKIP:
{
local $Env::Modify::SHELL = "bash";
$ENV{when} = "later";
$ENV{where} = "over there";
my $c0 = eval { system("export when=now") };
if ($@ && $@ =~ /error (opening|closing) pipe/) {
skip "bash shell not available for test", 4;
}
ok($ENV{when} eq 'now', 'bash - export');
ok($c0 == 0, 'bash returned true');
my $c1 = system("setenv where here 2>/dev/null");
ok($ENV{where} ne 'here', 'bash does not recognize setenv');
ok($c1 != 0, 'bash returned false');
}
SKIP:
{
local $Env::Modify::SHELL = "zsh";
$ENV{when} = "later";
$ENV{where} = "over there";
my $c0 = eval { system("export when=now") };
if ($@ && $@ =~ /error (opening|closing) pipe/) {
skip "zsh shell not available for test", 4;
}
ok($ENV{when} eq 'now', 'zsh - export');
ok($c0 == 0, 'zsh returned true');
my $c1 = system("setenv where here 2>/dev/null");
ok($ENV{where} ne 'here', 'zsh does not recognize setenv');
ok($c1 != 0, 'zsh returned false');
}
my $tfn = 0;
sub tempfile {
$tfn++;
sprintf "tmpfile%d.%d", $$, $tfn;
}
( run in 0.550 second using v1.01-cache-2.11-cpan-3989ada0592 )