use lib 't'; BEGIN { # to handle systems with no installed Test module # we include the t dir (where a copy of Test.pm is located) # as a fallback eval { require Test; }; use Test; plan tests => 14; } use Omicia::AppHandle; use XML::NestArray qw(:all); use strict; use Data::Dumper; my $tree = Node(top=>[ Node('personset'=>[ Node('person'=>[ Node('name'=>'davey'), Node('address'=>'here'), Node('description'=>[ Node('hair'=>'green'), Node('eyes'=>'two'), Node('teeth'=>5), ] ), Node('pets'=>[ Node('petname'=>'igor'), Node('petname'=>'ginger'), ] ), ], ), Node('person'=>[ Node('name'=>'shuggy'), Node('address'=>'there'), Node('description'=>[ Node('hair'=>'red'), Node('eyes'=>'three'), Node('teeth'=>1), ] ), Node('pets'=>[ Node('petname'=>'thud'), Node('petname'=>'spud'), ] ), ] ), ] ), Node('animalset'=>[ Node('animal'=>[ Node('name'=>'igor'), Node('class'=>'rat'), Node('description'=>[ Node('fur'=>'white'), Node('eyes'=>'red'), Node('teeth'=>50), ], ), ], ), ] ), ] ); print tree2xml($tree); my @persons = findSubTree($tree, 'person'); print "@persons\n"; map { print tree2xml($_); # print Dumper $_; # print tree2xml($_->children); } @persons; my @set = findSubTree($tree, 'personset'); print "set=@set\n"; map { # print Dumper $_; map {print $_->xml} $_->children; # map {print tree2xml($_)} $_->children; # map {print Dumper($_)} $_->children; # print tree2xml($_->children); } @set; my $set = shift @set; ok( scalar($tree->findSubTreeVal("name")), 3); ok( $tree->testSubTreeMatch("name", "igor")); ok(! $tree->testSubTreeMatch("name", "stravinsky")); my @p = $tree->findSubTreeWhere("person", Node('testSubTreeMatch' =>[ Node('arg' => 'name'), Node('arg' => 'shuggy'), ] ) ); ok(scalar(@p),1); my $p = shift @p; print $p->xml; my $eval = Node(findSubTreeWhere => [ Node(arg => 'person'), Node(arg => [ Node('testSubTreeMatch'=>[ Node('arg' => 'name'), Node('arg' => 'shuggy'), ] ) ] ) ] ); #print $tree->evalTree($eval)->xml; # even more advanced my $eval = Node(findSubTreeWhere => [ Node(arg => 'person'), Node(arg => [ Node('testSubTreeMatch'=>[ Node('arg' => 'petname'), Node('arg' => '?p'), ] ) ] ) ] ); print $eval->xml; #print $tree->evalTree($eval)->xml; my $lispy =<xml; my $r = $tree->evalTree($code); print $r->xml; die; my $lispy2 =<