summaryrefslogtreecommitdiff
path: root/t/06-code.t
diff options
context:
space:
mode:
Diffstat (limited to 't/06-code.t')
-rw-r--r--t/06-code.t58
1 files changed, 58 insertions, 0 deletions
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');