1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
use lib $FindBin::Bin;
use File::Spec::Functions qw( catdir );
use Test::Spec;
use Test::Output;
use Test::Exception;
use App::perlbrew;
require "test_helpers.pl";
mock_perlbrew_install("perl-5.14.1");
mock_perlbrew_install("perl-5.14.2");
mock_perlbrew_install("perl-5.14.3");
describe "lib command," => sub {
describe "when invoked with unknown action name,", sub {
it "should display error" => sub {
my $x = "correcthorsebatterystaple";
my $app = App::perlbrew->new("lib", $x);
stdout_like {
eval {
$app->run;
1;
}
or do {
print STDERR $@;
};
} qr/Unknown command: $x/;
}
};
describe "without lib name" => sub {
it "create errs gracefully showing usage" => sub {
my $app = App::perlbrew->new;
throws_ok {
$app->{args} = [ "lib", "create"];
$app->run;
} qr/ERROR: /i;
};
it "delte errs gracefully showing usage" => sub {
my $app = App::perlbrew->new;
throws_ok {
$app->{args} = [ "lib", "delete"];
$app->run;
} qr/ERROR: /i;
};
};
describe "`create` sub-command," => sub {
my ($app, $libdir);
before each => sub {
$app = App::perlbrew->new;
$app->expects("current_perl")->returns("perl-5.14.2")->at_least_once;
$libdir = dir($App::perlbrew::PERLBREW_HOME, "libs", 'perl-5.14.2@nobita');
};
after each => sub {
$libdir->rmtree;
};
describe "with a bare lib name," => sub {
it "creates the lib folder for current perl" => sub {
stdout_is {
$app->{args} = [ "lib", "create", "nobita" ];
$app->run;
} qq{lib 'perl-5.14.2\@nobita' is created.\n};
ok -d $libdir;
};
};
describe "with \@ in the beginning of lib name," => sub {
it "creates the lib folder for current perl" => sub {
stdout_is {
$app->{args} = [ "lib", "create", '@nobita' ];
$app->run;
} qq{lib 'perl-5.14.2\@nobita' is created.\n};
ok -d $libdir;
}
};
describe "with perl name and \@ as part of lib name," => sub {
it "creates the lib folder for the specified perl" => sub {
stdout_is {
$app->{args} = [ "lib", "create", 'perl-5.14.2@nobita' ];
$app->run;
} qq{lib 'perl-5.14.2\@nobita' is created.\n};
ok -d $libdir;
};
it "creates the lib folder for the specified perl" => sub {
stdout_is {
$app->{args} = [ "lib", "create", 'perl-5.14.1@nobita' ];
$app->run;
} qq{lib 'perl-5.14.1\@nobita' is created.\n};
$libdir = dir($App::perlbrew::PERLBREW_HOME, "libs", 'perl-5.14.1@nobita');
ok -d $libdir;
};
it "shows errors if the specified perl does not exist." => sub {
throws_ok {
## perl-5.8.8 is not mock-installed
$app->{args} = [ "lib", "create", 'perl-5.8.8@nobita' ];
$app->run;
} qr{^ERROR: 'perl-5.8.8' is not installed yet, 'perl-5.8.8\@nobita' cannot be created.\n};
$libdir = dir($App::perlbrew::PERLBREW_HOME, "libs", 'perl-5.8.8@nobita');
ok !-d $libdir;
};
};
};
describe "`delete` sub-command," => sub {
before each => sub {
App::perlbrew::mkpath(
catdir($App::perlbrew::PERLBREW_HOME, "libs", 'perl-5.14.2@nobita')
);
};
it "deletes the local::lib folder" => sub {
stdout_is {
my $app = App::perlbrew->new("lib", "delete", "nobita");
$app->expects("current_perl")->returns("perl-5.14.2")->at_least_once;
$app->run;
} qq{lib 'perl-5.14.2\@nobita' is deleted.\n};
ok !-d catdir($App::perlbrew::PERLBREW_HOME, "libs", 'perl-5.14.2@nobita');
ok !-e catdir($App::perlbrew::PERLBREW_HOME, "libs", 'perl-5.14.2@nobita');
};
it "shows errors when the given lib does not exists " => sub {
throws_ok {
my $app = App::perlbrew->new("lib", "delete", "yoga");
$app->expects("current_perl")->returns("perl-5.14.2")->at_least_once;
$app->run;
} qr{^ERROR: 'perl-5\.14\.2\@yoga' does not exist\.};
};
};
};
runtests unless caller;
|