App-CPAN-Mini-Visit
view release on metacpan or search on metacpan
lib/App/CPAN/Mini/Visit.pm view on Meta::CPAN
182183184185186187188189190191192193194195196197198199200201202203204205206207208209sub
_visit {
my
(
$archive
,
@cmd_line
) =
@_
;
my
$tempd
= tempd;
my
$ae
= Archive::Extract->new(
archive
=>
$archive
);
my
$olderr
;
# stderr > /dev/null if quiet
if
( !
$Archive::Extract::WARN
) {
open
$olderr
,
">&STDERR"
;
open
STDERR,
">"
, File::Spec->devnull;
}
my
$extract_ok
=
$ae
->extract;
# restore stderr if quiet
if
( !
$Archive::Extract::WARN
) {
open
STDERR,
">&"
,
$olderr
;
close
$olderr
;
}
if
( !
$extract_ok
) {
warn
"Couldn't extract '$archive'\n"
if
$Archive::Extract::WARN
;
return
;
}
t/01-App-CPAN-Mini-Visit.t view on Meta::CPAN
171819202122232425262728293031323334353637plan
tests
=> 30;
require_ok(
'App::CPAN::Mini::Visit'
);
#--------------------------------------------------------------------------#
# fixtures
#--------------------------------------------------------------------------#
my
$exe
= basename $0;
my
(
$stdout
,
$stderr
);
my
$tempdir
= tempdir(
CLEANUP
=> 1 );
my
$minicpan
= dir(
qw/t CPAN/
);
my
$archive_re
=
qr{\.(?:tar\.(?:bz2|gz|Z)|t(?:gz|bz)|zip|pm\.gz)$}
i;
my
@files
;
find(
{
follow
=> 0,
no_chdir
=> 1,
wanted
=>
sub
{
push
@files
,
$_
if
-f && /\.tar\.gz$/ },
t/01-App-CPAN-Mini-Visit.t view on Meta::CPAN
48495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347#--------------------------------------------------------------------------#
# Option: version
#--------------------------------------------------------------------------#
for
my
$opt
(
qw/ --version -V /
) {
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
$opt
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
is(
$stderr
,
"$exe: $App::CPAN::Mini::Visit::VERSION\n"
,
"[$opt] correct"
)
or diag
$err
;
}
#--------------------------------------------------------------------------#
# Option: help
#--------------------------------------------------------------------------#
for
my
$opt
(
qw/ --help -h /
) {
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
$opt
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
like(
$stderr
,
qr/^Usage:/
,
"[$opt] correct"
) or diag
$err
;
}
#--------------------------------------------------------------------------#
# minicpan -- no minicpanrc and no --minicpan should fail with error
#--------------------------------------------------------------------------#
# homedir for testing
local
$ENV
{HOME} =
$tempdir
;
# should have error here
{
my
$label
=
"no minicpan config"
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run();
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
like(
$stderr
,
qr/^No minicpan configured/
,
"[$label] error message correct"
)
or diag
$err
;
}
# missing minicpan directory should have error
my
$bad_minicpan
=
'doesntexist'
;
_create_minicpanrc(
"local: $bad_minicpan"
);
{
my
$label
=
"missing minicpan dir"
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run();
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
like(
$stderr
,
qr/^Directory '$bad_minicpan' does not appear to be a CPAN repository/
,
"[$label] error message correct"
) or diag
$err
;
}
# badly structured minicpan directory should have error
$bad_minicpan
= dir(
$tempdir
,
'CPAN'
);
mkdir
$bad_minicpan
;
_create_minicpanrc(
"local: $bad_minicpan"
);
{
my
$label
=
"bad minicpan dir"
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run();
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
like(
$stderr
,
qr/^Directory '\Q$bad_minicpan\E' does not appear to be a CPAN repository/
,
"[$label] error message correct"
) or diag
$err
;
}
# good minicpan directory (from options -- overrides bad config)
for
my
$opt
(
qw/ --minicpan -m /
) {
my
$label
=
"good $opt=..."
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
"$opt=$minicpan"
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
is(
$stderr
,
""
,
"[$label] no error message"
) or diag
$err
;
}
# good minicpan directory (from config only)
_create_minicpanrc(
"local: $minicpan"
);
{
my
$label
=
"good minicpan from config"
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run();
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
is(
$stderr
,
""
,
"[$label] no error message"
) or diag
$err
;
}
# bad minicpan directory (from options -- overrides bad config)
{
my
$label
=
"bad -m=..."
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
"-m=$bad_minicpan"
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
like(
$stderr
,
qr/^Directory '\Q$bad_minicpan\E' does not appear to be a CPAN repository/
,
"[$label] error message correct"
) or diag
$err
;
}
#--------------------------------------------------------------------------#
# default behavior -- list files
#--------------------------------------------------------------------------#
{
my
$label
=
"list files"
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run();
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
my
@found
=
split
/\n/,
$stdout
;
is_deeply( \
@found
, \
@files
,
"[$label] listing correct"
);
}
#--------------------------------------------------------------------------#
# run program
#--------------------------------------------------------------------------#
{
my
$label
=
"pwd"
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
"--"
, $^X,
'-e'
,
'use Cwd qw/abs_path/; print abs_path(".") . "\n"'
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
my
@found
=
map
{ dir(
$_
)->relative( dir(
$_
)->parent ) }
split
/\n/,
$stdout
;
my
@expect
=
map
{
my
$base
= file(
$_
)->basename;
$base
=~ s{
$archive_re
}{};
$base
;
}
@files
;
ok(
length
$stdout
,
"[$label] got stdout"
) or diag
$err
;
is_deeply( \
@found
, \
@expect
,
"[$label] listing correct"
)
or diag
"STDOUT:\n$stdout\nSTDERR:\n$stderr\n"
;
}
#--------------------------------------------------------------------------#
# run perl -e
#--------------------------------------------------------------------------#
{
my
$label
=
"perl-e"
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
'-e'
,
'use Cwd qw/abs_path/; print abs_path(".") . "\n"'
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
my
@found
=
map
{ dir(
$_
)->relative( dir(
$_
)->parent ) }
split
/\n/,
$stdout
;
my
@expect
=
map
{
my
$base
= file(
$_
)->basename;
$base
=~ s{
$archive_re
}{};
$base
;
}
@files
;
ok(
length
$stdout
,
"[$label] got stdout"
) or diag
$err
;
is_deeply( \
@found
, \
@expect
,
"[$label] listing correct"
)
or diag
"STDOUT:\n$stdout\nSTDERR:\n$stderr\n"
;
}
#--------------------------------------------------------------------------#
# run perl -E
#--------------------------------------------------------------------------#
{
my
$label
=
"perl-E"
;
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
'-E'
,
'use Cwd qw/abs_path/; print abs_path(".") . "\n"'
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
my
@found
=
map
{ dir(
$_
)->relative( dir(
$_
)->parent ) }
split
/\n/,
$stdout
;
my
@expect
=
map
{
my
$base
= file(
$_
)->basename;
$base
=~ s{
$archive_re
}{};
$base
;
}
@files
;
ok(
length
$stdout
,
"[$label] got stdout"
) or diag
$err
;
is_deeply( \
@found
, \
@expect
,
"[$label] listing correct"
)
or diag
"STDOUT:\n$stdout\nSTDERR:\n$stderr\n"
;
}
#--------------------------------------------------------------------------#
# --append path
#--------------------------------------------------------------------------#
{
my
$label
=
"path"
;
for
my
$opt
(
qw/ --append -a /
) {
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
"$opt=path"
,
"--"
, $^X,
'-e'
,
'print shift(@ARGV) . "\n"'
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
my
@found
=
split
/\n/,
$stdout
;
my
@expect
=
@files
;
ok(
length
$stdout
,
"[$label] ($opt) got stdout"
) or diag
$err
;
is_deeply( \
@found
, \
@expect
,
"[$label] ($opt) listing correct"
)
or diag
"STDOUT:\n$stdout\nSTDERR:\n$stderr\n"
;
}
}
#--------------------------------------------------------------------------#
# --append dist
#--------------------------------------------------------------------------#
{
my
$label
=
"dist"
;
for
my
$opt
(
qw/ --append -a /
) {
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
"$opt=dist"
,
"--"
, $^X,
'-e'
,
'print shift(@ARGV) . "\n"'
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
my
@found
=
split
/\n/,
$stdout
;
my
$prefix
= dir(
$minicpan
,
qw/ authors id /
)->absolute;
my
@expect
=
map
{
(
my
$file
=
$_
) =~ s{
$prefix
[/\\].[/\\]..[/\\]}{};
$file
;
}
@files
;
ok(
length
$stdout
,
"[$label] ($opt) got stdout"
) or diag
$err
;
is_deeply( \
@found
, \
@expect
,
"[$label] ($opt) listing correct"
)
or diag
"STDOUT:\n$stdout\nSTDERR:\n$stderr\n"
;
}
}
#--------------------------------------------------------------------------#
# --output file
#--------------------------------------------------------------------------#
{
my
$label
=
"output"
;
my
$tempfile
= tmpnam();
try
eval
{
capture
sub
{
App::CPAN::Mini::Visit->run(
"--output=$tempfile"
);
} => \
$stdout
,
\
$stderr
;
};
catch
my
$err
;
ok( -f
$tempfile
,
"[$label] output file created"
);
my
@found
=
map
{
chomp
;
$_
}
do
{
local
@ARGV
= (
$tempfile
); <> };
is(
$stdout
,
''
,
"[$label] saw no output on terminal"
);
is_deeply( \
@found
, \
@files
,
"[$label] listing correct"
);
}
xt/author/00-compile.t view on Meta::CPAN
262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273use
File::Spec;
use
IPC::Open3;
use
IO::Handle;
open
my
$stdin
,
'<'
, File::Spec->devnull or
die
"can't open devnull: $!"
;
my
@warnings
;
for
my
$lib
(
@module_files
)
{
# see L<perlfaq8/How can I capture STDERR from an external command?>
my
$stderr
= IO::Handle->new;
my
$pid
= open3(
$stdin
,
'>&STDERR'
,
$stderr
, $^X,
$inc_switch
,
'-e'
,
"require q[$lib]"
);
binmode
$stderr
,
':crlf'
if
$^O eq
'MSWin32'
;
my
@_warnings
= <
$stderr
>;
waitpid
(
$pid
, 0);
is($?, 0,
"$lib loaded ok"
);
if
(
@_warnings
)
{
warn
@_warnings
;
push
@warnings
,
@_warnings
;
}
}
foreach
my
$file
(
@scripts
)
{ SKIP: {
open
my
$fh
,
'<'
,
$file
or
warn
(
"Unable to open $file: $!"
),
next
;
my
$line
= <
$fh
>;
close
$fh
and skip(
"$file isn't perl"
, 1)
unless
$line
=~ /^
#!.*?\bperl\b\s*(.*)$/;
my
@flags
= $1 ?
split
(/\s+/, $1) : ();
my
$stderr
= IO::Handle->new;
my
$pid
= open3(
$stdin
,
'>&STDERR'
,
$stderr
, $^X,
$inc_switch
,
@flags
,
'-c'
,
$file
);
binmode
$stderr
,
':crlf'
if
$^O eq
'MSWin32'
;
my
@_warnings
= <
$stderr
>;
waitpid
(
$pid
, 0);
is($?, 0,
"$file compiled ok"
);
# in older perls, -c output is simply the file portion of the path being tested
if
(
@_warnings
=
grep
{ !/\bsyntax OK$/ }
grep
{
chomp
;
$_
ne (File::Spec->splitpath(
$file
))[2] }
@_warnings
)
{
warn
@_warnings
;
push
@warnings
,
@_warnings
;
}
( run in 0.603 second using v1.01-cache-2.11-cpan-e5176c747c2 )