From: Petr P. <pa...@us...> - 2003-03-14 16:23:55
|
Update of /cvsroot/perl-xml/XML-LibXML-XPathContext/t In directory sc8-pr-cvs1:/tmp/cvs-serv21709/t Added Files: 02-functions.t Log Message: added extension functions support --- NEW FILE: 02-functions.t --- # -*- cperl -*- use Test; BEGIN { plan tests => 11 }; use XML::LibXML; use XML::LibXML::XPathContext; my $doc = XML::LibXML->new->parse_string(<<'XML'); <foo><bar a="b">Bla</bar><bar/></foo> XML ok($doc); my $xc = XML::LibXML::XPathContext->new($doc); $xc->registerNs('foo','urn:foo'); $xc->registerFunctionNS('copy','urn:foo', sub { @_==1 ? $_[0] : die "too many parameters"} ); # copy string, real, integer, nodelist ok($xc->findvalue('foo:copy("bar")') eq 'bar'); ok($xc->findvalue('foo:copy(3.14)') == 3.14); ok($xc->findvalue('foo:copy(7)') == 7); ok($xc->find('foo:copy(//*)')->size() == 3); my ($foo)=$xc->findnodes('(//*)[2]'); ok($xc->findnodes('foo:copy(//*)[2]')->pop->isSameNode($foo)); # too many arguments eval { $xc->findvalue('foo:copy(1,xyz)') }; ok ($@); # without a namespace $xc->registerFunction('dummy', sub { 'DUMMY' }); ok($xc->findvalue('dummy()') eq 'DUMMY'); # a mix of different arguments types $xc->registerFunction('join', sub { join shift, map { (ref($_)&&$_->isa('XML::LibXML::Node')) ? $_->nodeName : $_ } map { (ref($_)&&$_->isa('XML::LibXML::NodeList')) ? @$_ : $_ } @_ }); ok($xc->findvalue('join("","a","b","c")') eq 'abc'); ok($xc->findvalue('join("-","a",/foo,//*)') eq 'a-foo-foo-bar-bar'); ok($xc->findvalue('join("-",foo:copy(//*))') eq 'foo-bar-bar'); |