#!/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 + 7 + 8 + 2 + 1; plan tests => $nbr_tests; # test to check %ENV matched get_env_var my $be = Env::Bash->new; for my $var( sort keys %ENV ) { next if $var eq 'SHLVL' || $var eq '_'; my $pv = $ENV{$var}; my $mv = $be->$var; is( $pv, $mv, "compare $var" ); } my( $sb, $name, $var, $i ); my @sb; my @vars; my $source = "$Bin/test-source.sh"; SKIP: { Env::Bash::_have_bash() or skip 'No bash executable found', 4 + 7; # test for array variables $name = 'STOOGES'; @sb = qw( Curly Larry Moe ); $var = $be->get( $name, ForceArray => 0, Source => $source ); is( $var, $sb[0], "compare sorces $name" ); my %options = $be->options( [] ); is( $options{ForceArray}, 1, "check that ForceArray is set" ); is( $options{Source}, $source, "check that Source is set" ); @vars = $be->get( $name ); $i = 0; for my $sb( @sb ) { is( $vars[$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 ); $var = $be->$name( ForceArray => 0, Source => $source ); is( $var, $sb[0], "compare sorces $name" ); @vars = $be->$name( [], ); $i = 0; for my $sb( @sb ) { is( $vars[$i++], $sb, "compare sorces $name $sb" ); } }; # tests keys my @keys = $be->keys( Source => $source ); SKIP: { $ENV{PATH} or skip 'PATH in $ENV', 1; ok( grep( /^PATH$/, @keys ), "check PATH in keys" ); }; SKIP: { Env::Bash::_have_bash() or skip 'No bash executable found', 2; ok( grep( /^STOOGES$/, @keys ), "check STOOGES in keys" ); ok( grep( /^SORCERER_MIRRORS$/, @keys ), "check SORCERER_MIRRORS in keys" ); }; ok( ! grep( /^HAPPYFUNBALL$/, @keys ), "check HAPPYFUNBALL is NOT in keys" ); SKIP: { Env::Bash::_have_bash() or skip 'No bash executable found', 1; ok( $be->exists( 'SORCERER_MIRRORS' ), "exists SORCERER_MIRRORS" ); }; ok( ! $be->exists( 'HAPPYFUNBALL', @keys ), "! exists HAPPYFUNBALL" ); $be->reload_keys; SKIP: { Env::Bash::_have_bash() or skip 'No bash executable found', 1; ok( $be->exists( 'STOOGES' ), "exists STOOGES after reload_keys" ); }; ok( ! $be->exists( 'BETTY_WHITE', @keys ), "! exists BETTY_WHITE after reload_keys" ); # tests AUTOLOAD SKIP: { Env::Bash::_have_bash() or skip 'No bash executable found', 1; $name = 'STOOGES'; @sb = qw( Curly Larry Moe ); $var = $be->STOOGES( Source => $source, ForceArray => 0 ); is( $var, $sb[0], "compare sorces $name ( AUTOLOAD )" ); }; $var = $be->PATH( Source => $source, ForceArray => 0 ); is( $var, $ENV{PATH}, "compare sorces PATH ( AUTOLOAD )" ); # check for bad source script SKIP: { Env::Bash::_have_bash() or skip 'No bash executable found', 1; diag( "several failure messages should follow - that's ok" ); $var = eval { $be->$name( Source => "$Bin/happyfunball" ); }; ok( ! $@, "check missing source failure" ); };