The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl -T

use Test::More tests => 14;

use lib '../lib';
BEGIN { use_ok('Win32::Env') }

my $caught_warn;

sub catch_warn_sub{
 my $rx=shift;
 return sub { my $warn=shift; $caught_warn+=($warn=~/$rx/); };
}

sub test_sys_or_usr_warn{
 no strict 'refs';
 my $sub=\&{$_[0]};
 local $SIG{__WARN__}=catch_warn_sub(qr/sys_or_usr.*ENV_USER.*ENV_SYSTEM/);
 $caught_warn=0;
 &$sub();
 ok($caught_warn, "get warning about \$sys_or_usr from $_[0]");
}

sub test_variable_warn{
 no strict 'refs';
 my $sub=\&{$_[0]};
 local $SIG{__WARN__}=catch_warn_sub(qr/\$variable.*defined.*empty/);
 $caught_warn=0;
 &$sub(ENV_USER);
 ok($caught_warn, "get warning about \$variable from $_[0] (variable not defined)");
 $caught_warn=0;
 &$sub(ENV_USER, '');
 ok($caught_warn, "get warning about \$variable from $_[0] (variable is empty)");
}

test_sys_or_usr_warn('GetEnv');
test_sys_or_usr_warn('SetEnv');
test_sys_or_usr_warn('ListEnv');
test_sys_or_usr_warn('DelEnv');
test_sys_or_usr_warn('InsertPathEnv');

test_variable_warn('GetEnv');
test_variable_warn('SetEnv');
test_variable_warn('DelEnv');
test_variable_warn('InsertPathEnv');