summaryrefslogtreecommitdiff
path: root/t/07-class-xpath.t
diff options
context:
space:
mode:
Diffstat (limited to 't/07-class-xpath.t')
-rw-r--r--t/07-class-xpath.t53
1 files changed, 53 insertions, 0 deletions
diff --git a/t/07-class-xpath.t b/t/07-class-xpath.t
new file mode 100644
index 0000000..891ddff
--- /dev/null
+++ b/t/07-class-xpath.t
@@ -0,0 +1,53 @@
+#!perl
+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';
+}