package main;
use Test::Most 'die';
BEGIN {
eval 'use PPIx::XPath';
plan skip_all => 'PPIx::XPath needed for this test' if $@;
}
package CXpEngine; {
use PPIx::XPath;
sub new { bless {},shift }
sub findnodes {
my ($self,$expr,$node)=@_;
return PPIx::XPath->new($node)->match($expr);
}
}
package PPITransform;{
use Tree::Transform::XSLTish ':engine';
use strict;
use warnings;
engine_class 'CXpEngine';
default_rules;
tree_rule match => '//Statement::Sub', action => sub {
return $_[0]->it->name.'('.$_[0]->it->prototype.')';
};
}
package main;
use strict;
use warnings;
use PPI;
plan tests=>1;
{
my $doc=PPI::Document->new(\<<'EOP');
sub gino($%) {}
sub pino {}
gino(\&pino,{1=>2});
EOP
my $x=PPIx::XPath->new($doc);
diag "$_\n" for $x->match('//Statement::Sub');
my $trans=PPITransform->new();
my @results=$trans->transform($doc);
is_deeply \@results,['gino($%)','pino'],'PPI example';
}