#!/usr/bin/perl -w
# Test the private _can_write_dir() function.
use strict;
use ExtUtils::Install;
use File::Spec;
{ package FS; our @ISA = qw(File::Spec); }
# Alias it for easier access
*can_write_dir = \&ExtUtils::Install::_can_write_dir;
use Test::More 'no_plan';
my $dne = FS->catdir(qw(does not exist));
ok ! -e $dne;
is_deeply [can_write_dir($dne)],
[1,
FS->curdir,
FS->catdir('does'),
FS->catdir('does', 'not'),
FS->catdir('does', 'not', 'exist')
];
my $abs_dne = FS->rel2abs($dne);
ok ! -e $abs_dne;
is_deeply [can_write_dir($abs_dne)],
[1,
FS->rel2abs(FS->curdir),
FS->rel2abs(FS->catdir('does')),
FS->rel2abs(FS->catdir('does', 'not')),
FS->rel2abs(FS->catdir('does', 'not', 'exist')),
];
SKIP: {
my $exists = FS->catdir(qw(exists));
my $subdir = FS->catdir(qw(exists subdir));
ok mkdir $exists;
END { rmdir $exists }
ok chmod 0555, $exists, 'make read only';
skip "Current user or OS cannot create directories that they cannot read", 6
if -w $exists; # these tests require a directory we cant read
is_deeply [can_write_dir($exists)], [0, $exists];
is_deeply [can_write_dir($subdir)], [0, $exists, $subdir];
ok chmod 0777, $exists, 'make writable';
ok -w $exists;
is_deeply [can_write_dir($exists)], [1, $exists];
is_deeply [can_write_dir($subdir)],
[1,
$exists,
$subdir
];
}