#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 100;
=pod
This is the perl5 version of the perl6 test.
It is here to make sure we are in sync with
the perl5 version.
=cut
use File::Spec::Unix;
is(File::Spec::Unix->curdir(), '.', '... got the right curdir');
is(File::Spec::Unix->updir(), '..', '... got the right updir');
is(File::Spec::Unix->rootdir(), '/', '... got the right rootdir');
is(File::Spec::Unix->devnull(), '/dev/null', '... got the right devnull');
ok(!File::Spec::Unix->case_tolerant(), '... unix is not case tolerant');
{
my @paths = (
"path///to//a///////dir/",
"path/./to/././a/./././dir/",
"./path/to/a/dir/",
"././path/to/a/dir/"
);
for my $path (@paths) {
is(File::Spec::Unix->canonpath($path), 'path/to/a/dir', '... cannonpath works for ' . $path);
}
my @paths2 = (
"/../path/to/a/dir/",
"/../../path/to/a/dir/"
);
for my $path (@paths2) {
is(File::Spec::Unix->canonpath($path), '/path/to/a/dir', '... cannonpath works for ' . $path);
}
}
{
my $path = '/path/to/a/dir';
my @path = File::Spec::Unix->splitdir($path);
is(scalar @path, 5, '... we have 5 elements in the path');
is($path[0], '', '... our first element is ""');
is($path[1], 'path', '... our second element is "path"');
is($path[2], 'to', '... our third element is "to"');
is($path[3], 'a', '... our fourth element is "a"');
is($path[4], 'dir', '... our fifth element is "dir"');
is(File::Spec::Unix->catdir(@path), $path, '... got the right catdir string');
}
{
my $path = '/path/to/a/file.txt';
my @path = File::Spec::Unix->splitdir($path);
is(scalar @path, 5, '... we have 5 elements in the path');
is($path[0], '', '... our first element is ""');
is($path[1], 'path', '... our second element is "path"');
is($path[2], 'to', '... our third element is "to"');
is($path[3], 'a', '... our fourth element is "a"');
is($path[4], 'file.txt', '... our fifth element is "file.txt"');
is(File::Spec::Unix->catfile(@path), $path, '... got the right catfile string');
}
is(File::Spec::Unix->catpath('vol', 'dir', 'file'), 'dir/file',
'... got the right catpath string (volume is ignored)');
is(File::Spec::Unix->catpath('', 'dir', 'file'), 'dir/file',
'... got the right catpath string (volume is ignored)');
is(File::Spec::Unix->catpath('', 'dir/', 'file'), 'dir/file',
'... got the right catpath string (volume is ignored)');
is(File::Spec::Unix->catpath('', '', 'file'), 'file',
'... got the right catpath string (volume is ignored)');
is(File::Spec::Unix->catpath('', '', ''), '',
'... got the right catpath string (volume is ignored)');
{
my @upwards = ('path/to/file', '..', '.', ".\n/path");
my @no_upwards = File::Spec::Unix->no_upwards(@upwards);
is(scalar @no_upwards, 2, '... got one element');
is($no_upwards[0], 'path/to/file', '... got the right element');
is($no_upwards[1], ".\n/path", '... got the right element');
}
ok(File::Spec::Unix->file_name_is_absolute('/path/from/root'), '... checking if path is absolute (yes)');
ok(!File::Spec::Unix->file_name_is_absolute('path/from/root'), '... checking if path is absolute (no)');
ok(!File::Spec::Unix->file_name_is_absolute("\n/path/from/root"), '... checking if path is absolute (no)');
{
my @path = File::Spec::Unix->path();
ok(scalar @path, '... we have elements in the path');
# my $orig_path = %*ENV{'PATH'};
#
# %*ENV{'PATH'} = 'path/to/bin:path/to/some/other/bin:other/path:';
#
# my @path = path();
# is(+@path, 4, '... we have 4 elements in the path');
# is(@path[0], 'path/to/bin', '... correct first element in the path');
# is(@path[1], 'path/to/some/other/bin', '... correct second element in the path');
# is(@path[2], 'other/path', '... correct third element in the path');
# is(@path[3], '.', '... correct fourth element in the path');
#
# %*ENV{'PATH'} = $orig_path;
}
{
my ($vol, $dir, $file) = File::Spec::Unix->splitpath('/path/to/file');
is($vol, '', '... got the right volume');
is($dir, '/path/to/', '... got the right directory');
is($file, 'file', '... got the right file');
}
{
my ($vol, $dir, $file) = File::Spec::Unix->splitpath('/path/to/file', 1);
is($vol, '', '... got the right volume');
is($dir, '/path/to/file', '... got the right directory');
is($file, '', '... got the right file');
}
{
is(File::Spec::Unix->abs2rel('/t1/t2/t3','/t1/t2/t3'), '', 'checking abs2real');
is(File::Spec::Unix->abs2rel('/t1/t2/t4','/t1/t2/t3'), '../t4', 'checking abs2real');
is(File::Spec::Unix->abs2rel('/t1/t2','/t1/t2/t3'), '..', 'checking abs2real');
is(File::Spec::Unix->abs2rel('/t1/t2/t3/t4','/t1/t2/t3'), 't4', 'checking abs2real');
is(File::Spec::Unix->abs2rel('/t4/t5/t6','/t1/t2/t3'), '../../../t4/t5/t6', 'checking abs2real');
is(File::Spec::Unix->abs2rel('/','/t1/t2/t3'), '../../..', 'checking abs2real');
is(File::Spec::Unix->abs2rel('///','/t1/t2/t3'), '../../..', 'checking abs2real');
is(File::Spec::Unix->abs2rel('/.','/t1/t2/t3'), '../../..', 'checking abs2real');
is(File::Spec::Unix->abs2rel('/./','/t1/t2/t3'), '../../..', 'checking abs2real');
}
{
is(File::Spec::Unix->rel2abs('t4', '/t1/t2/t3'), '/t1/t2/t3/t4', 'checking rel2abs');
is(File::Spec::Unix->rel2abs('t4/t5', '/t1/t2/t3'), '/t1/t2/t3/t4/t5', 'checking rel2abs');
is(File::Spec::Unix->rel2abs('.', '/t1/t2/t3'), '/t1/t2/t3', 'checking rel2abs');
is(File::Spec::Unix->rel2abs('..', '/t1/t2/t3'), '/t1/t2/t3/..', 'checking rel2abs');
is(File::Spec::Unix->rel2abs('../t4', '/t1/t2/t3'), '/t1/t2/t3/../t4', 'checking rel2abs');
is(File::Spec::Unix->rel2abs('/t1', '/t1/t2/t3'), '/t1', 'checking rel2abs');
# concatenating
is(File::Spec::Unix->catfile('a','b','c'), 'a/b/c', 'checking catfile');
is(File::Spec::Unix->catfile('a','b','./c'), 'a/b/c', 'checking catfile');
is(File::Spec::Unix->catfile('./a','b','c'), 'a/b/c', 'checking catfile');
is(File::Spec::Unix->catfile('c'), 'c', 'checking catfile');
is(File::Spec::Unix->catfile('./c'), 'c', 'checking catfile');
is(File::Spec::Unix->catpath('','','file'), 'file', 'checking catpath');
is(File::Spec::Unix->catpath('','/d1/d2/d3/',''), '/d1/d2/d3/', 'checking catpath');
is(File::Spec::Unix->catpath('','d1/d2/d3/',''), 'd1/d2/d3/', 'checking catpath');
is(File::Spec::Unix->catpath('','/d1/d2/d3/.',''), '/d1/d2/d3/.', 'checking catpath');
is(File::Spec::Unix->catpath('','/d1/d2/d3/..',''), '/d1/d2/d3/..', 'checking catpath');
is(File::Spec::Unix->catpath('','/d1/d2/d3/','.file'), '/d1/d2/d3/.file', 'checking catpath');
is(File::Spec::Unix->catpath('','d1/d2/d3/','file'), 'd1/d2/d3/file', 'checking catpath');
is(File::Spec::Unix->catpath('','/../../d1/',''), '/../../d1/', 'checking catpath');
is(File::Spec::Unix->catpath('','/././d1/',''), '/././d1/', 'checking catpath');
is(File::Spec::Unix->catpath('d1','d2/d3/',''), 'd2/d3/', 'checking catpath');
is(File::Spec::Unix->catpath('d1','d2','d3/'), 'd2/d3/', 'checking catpath');
is(File::Spec::Unix->catdir(), '', 'checking catdir');
is(File::Spec::Unix->catdir('/'), '/', 'checking catdir');
is(File::Spec::Unix->catdir('','d1','d2','d3',''), '/d1/d2/d3', 'checking catdir');
is(File::Spec::Unix->catdir('d1','d2','d3',''), 'd1/d2/d3', 'checking catdir');
is(File::Spec::Unix->catdir('','d1','d2','d3'), '/d1/d2/d3', 'checking catdir');
is(File::Spec::Unix->catdir('d1','d2','d3'), 'd1/d2/d3', 'checking catdir');
# splitting
is(join(',', File::Spec::Unix->splitpath('file')), ',,file', 'checking splitpath');
is(join(',', File::Spec::Unix->splitpath('/d1/d2/d3/')), ',/d1/d2/d3/,', 'checking splitpath');
is(join(',', File::Spec::Unix->splitpath('d1/d2/d3/')), ',d1/d2/d3/,', 'checking splitpath');
is(join(',', File::Spec::Unix->splitpath('/d1/d2/d3/.')), ',/d1/d2/d3/.,', 'checking splitpath');
is(join(',', File::Spec::Unix->splitpath('/d1/d2/d3/..')), ',/d1/d2/d3/..,', 'checking splitpath');
is(join(',', File::Spec::Unix->splitpath('/d1/d2/d3/.file')), ',/d1/d2/d3/,.file', 'checking splitpath');
is(join(',', File::Spec::Unix->splitpath('d1/d2/d3/file')), ',d1/d2/d3/,file', 'checking splitpath');
is(join(',', File::Spec::Unix->splitpath('/../../d1/')), ',/../../d1/,', 'checking splitpath');
is(join(',', File::Spec::Unix->splitpath('/././d1/')), ',/././d1/,', 'checking splitpath');
is(join(',', File::Spec::Unix->splitdir('')), '', 'checking splitdir');
is(join(',', File::Spec::Unix->splitdir('/d1/d2/d3/')), ',d1,d2,d3,', 'checking splitdir');
is(join(',', File::Spec::Unix->splitdir('d1/d2/d3/')), 'd1,d2,d3,', 'checking splitdir');
is(join(',', File::Spec::Unix->splitdir('/d1/d2/d3')), ',d1,d2,d3', 'checking splitdir');
is(join(',', File::Spec::Unix->splitdir('d1/d2/d3')), 'd1,d2,d3', 'checking splitdir');
# cannonpath
is(File::Spec::Unix->canonpath(''), '', 'checking canonpath');
is(File::Spec::Unix->canonpath('///../../..//./././a//b/.././c/././'), '/a/b/../c', 'checking canonpath');
is(File::Spec::Unix->canonpath('/.'), '/', 'checking canonpath');
is(File::Spec::Unix->canonpath('/./'), '/', 'checking canonpath');
is(File::Spec::Unix->canonpath('/a/./'), '/a', 'checking canonpath');
is(File::Spec::Unix->canonpath('/a/.'), '/a', 'checking canonpath');
}