diff options
Diffstat (limited to 't')
-rw-r--r-- | t/01-basic.t | 27 | ||||
-rw-r--r-- | t/02-xslt.t | 67 | ||||
-rw-r--r-- | t/03-html.t | 47 | ||||
-rw-r--r-- | t/04-xml.t | 54 | ||||
-rw-r--r-- | t/05-mixed.t | 55 | ||||
-rw-r--r-- | t/06-code.t | 58 | ||||
-rw-r--r-- | t/07-inherit.t | 67 |
7 files changed, 375 insertions, 0 deletions
diff --git a/t/01-basic.t b/t/01-basic.t new file mode 100644 index 0000000..01d3510 --- /dev/null +++ b/t/01-basic.t @@ -0,0 +1,27 @@ +#!perl +use Test::Most tests => 2,'die'; +use strict; +use warnings; +use Tree::Template::Declare builder => '+DAG_Node'; + +my $tree=tree { + node { + name 'root'; + attribs name => 'none'; + node { + name 'coso1'; + attribs name => 'coso_1'; + attribs other => 'some'; + }; + node { + name 'coso2'; + }; + }; +}; + +cmp_deeply($tree->tree_to_lol(), + [[re(qr{coso1})],[re(qr{coso2})],re(qr{root})], + 'built the tree'); +is_deeply(($tree->daughters)[0]->attributes, + {name => 'coso_1', other => 'some'}, + 'attributes'); diff --git a/t/02-xslt.t b/t/02-xslt.t new file mode 100644 index 0000000..d36c132 --- /dev/null +++ b/t/02-xslt.t @@ -0,0 +1,67 @@ +#!perl +package main; +use Test::Most 'die'; +BEGIN { +eval 'use Tree::DAG_Node::XPath 0.10; require Tree::Transform::XSLTish'; +plan skip_all => 'Tree::DAG_Node::XPath 0.10 and Tree::Transform::XSLTish needed for this test' if $@; +} +plan tests => 3; + +package Copy;{ +use Tree::Transform::XSLTish; +use Tree::Template::Declare::DAG_Node; +use Tree::Template::Declare builder => Tree::Template::Declare::DAG_Node->new('Tree::DAG_Node::XPath'); +use strict; +use warnings; + +tree_rule match => '/', action => sub { + tree { + $_[0]->apply_rules; + }; +}; + +tree_rule match => '*', priority => 0, action => sub { + node { + name $_[0]->it->name; + attribs %{$_[0]->it->attributes}; + $_[0]->apply_rules; + }; +}; + +} + +package main; +use strict; +use warnings; +use Tree::Template::Declare builder => Tree::Template::Declare::DAG_Node->new('Tree::DAG_Node::XPath'); +use Data::Dumper; + +my $tree=tree { + node { + name 'root'; + attribs name => 'none'; + node { + name 'coso1'; + attribs name => 'coso_1'; + }; + node { + name 'coso2'; + node { + name 'coso3'; + }; + }; + }; +}; + +diag "transforming"; +my $trans=Copy->new(); +my ($tree2)=$trans->transform($tree); + +ok(defined $tree,'built'); +ok(defined $tree2,'transformed'); + +diag "comparing"; +is($tree->tree_to_lol_notation(), + $tree2->tree_to_lol_notation(), + 'tree copy'); + diff --git a/t/03-html.t b/t/03-html.t new file mode 100644 index 0000000..6c1348d --- /dev/null +++ b/t/03-html.t @@ -0,0 +1,47 @@ +#!perl +use Test::Most 'die'; +BEGIN { +eval 'use HTML::Element'; +plan skip_all => 'HTML::Element needed for this test' if $@; +} +plan tests => 1; +use strict; +use warnings; +use Tree::Template::Declare builder => '+HTML_Element'; +use Data::Dumper; + +my $tree=tree { + node { + name 'html'; + node { + name 'head'; + node { + name 'title'; + text_node 'Page title'; + } + }; + node { + name 'body'; + node { + name 'p'; + attribs id => 'p1'; + attribs class => 'para'; + text_node 'Page para'; + }; + }; + }; +}; + +my $expected_tree = HTML::Element->new_from_lol( + ['html', + ['head', + ['title','Page title'], + ], + ['body', + ['p','Page para',{class=>'para',id=>'p1'}], + ], + ], +); +ok($tree->same_as($expected_tree), + 'HTML tree' +); diff --git a/t/04-xml.t b/t/04-xml.t new file mode 100644 index 0000000..bd4ada3 --- /dev/null +++ b/t/04-xml.t @@ -0,0 +1,54 @@ +#!perl +use Test::Most 'die'; +BEGIN { +eval 'use XML::LibXML'; +plan skip_all => 'XML::LibXML needed for this test' if $@; +} +plan tests => 2; +use strict; +use warnings; +use Tree::Template::Declare builder => '+LibXML'; +use Data::Dumper; + +xmlns test => 'http://test/'; + +sub make_tree { + tree { + node { + name 'stuff'; + node { + name 'test:elem1'; + attribs 'test:buh' => 'testing'; + attribs id => 1; + node { + name 'test:sub1'; + text_node 'some content'; + } + }; + node { + name 'elem2'; + attribs id => 2; + }; + }; + }; +} + +{ +my $tree=make_tree(); + +is($tree->toStringC14N(0), + qq{<stuff><test:elem1 xmlns:test="http://test/" id="1" test:buh="testing"><test:sub1>some content</test:sub1></test:elem1><elem2 id="2"></elem2></stuff>}, + 'XML document without default NS' +); +} + +xmlns ':default' => 'ftp://test/'; + +{ +my $tree=make_tree(); + +is($tree->toStringC14N(0), + qq{<stuff xmlns="ftp://test/"><test:elem1 xmlns:test="http://test/" id="1" test:buh="testing"><test:sub1>some content</test:sub1></test:elem1><elem2 id="2"></elem2></stuff>}, + 'XML document with default NS' +); +} diff --git a/t/05-mixed.t b/t/05-mixed.t new file mode 100644 index 0000000..85bcf37 --- /dev/null +++ b/t/05-mixed.t @@ -0,0 +1,55 @@ +#!perl +use Test::Most 'die'; +BEGIN { +eval 'use XML::LibXML'; +plan skip_all => 'XML::LibXML needed for this test' if $@; +} +plan tests => 2; +use strict; +use warnings; +use Tree::Template::Declare -prefix=> 'x', builder => '+LibXML'; +use Tree::Template::Declare -prefix=> 'd', builder => '+DAG_Node'; + +use Data::Dumper; + +xxmlns test => 'http://test/'; + +my $xmltree= xtree { + xnode { + xname 'stuff'; + xnode { + xname 'test:elem1'; + xattribs id => 1, 'test:buh' => 'testing'; + xnode { + xname 'test:sub1'; + } + }; + xnode { + xname 'elem2'; + xattribs id => 2; + }; + }; +}; + +is($xmltree->toStringC14N(0), + qq{<stuff><test:elem1 xmlns:test="http://test/" id="1" test:buh="testing"><test:sub1></test:sub1></test:elem1><elem2 id="2"></elem2></stuff>}, + 'XML document' +); + +my $dagtree=dtree { + dnode { + dname 'root'; + dattribs name => 'none'; + dnode { + dname 'coso1'; + dattribs name => 'coso_1'; + }; + dnode { + dname 'coso2'; + }; + }; +}; + +cmp_deeply($dagtree->tree_to_lol(), + [[re(qr{coso1})],[re(qr{coso2})],re(qr{root})], + 'DAG_Node tree'); diff --git a/t/06-code.t b/t/06-code.t new file mode 100644 index 0000000..f80c7fa --- /dev/null +++ b/t/06-code.t @@ -0,0 +1,58 @@ +#!perl +use Test::Most tests => 2,'die'; +use strict; +use warnings; +use Tree::Template::Declare builder => '+DAG_Node'; +use Data::Dumper; + +sub make_item { + my ($name,$id)=@_; + + return detached node { + name 'item'; + attribs id => $id; + node { + name 'description'; + attribs name => $name; + }; + }; +} + +sub make_list { + my (@items)=@_; + + my @item_nodes=map {make_item(@$_)} @items; + + return node { + name 'list'; + attach_nodes @item_nodes; + }; +} + +my $tree=tree { + make_list([gino => 1], + [pino => 2], + [rino => 3], + ); +}; + +cmp_deeply($tree->tree_to_lol(), + [ + [[re(qr{description})],re(qr{item})], + [[re(qr{description})],re(qr{item})], + [[re(qr{description})],re(qr{item})], + re(qr{list})], + 'tree with code'); + +my @attrs; +$tree->walk_down({callback=>sub{ + push @attrs,$_[0]->attributes; + 1 + }}); +is_deeply(\@attrs, + [{}, + {id=>1},{name=>'gino'}, + {id=>2},{name=>'pino'}, + {id=>3},{name=>'rino'}, + ], + 'attributes'); diff --git a/t/07-inherit.t b/t/07-inherit.t new file mode 100644 index 0000000..642b24f --- /dev/null +++ b/t/07-inherit.t @@ -0,0 +1,67 @@ +#!perl +package Base;{ +use strict; +use warnings; +use Tree::Template::Declare builder => '+DAG_Node'; + +sub doc { + my ($self)=@_; + tree { + node { + name 'doc'; + $self->head(); + $self->body(); + } + } +} + +sub head { + node { name 'title' }; +} + +sub body { + node { + name 'content'; + $_[0]->content(); + } +} + +sub content { + node { name 'stuff' } +} + +} + +package Derived;{ +use strict; +use warnings; +use Tree::Template::Declare builder => '+DAG_Node'; +use base 'Base'; + +sub head { + node { name 'whatever' }; + $_[0]->SUPER::head(); +} + +sub content { + node { name 'something' } +} + +} + +package main; +use Test::Most tests=>2,'die'; +use strict; +use warnings; + +my $base_tree=Base->doc(); + +cmp_deeply($base_tree->tree_to_lol(), + [[re(qr{title})],[[re(qr{stuff})],re(qr{content})],re(qr{doc})], + 'base tree'); + +my $deriv_tree=Derived->doc(); + +cmp_deeply($deriv_tree->tree_to_lol(), + [[re(qr{whatever})],[re(qr{title})],[[re(qr{something})],re(qr{content})],re(qr{doc})], + 'derived tree'); |