The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::Spec;
use Test::Output;
use Config;

use App::perlbrew;

describe "info command" => sub {
    it "should display info if under perlbrew perl" => sub {
        my $app = App::perlbrew->new("info");

        my $mock_perl = { mock => 'current_perl' };
        my $perl_path = $Config{perlpath};

        $app->expects("current_perl")->returns($mock_perl)->at_least_once();
        $app->expects("current_env")->returns('perl-5.8.9');
        $app->expects("current_perl_executable")->returns($perl_path)->at_least_once(); # actaully real perl path
        $app->expects("configure_args")->with($mock_perl)->returns('config_args_value');
        $app->expects("system_perl_shebang")->never;
        local $ENV{PERLBREW_ROOT} = 'perlbrew_root_value';
        local $ENV{PERLBREW_HOME} = 'perlbrew_home_value';
        local $ENV{PERLBREW_PATH} = 'perlbrew_path_value';
        local $ENV{PERLBREW_MANPATH} = 'perlbrew_manpath_value';

my $expected = <<"OUT";
Current perl:
  Name: perl-5.8.9
  Path: \Q$perl_path\E
  Config: config_args_value
  Compiled at: ...\\s+\\d{1,2}\\s+\\d{4}\\s+\\d{1,2}:\\d{2}:\\d{2}

perlbrew:
  version: \Q$App::perlbrew::VERSION\E
  ENV:
    PERLBREW_ROOT: perlbrew_root_value
    PERLBREW_HOME: perlbrew_home_value
    PERLBREW_PATH: perlbrew_path_value
    PERLBREW_MANPATH: perlbrew_manpath_value
OUT

        stdout_like sub {
            $app->run();
        }, qr/$expected/;
    };
    it "should display info if under system perl" => sub {
        my $app = App::perlbrew->new("info");

        $app->expects("current_perl")->returns('');
        $app->expects("current_env")->never;
        $app->expects("current_perl_executable")->never;
        $app->expects("configure_args")->never;
        $app->expects("system_perl_shebang")->returns("system_perl_shebang_value")->once;
        local $ENV{PERLBREW_ROOT} = 'perlbrew_root_value';
        local $ENV{PERLBREW_HOME} = 'perlbrew_home_value';
        local $ENV{PERLBREW_PATH} = 'perlbrew_path_value';
        local $ENV{PERLBREW_MANPATH} = 'perlbrew_manpath_value';

my $expected = <<"OUT";
Current perl:
Using system perl.
Shebang: system_perl_shebang_value

perlbrew:
  version: \Q$App::perlbrew::VERSION\E
  ENV:
    PERLBREW_ROOT: perlbrew_root_value
    PERLBREW_HOME: perlbrew_home_value
    PERLBREW_PATH: perlbrew_path_value
    PERLBREW_MANPATH: perlbrew_manpath_value
OUT

        stdout_like sub {
            $app->run();
        }, qr/$expected/;
    };
};


runtests unless caller;