#!perl
use strict;
use warnings;
use Test::More 'no_plan';
use YAML;
BEGIN { use_ok("Tree::File::YAML"); }
my $tree = Tree::File::YAML->new("examples/simple");
my $data = { aliens => { invaders => [ qw(zim v orbs decepticons) ],
'lost way' => [ "alf", "ray walston", "e.t." ] },
armies => { german => { soldiers => [ qw(schultz klink) ],
prisoners => [ "hogan", "chuck norris",
"the rest of the gang" ] } },
stooges=> [ qw(larry moe curly shemp) ]
};
isa_ok($tree, "Tree::File::YAML", "the root");
isa_ok($tree->get("aliens"), "Tree::File::YAML", "the first nested dir");
is($tree->type(), "dir", "it's a dir-based tree");
is_deeply(
$tree->get("aliens")->get("invaders"),
$data->{aliens}{invaders},
"the alien invaders (chained gets)"
);
is_deeply(
$tree->get("aliens/invaders"),
$data->{aliens}{invaders},
"the alien invaders (path without leading /)"
);
is_deeply(
$tree->get("/aliens/invaders"),
$data->{aliens}{invaders},
"the alien invaders (path with leading /)"
);
is(
$tree->get("/armies/german")->path(),
"/armies/german",
"get path of node"
);
is(
$tree->get("/armies/german")->basename(),
"german",
"get basename of node"
);
is_deeply(
[ $tree->node_names() ],
[ sort keys %$data ],
"get all top-level keys"
);
my @nodes = $tree->nodes();
is(@nodes, 3, "there are three nodes");
isa_ok(shift(@nodes), "Tree::File::YAML", "first node is a tree");
isa_ok(shift(@nodes), "Tree::File::YAML", "second node is a tree");
isa_ok(shift(@nodes), "ARRAY", "third node is an array");
is_deeply(
[ sort $tree->branch_names() ],
[ qw(aliens armies) ],
"get top-level branch names"
);
my @branches = $tree->branches();
is(@branches, 2, "there are two branches");
isa_ok(shift(@branches), "Tree::File::YAML", "first branch is a tree");
isa_ok(shift(@branches), "Tree::File::YAML", "second branch is a tree");
my @deep_nodes = $tree->node_names("/armies/german");
is(@deep_nodes, 2, "there are two deep nodes");
is_deeply([ sort @deep_nodes ],
[ qw(prisoners soldiers) ],
"deep node names are correct");
is_deeply(
$tree->data,
$data,
"return entire structure"
);
is($tree->as_yaml, YAML::Dump($data), "dump to yaml");