App-Rakubrew

 view release on metacpan or  search on metacpan

t/04-environment.t  view on Meta::CPAN

use strict;
use warnings;

use Test::More;
use App::Rakubrew;
use File::Temp ('tempdir');
use File::Copy;
use FindBin;
use IPC::Run ('run');

use lib "$FindBin::Bin/../lib";

my $rakubrew_exec = $ENV{"RAKUBREW_TEST_EXEC"};

my $PERL   = $^X;
my $homedir = tempdir( CLEANUP => 0 );
$ENV{RAKUBREW_HOME} = $homedir;

my @rakubrew;
my @exec;
if ($rakubrew_exec) {
    @exec = ();
    @rakubrew = ($rakubrew_exec, "internal_hooked", "Bash");
}
else {
    @exec = ($PERL, "-I$FindBin::Bin/../lib");
    @rakubrew = ($PERL, "-I$FindBin::Bin/../lib", "$FindBin::Bin/../script/rakubrew", "internal_hooked", "Bash");
}

sub spurt {
    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 in 0.544 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )