#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
use lib $FindBin::Bin;
use App::perlbrew;
require "test_helpers.pl";
use File::Temp qw( tempdir );
use File::Spec::Functions qw( catdir );
use Test::Spec;
use Test::Output qw(stdout_is stdout_from);
$ENV{PERLBREW_DEBUG_COMPLETION} = 0;
my @perls = qw(
perl-5.12.3
perl-5.12.4
perl-5.14.1
perl-5.14.2
);
mock_perlbrew_install($_) for @perls;
{
no warnings 'redefine';
sub App::perlbrew::current_perl { "perl-5.12.3" }
}
describe "compgen command," => sub {
describe "when there is no args", sub {
it "displays a list of subcommands", sub {
my $app = App::perlbrew->new("compgen");
my $out = stdout_from { $app->run; };
my @subcommands = sort split ' ', $out;
is join(' ', @subcommands), join(' ', sort $app->commands());
};
};
describe "when there is a part of a subcommand", sub {
it "displays a list of l*", sub {
my $part = "l";
my $app = App::perlbrew->new("compgen", 1, 'perlbrew', $part);
my $out = stdout_from { $app->run; };
my @subcommands = sort split ' ', $out;
is join(' ', @subcommands),
join(' ', sort grep { /\A \Q$part\E /xms } $app->commands());
};
it "'versio[tab]' is completed as 'version'", sub {
my $part = "versio";
my $app = App::perlbrew->new("compgen", 1, 'perlbrew', $part);
my $out = stdout_from { $app->run; };
my @subcommands = sort split ' ', $out;
is join(' ', @subcommands),
join(' ', 'version');
};
};
foreach my $use(qw(use switch)) {
describe "given '$use' subcommand", sub {
it "'use [tab]' suggests a list of installed perls", sub {
my $app = App::perlbrew->new(
"compgen", 2, 'perlbrew', 'use');
my $out = stdout_from { $app->run; };
my @subcommands = sort split ' ', $out;
is join(' ', @subcommands),
join(' ', sort @perls);
};
it "'use 5.12 [tab]' suggests perls with /5\\.12/", sub {
my $app = App::perlbrew->new(
"compgen", 2, 'perlbrew', 'use', '5.12');
my $out = stdout_from { $app->run; };
my @subcommands = sort split ' ', $out;
is join(' ', @subcommands),
join(' ', sort( qw(perl-5.12.3 perl-5.12.4) ));
};
};
}
};
runtests unless caller;