App-Rakubrew
view release on metacpan or search on metacpan
t/04-environment.t view on Meta::CPAN
my ($file, $cont) = @_;
open(my $fh, '>', $file);
say $fh $cont;
close($fh);
}
sub fake_install {
my $path = shift;
my $broken = shift;
mkdir "$path/bin";
spurt("$path/bin/raku", "foo") if !$broken;
}
sub fake_version {
my $name = shift;
my $broken = shift;
mkdir "$homedir/versions";
mkdir "$homedir/versions/$name";
fake_install("$homedir/versions/$name", $broken);
}
sub diff_env {
my ($leftRef, $rightRef) = @_;
my @left = @{$leftRef};
my @right = @{$rightRef};
@left = sort @left;
@right = sort @right;
my ($ls, $rs) = (scalar @left, scalar @right);
my ($li, $ri) = (0, 0);
my (@lextra, @rextra);
while ($li < $ls && $ri < $rs) {
if ($li >= $ls) {
push @rextra, $right[$ri];
$ri++;
}
elsif ($ri >= $rs) {
push @lextra, $left[$li];
$li++;
}
elsif ($left[$li] gt $right[$ri]) {
push @rextra, $right[$ri];
$ri++;
}
elsif ($left[$li] lt $right[$ri]) {
push @lextra, $left[$li];
$li++;
}
else {
$li++;
$ri++;
}
}
return (\@lextra, \@rextra);
}
my $out;
my $err;
fake_version('moar-2020.01');
my $print_script = "$homedir/versions/moar-2020.01/bin/print-env.pl";
copy("$FindBin::Bin/bin/print-env.pl", $print_script);
chmod 0755, $print_script;
run([@rakubrew, "switch", "moar-2020.01"], \"", \$out, \$err);
run([@rakubrew, "mode", "shim"], \"", \$out, \$err);
run([@exec, "$homedir/shims/print-env.pl"], \"", \$out);
my @inner_env = split("\n", $out);
@inner_env = grep { $_ } @inner_env;
my @outer_env;
for my $key (keys(%ENV)) {
my $val = $ENV{$key};
my @vals = split "\n", $val;
if (@vals > 1) {
push @outer_env, "$key=$vals[0]";
shift @vals;
push @outer_env, $_ for @vals;
}
else {
push @outer_env, "$key=$val";
}
}
# Ignore __CF_USER_TEXT_ENCODING. That var seems to be added by `exec` itself on MacOS.
# I think I can't do anything about this. Thus ignore.
@inner_env = grep { ! /^__CF_USER_TEXT_ENCODING=/ } @inner_env;
@outer_env = grep { ! /^__CF_USER_TEXT_ENCODING=/ } @outer_env;
my ($missingRef, $excessRef) = diff_env(\@outer_env, \@inner_env);
is_deeply $missingRef, [], "Rakubrew doesn't lose env vars";
is_deeply $excessRef, [], "Rakubrew doesn't add env vars";
done_testing;
( run in 0.925 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )