#!/usr/bin/perl use warnings; use strict; use Test::More qw(no_plan); use File::Fu; my $dir = File::Fu->dir; ok($dir, 'constructor'); is($dir, File::Fu::Dir->new('.'), 'current directory default'); is("$dir", './', 'stringify'); is("$dir\n", "./\n", 'stringify'); is($dir->part(0), '.'); is($dir->part(-1), '.'); my $root = File::Fu->dir('/'); ok(defined($root), 'root dir'); ok($root->is_absolute, 'absolute'); is($root, '/'); is($root->part(0), ''); is($root->part(-1), ''); my $file = $dir + 'Build.PL'; is("$file", "Build.PL"); ok($file->e, 'file exists'); my $abs_dir = $dir->absolute; ok($abs_dir->is_absolute, 'dir is absolute'); my $abs_file = $abs_dir + 'Build.PL'; ok($abs_file->is_absolute, 'file is absolute'); is($abs_file, $file->absolute, 'absolute matches abs_dir->file(...)'); is($file . 'foo', 'Build.PLfoo', 'append'); is('.'.$file, '.Build.PL', 'reverse append'); my $also_file = $file->clone; $also_file->file =~ s/\.PL/.foo/; ok(ref($also_file), 'has ref'); is($also_file, 'Build.foo', 'whee'); is($file, 'Build.PL', 'original unchanged'); { my $f = File::Fu->file("foo"); my $q = $f; $f &= sub {s/o/i/g}; is($q, 'foo', 'q ok'); is($f, 'fii', 's///'); is(ref($f), 'File::Fu::File', 'object ok'); is(ref($f.''), '', 'stringify'); my $s = $q & sub {s/o/i/g}; is($q, 'foo', 'q ok'); is($s, 'fii', 's///'); } # append with override { my $f = File::Fu->file("foo"); my $d = $f % 'bar'; is($d, 'foobar', 'inner append'); is(ref($d), 'File::Fu::File', 'object ok'); is($f, 'foo', 'f ok'); my $q = $f; $f %= 'bar'; is(ref($f), 'File::Fu::File', 'object ok'); is($f, 'foobar', 'f ok'); is($q, 'foo', 'q ok'); } # append as method { my $f = File::Fu->file("foo"); $f->append('baz'); is($f, 'foobaz'); } { my $d = File::Fu->dir("foo"); my $q = $d; my $r = $d % 'foo'; is($r, 'foofoo/', 'append'); ok($d ne 'foofoo/', 'deref'); $d %= 'foo'; is($r, 'foofoo/', 'r unbroken'); is($q, 'foo/', 'q unbroken'); ok($d ne $q, 'unbroken'); is(ref($q), ref($d), 'same package'); $q += "bar"; is($d, 'foofoo/'); is($q, 'foo/bar'); is(ref($q), 'File::Fu::File'); } { my $d = File::Fu->dir; ok($d->is_cwd); is($d, './'); $d /= 'foo'; ok(!$d->is_cwd); is($d, 'foo/'); $d /= 'bar'; is($d, 'foo/bar/'); is($d->basename, 'bar/'); is($d->dirname, 'foo/'); is($d->dirname->dirname, './'); is($d->part(0), 'foo'); is($d->part(1), 'bar'); is($d->part(-1), 'bar'); } # $dir + 'path/and/file' { my $dir = File::Fu->dir('foo'); my $file = $dir + 'this/and/that'; is($file->basename, 'that'); is($file->dirname, 'foo/this/and/'); } # vim:ts=2:sw=2:et:sta