The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/pugs
#  -*- perl -*-

use v6;
use Test;

plan 15;

# include from the top...
use Perldoc::DOM;

dies_ok { Perldoc::DOM::Node.new(); }, "Perldoc::DOM::Node.new() - dies",
    :todo;

# build from the bottom...
my $node;
lives_ok { $node = Perldoc::DOM::Element.new( :name<sect1>,
                                             :source("=head1 ") ); },
    "::Element.new()";
isa_ok($node, "Perldoc::DOM::Element", "Element.new()");

is($node.source, "=head1 ", "->source() (::Element)");
is($node.name, "sect1", "->name() (::Element)");

my $title = Perldoc::DOM::Element.new( :name<title> );

lives_ok { $node.add_child($title) }, "add child to node", :todo;

my $text = Perldoc::DOM::Text.new(:content("NAME"));

is($text.source, "NAME", "->source() (::Text)");
is($text.content, "NAME", "->content() (::Text)");

lives_ok { $title.add_child($text) }, "add child to title", :todo;

my $kwom = Perldoc::DOM.new();
isa_ok($kwom, "Perldoc::DOM", "new DOM");

lives_ok { $kwom.root($node); }, "get root of kwom", :todo;

my $gap = Perldoc::DOM::WS.new( :content("\n\n") );

lives_ok { $node.add_child($gap); }, "add gap child to node", :todo;

my $para = Perldoc::DOM::Element.new( :name<para> );

lives_ok { $node.add_child($para); }, "add para child to node", :todo;
my ($foo, $pi);
lives_ok {
$para.add_child($foo = Perldoc::DOM::Text.new(:content("foo")));

$node.add_child($pi = Perldoc::DOM::PI.new(:source("\n\n=cut")));
}, "add more nodes to para", :todo;

my @nodes;
lives_ok { $node.traverse(sub { push @nodes, $^node }) },
    "can traverse Tree", :todo;

#is(@nodes.join(","), "Perldoc::DOM::Element", "can walk Tree");

#is_deeply(\@nodes, [$node, $title, $text, $gap, $para, $foo, $pi],
          #"walk_down");

#is_deeply($kwom, eval($kwom.perl), "Perldoc::DOM trees .perl'able");
#nstore $kwom, 't/kwom.pm3';