75_Tree_Simple_Visitor_CreateDirectoryTree_test.t [plain text]
use strict;
use warnings;
use Test::More tests => 57;
use Test::Exception;
BEGIN {
use_ok('Tree::Simple::Visitor::CreateDirectoryTree');
}
use Tree::Simple;
use File::Spec;
my $dir_tree = Tree::Simple->new("test/")
->addChildren(
Tree::Simple->new("sub_test/"),
Tree::Simple->new("test.pm"),
Tree::Simple->new("sub_test2\\")
->addChildren(
Tree::Simple->new("sub_sub_test/"),
Tree::Simple->new("sub_test.pm"),
Tree::Simple->new("sub_sub_sub_test\\")
->addChildren(
Tree::Simple->new("sub_sub_sub_test.pm")
)
)
);
isa_ok($dir_tree, 'Tree::Simple');
can_ok("Tree::Simple::Visitor::CreateDirectoryTree", 'new');
{
my $visitor = Tree::Simple::Visitor::CreateDirectoryTree->new();
isa_ok($visitor, 'Tree::Simple::Visitor::CreateDirectoryTree');
isa_ok($visitor, 'Tree::Simple::Visitor');
can_ok($visitor, 'visit');
$dir_tree->accept($visitor);
my @files = (
File::Spec->catfile("test", "test.pm"),
File::Spec->catfile("test", "sub_test2", "sub_test.pm"),
File::Spec->catfile("test", "sub_test2", "sub_sub_sub_test", "sub_sub_sub_test.pm")
);
foreach my $filename (@files) {
ok(-e $filename, '... file exists');
ok(-f $filename, '... and it is a file');
cmp_ok(unlink($filename), '==', 1, '... removed file');
ok(!-e $filename, '... file is actually gone');
}
my @directories = reverse(
"test",
File::Spec->catdir("test", "sub_test"),
File::Spec->catdir("test", "sub_test2"),
File::Spec->catdir("test", "sub_test2", "sub_sub_test"),
File::Spec->catdir("test", "sub_test2", "sub_sub_sub_test")
);
foreach my $dirname (@directories) {
ok(-e $dirname, '... directory exists');
ok(-d $dirname, '... and it is a directory');
cmp_ok(rmdir($dirname), '==', 1, '... removed directory');
ok(!-e $dirname, '... directory is actually gone');
}
}
{
my $visitor = Tree::Simple::Visitor::CreateDirectoryTree->new();
isa_ok($visitor, 'Tree::Simple::Visitor::CreateDirectoryTree');
isa_ok($visitor, 'Tree::Simple::Visitor');
can_ok($visitor, 'visit');
can_ok($visitor, 'setFileHandler');
can_ok($visitor, 'setDirectoryHandler');
$visitor->setNodeFilter(sub {
my ($node) = @_;
return "_$node";
});
my @dirs;
$visitor->setDirectoryHandler(sub {
my ($dir_path) = @_;
push @dirs => $dir_path;
});
my @expected_dirs = (
"_test",
File::Spec->catdir("_test", "_sub_test"),
File::Spec->catdir("_test", "_sub_test2"),
File::Spec->catdir("_test", "_sub_test2", "_sub_sub_test"),
File::Spec->catdir("_test", "_sub_test2", "_sub_sub_sub_test")
);
my @files;
$visitor->setFileHandler(sub {
my ($file_path) = @_;
push @files => $file_path;
});
my @expected_files = (
File::Spec->catfile("_test", "_test.pm"),
File::Spec->catfile("_test", "_sub_test2", "_sub_test.pm"),
File::Spec->catfile("_test", "_sub_test2", "_sub_sub_sub_test", "_sub_sub_sub_test.pm")
);
$dir_tree->accept($visitor);
is_deeply(\@dirs, \@expected_dirs, '... got the directories we expected');
is_deeply(\@files, \@expected_files, '... got the files we expected');
}
{
my $visitor = Tree::Simple::Visitor::CreateDirectoryTree->new();
isa_ok($visitor, 'Tree::Simple::Visitor::CreateDirectoryTree');
isa_ok($visitor, 'Tree::Simple::Visitor');
throws_ok {
$visitor->visit();
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->visit("Fail");
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->visit([]);
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->visit(bless({}, "Fail"));
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->setDirectoryHandler();
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->setDirectoryHandler("Fail");
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->setDirectoryHandler([]);
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->setFileHandler();
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->setFileHandler("Fail");
} qr/Insufficient Arguments/, '... got the error we expected';
throws_ok {
$visitor->setFileHandler([]);
} qr/Insufficient Arguments/, '... got the error we expected';
}