#!/usr/bin/perl
use strict;
use warnings;
use FindBin qw($Bin);
use Env::Bash;
use Test::More;
my $nbr = scalar keys %ENV;
$nbr-- if $ENV{SHLVL};
$nbr-- if $ENV{_};
my $nbr_tests = $nbr + 4 + 5 + 4 + 3 + 1;
plan tests => $nbr_tests;
my %env = ();
my( $sb, $name, $var, $i );
my @sb;
my @vars;
my $source = "$Bin/test-source.sh";
# test to check %ENV matched get_env_var
tie %env, "Env::Bash";
for my $var( sort keys %ENV ) {
next if $var eq 'SHLVL' || $var eq '_';
my $pv = $ENV{$var};
my $mv = $env{$var};
is( $pv, $mv, "compare $var" );
}
# test for array variables
SKIP: {
Env::Bash::_have_bash()
or skip 'No bash executable found', 4 + 5;
$name = 'STOOGES';
@sb = qw( Curly Larry Moe );
tie %env, "Env::Bash", Source => $source;
is( $env{$name}, $sb[0], "compare sorces $name" );
tie %env, "Env::Bash", [], Source => $source;
$var = $env{$name};
$i = 0;
for my $sb( @sb ) {
is( $var->[$i++], $sb, "compare sorces $name $sb" );
}
$name = 'SORCERER_MIRRORS';
@sb = qw(
http://distro.ibiblio.org/pub/linux/distributions/sorcerer
ftp://ftp.phy.bnl.gov/pub/sorcerer
ftp://sorcerer.mirrors.pair.com
http://sorcerer.mirrors.pair.com
);
tie %env, "Env::Bash", Source => $source;
is( $env{$name}, $sb[0], "compare sorces $name" );
tie %env, "Env::Bash", [], Source => $source;
$var = $env{$name};
$i = 0;
for my $sb( @sb ) {
is( $var->[$i++], $sb, "compare sorces $name $sb" );
}
};
# tests exists
tie %env, "Env::Bash", Source => $source;
SKIP: {
$ENV{PATH}
or skip 'PATH in $ENV', 1;
ok( exists $env{PATH}, "check PATH exists" );
};
SKIP: {
Env::Bash::_have_bash()
or skip 'No bash executable found', 2;
ok( exists $env{STOOGES}, "check STOOGES exists" );
ok( exists $env{SORCERER_MIRRORS}, "check SORCERER_MIRRORS exists" );
};
ok( ! exists $env{HAPPYFUNBALL}, "check HAPPYFUNBALL ! exists" );
# check SourceOnly
SKIP: {
Env::Bash::_have_bash()
or skip 'No bash executable found', 4;
@sb = qw( SORCERER_MIRRORS STOOGES );
$i = 0;
tie %env, "Env::Bash", Source => $source, SourceOnly => 1;
while( my( $key, $value ) = each %env ) {
ok( $key eq $sb[$i++], "check SourceOnly key $key" ) if $i < @sb;
}
ok( $i == @sb, "check SourceOnly key count" );
# check for bad source script
diag( "several failure messages should follow - that's ok" );
eval { tie %env, "Env::Bash", Source => "$Bin/happyfunball"; };
ok( ! $@, "check missing source failure" );
};