use strict;
use warnings;
use Test::More;
use FindBin;
use Path::FindDev qw(find_dev);
use Path::Tiny qw(path);
sub cmp_paths {
my ( $search, $real ) = @_;
my $searched = find_dev($search);
return unless ok( $searched, 'find_dev returned something' );
$searched = $searched->absolute->stringify;
my $realed = path($real)->absolute->stringify;
is( $searched, $realed, 'found and expected match' );
}
cmp_paths( $FindBin::Bin, path($FindBin::Bin)->parent );
if ( $ENV{SYSTEM_PATH_TEST} ) {
my $t_dir = path($FindBin::Bin);
my $source_root = $t_dir->parent;
my $outside_path = $source_root->parent; # PROJECT_ROOT/../
# if _THIS_ file is stored at SOMEPATH/Path-FindDev/.build/randomletters/t/basic.t
# then instead of doing tree traversal from
# SOMEPATH/Path-FindDev/.build/randomletters/
# do it from
# SOMEPATH
#
# More annoying, during dzil release testing, the path is
# is stored at SOMEPATH/Path-FindDev/.build/randomletters/Path-IsDev-0.4/t/basic.t
if ( $outside_path->basename eq '.build' ) {
$outside_path = $outside_path->parent->parent;
}
elsif ( $outside_path->parent->basename eq '.build' ) {
$outside_path = $outside_path->parent->parent->parent;
}
diag "External search started at " . $outside_path;
if ( not is( find_dev($outside_path), undef, 'Finding a dev directory above the project directory should miss' ) ) {
no warnings 'once';
local $Path::IsDev::Object::DEBUG = 1;
local $Path::FindDev::Object::DEBUG = 1;
diag "As the previous test failed, debug diagnosics for Path::IsDev are being turned on";
diag "These will hopefully tell you what warts your filesystem has that results in false-postives for dev dirs";
find_dev($outside_path);
}
}
else {
diag "System path sanity check skipped due to potential security risks, set ENV{SYSTEM_PATH_TEST} if you wish to run this test";
}
done_testing;