1BEGIN { 2 $^O = 'Unix'; # Test in Unix mode 3} 4 5use Test; 6use strict; 7use Path::Class; 8use Cwd; 9 10plan tests => 66; 11ok(1); 12 13my $file1 = Path::Class::File->new('foo.txt'); 14ok $file1, 'foo.txt'; 15ok $file1->is_absolute, ''; 16ok $file1->dir, '.'; 17ok $file1->basename, 'foo.txt'; 18 19my $file2 = file('dir', 'bar.txt'); 20ok $file2, 'dir/bar.txt'; 21ok $file2->is_absolute, ''; 22ok $file2->dir, 'dir'; 23ok $file2->basename, 'bar.txt'; 24 25my $dir = dir('tmp'); 26ok $dir, 'tmp'; 27ok $dir->is_absolute, ''; 28 29my $dir2 = dir('/tmp'); 30ok $dir2, '/tmp'; 31ok $dir2->is_absolute, 1; 32 33my $cat = file($dir, 'foo'); 34ok $cat, 'tmp/foo'; 35$cat = $dir->file('foo'); 36ok $cat, 'tmp/foo'; 37ok $cat->dir, 'tmp'; 38ok $cat->basename, 'foo'; 39 40$cat = file($dir2, 'foo'); 41ok $cat, '/tmp/foo'; 42$cat = $dir2->file('foo'); 43ok $cat, '/tmp/foo'; 44ok $cat->isa('Path::Class::File'); 45ok $cat->dir, '/tmp'; 46 47$cat = $dir2->subdir('foo'); 48ok $cat, '/tmp/foo'; 49ok $cat->isa('Path::Class::Dir'); 50 51my $file = file('/foo//baz/./foo')->cleanup; 52ok $file, '/foo/baz/foo'; 53ok $file->dir, '/foo/baz'; 54ok $file->parent, '/foo/baz'; 55 56{ 57 my $dir = dir('/foo/bar/baz'); 58 ok $dir->parent, '/foo/bar'; 59 ok $dir->parent->parent, '/foo'; 60 ok $dir->parent->parent->parent, '/'; 61 ok $dir->parent->parent->parent->parent, '/'; 62 63 $dir = dir('foo/bar/baz'); 64 ok $dir->parent, 'foo/bar'; 65 ok $dir->parent->parent, 'foo'; 66 ok $dir->parent->parent->parent, '.'; 67 ok $dir->parent->parent->parent->parent, '..'; 68 ok $dir->parent->parent->parent->parent->parent, '../..'; 69} 70 71{ 72 my $dir = dir("foo/"); 73 ok $dir, 'foo'; 74 ok $dir->parent, '.'; 75} 76 77{ 78 # Special cases 79 ok dir(''), '/'; 80 ok dir(), '.'; 81 ok dir('', 'var', 'tmp'), '/var/tmp'; 82 ok dir()->absolute, dir(Cwd::cwd())->cleanup; 83 ok dir(undef), undef; 84} 85 86{ 87 my $file = file('/tmp/foo/bar.txt'); 88 ok $file->relative('/tmp'), 'foo/bar.txt'; 89 ok $file->relative('/tmp/foo'), 'bar.txt'; 90 ok $file->relative('/tmp/'), 'foo/bar.txt'; 91 ok $file->relative('/tmp/foo/'), 'bar.txt'; 92 93 $file = file('one/two/three'); 94 ok $file->relative('one'), 'two/three'; 95} 96 97{ 98 # Try out the dir_list() method 99 my $dir = dir('one/two/three/four/five'); 100 my @d = $dir->dir_list(); 101 ok "@d", "one two three four five"; 102 103 @d = $dir->dir_list(2); 104 ok "@d", "three four five"; 105 106 @d = $dir->dir_list(-2); 107 ok "@d", "four five"; 108 109 @d = $dir->dir_list(2, 2); 110 ok "@d", "three four", "dir_list(2, 2)"; 111 112 @d = $dir->dir_list(-3, 2); 113 ok "@d", "three four", "dir_list(-3, 2)"; 114 115 @d = $dir->dir_list(-3, -2); 116 ok "@d", "three", "dir_list(-3, -2)"; 117 118 @d = $dir->dir_list(-3, -1); 119 ok "@d", "three four", "dir_list(-3, -1)"; 120 121 my $d = $dir->dir_list(); 122 ok $d, 5, "scalar dir_list()"; 123 124 $d = $dir->dir_list(2); 125 ok $d, "three", "scalar dir_list(2)"; 126 127 $d = $dir->dir_list(-2); 128 ok $d, "four", "scalar dir_list(-2)"; 129 130 $d = $dir->dir_list(2, 2); 131 ok $d, "four", "scalar dir_list(2, 2)"; 132} 133 134{ 135 # Test is_dir() 136 ok dir('foo')->is_dir, 1; 137 ok file('foo')->is_dir, 0; 138} 139 140{ 141 # subsumes() 142 ok dir('foo/bar')->subsumes('foo/bar/baz'), 1; 143 ok dir('/foo/bar')->subsumes('/foo/bar/baz'), 1; 144 ok dir('foo/bar')->subsumes('bar/baz'), 0; 145 ok dir('/foo/bar')->subsumes('foo/bar'), 0; 146 ok dir('/foo/bar')->subsumes('/foo/baz'), 0; 147 ok dir('/')->subsumes('/foo/bar'), 1; 148} 149