60_Tree_Simple_Visitor_PostOrderTraversal_test.t [plain text]
use strict;
use warnings;
use Test::More tests => 15;
use Test::Exception;
BEGIN {
use_ok('Tree::Simple::Visitor::PostOrderTraversal');
}
use Tree::Simple;
my $tree = Tree::Simple->new(Tree::Simple->ROOT)
->addChildren(
Tree::Simple->new("1")
->addChildren(
Tree::Simple->new("1.1"),
Tree::Simple->new("1.2")
->addChildren(
Tree::Simple->new("1.2.1"),
Tree::Simple->new("1.2.2")
),
Tree::Simple->new("1.3")
),
Tree::Simple->new("2")
->addChildren(
Tree::Simple->new("2.1"),
Tree::Simple->new("2.2")
),
Tree::Simple->new("3")
->addChildren(
Tree::Simple->new("3.1"),
Tree::Simple->new("3.2"),
Tree::Simple->new("3.3")
),
Tree::Simple->new("4")
->addChildren(
Tree::Simple->new("4.1")
)
);
isa_ok($tree, 'Tree::Simple');
can_ok("Tree::Simple::Visitor::PostOrderTraversal", 'new');
my $visitor = Tree::Simple::Visitor::PostOrderTraversal->new();
isa_ok($visitor, 'Tree::Simple::Visitor::PostOrderTraversal');
isa_ok($visitor, 'Tree::Simple::Visitor');
can_ok($visitor, 'visit');
can_ok($visitor, 'getResults');
$tree->accept($visitor);
is_deeply(
[ $visitor->getResults() ],
[ qw(1.1 1.2.1 1.2.2 1.2 1.3 1 2.1 2.2 2 3.1 3.2 3.3 3 4.1 4) ],
'... our results are as expected');
can_ok($visitor, 'setNodeFilter');
$visitor->setNodeFilter(sub { "Tree_" . $_[0]->getNodeValue() });
can_ok($visitor, 'includeTrunk');
$visitor->includeTrunk(1);
$tree->accept($visitor);
is_deeply(
[ $visitor->getResults() ],
[ qw(Tree_1.1 Tree_1.2.1 Tree_1.2.2 Tree_1.2 Tree_1.3 Tree_1
Tree_2.1 Tree_2.2 Tree_2 Tree_3.1 Tree_3.2 Tree_3.3
Tree_3 Tree_4.1 Tree_4 Tree_root) ],
'... our results are as expected');
throws_ok {
$visitor->visit();
} qr/Insufficient Arguments/, '... this should die';
throws_ok {
$visitor->visit("Fail");
} qr/Insufficient Arguments/, '... this should die';
throws_ok {
$visitor->visit([]);
} qr/Insufficient Arguments/, '... this should die';
throws_ok {
$visitor->visit(bless({}, "Fail"));
} qr/Insufficient Arguments/, '... this should die';