From 43217e6ce9a7cae817d391e9bb10a3410c88e6e2 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 18 Apr 2009 15:26:50 +0200 Subject: factories are inherited now, added test --- lib/Tree/Transform/XSLTish.pm | 12 ++++++++---- lib/Tree/Transform/XSLTish/Transformer.pm | 6 +++--- lib/Tree/Transform/XSLTish/Utils.pm | 13 ++++++------- t/02-inherit.t | 11 +++++++++-- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/lib/Tree/Transform/XSLTish.pm b/lib/Tree/Transform/XSLTish.pm index 2176aea..7053428 100644 --- a/lib/Tree/Transform/XSLTish.pm +++ b/lib/Tree/Transform/XSLTish.pm @@ -62,8 +62,10 @@ sub tree_rule { sub engine_class { my ($classname)=@_; - my $factory=Tree::Transform::XSLTish::Utils::_engine_factory(scalar caller); - $$factory=sub{$classname->new()}; + Tree::Transform::XSLTish::Utils::_set_engine_factory( + scalar caller, + sub{$classname->new()}, + ); return; } @@ -71,8 +73,10 @@ sub engine_class { sub engine_factory(&) { my ($new_factory)=@_; - my $factory=Tree::Transform::XSLTish::Utils::_engine_factory(scalar caller); - $$factory=$new_factory; + Tree::Transform::XSLTish::Utils::_set_engine_factory( + scalar caller, + $new_factory, + ); return; } diff --git a/lib/Tree/Transform/XSLTish/Transformer.pm b/lib/Tree/Transform/XSLTish/Transformer.pm index c4ff53f..dae5821 100644 --- a/lib/Tree/Transform/XSLTish/Transformer.pm +++ b/lib/Tree/Transform/XSLTish/Transformer.pm @@ -44,9 +44,9 @@ sub _build_engine { my ($self)=@_; if ($self->rules_package) { - my $factory=Tree::Transform::XSLTish::Utils::_engine_factory($self->rules_package); - if ($$factory) { - return $$factory->(); + my $factory=$self->rules_package->can($Tree::Transform::XSLTish::Utils::ENGINE_FACTORY_NAME); + if ($factory) { + return $factory->(); } } return Tree::XPathEngine->new(); diff --git a/lib/Tree/Transform/XSLTish/Utils.pm b/lib/Tree/Transform/XSLTish/Utils.pm index bfb438c..770426f 100644 --- a/lib/Tree/Transform/XSLTish/Utils.pm +++ b/lib/Tree/Transform/XSLTish/Utils.pm @@ -14,15 +14,14 @@ sub _rules_store { return $pack->get_package_symbol($RULES_NAME); } -my $ENGINE_FACTORY_NAME='$_tree_transform_engine_factory'; +our $ENGINE_FACTORY_NAME='_tree_transform_engine_factory'; +my $ENGINE_FACTORY_NAME_WITH_SIGIL='&'.$ENGINE_FACTORY_NAME; -sub _engine_factory { - my $pack=Class::MOP::Class->initialize($_[0]); +sub _set_engine_factory { + my ($pack_name,$factory)=@_; + my $pack=Class::MOP::Class->initialize($pack_name); - if (! $pack->has_package_symbol($ENGINE_FACTORY_NAME) ) { - $pack->add_package_symbol($ENGINE_FACTORY_NAME,undef); - } - return $pack->get_package_symbol($ENGINE_FACTORY_NAME); + $pack->add_package_symbol($ENGINE_FACTORY_NAME_WITH_SIGIL,$factory); } diff --git a/t/02-inherit.t b/t/02-inherit.t index fb8e238..f11d116 100644 --- a/t/02-inherit.t +++ b/t/02-inherit.t @@ -1,8 +1,15 @@ #!perl package TransformA;{ - use Tree::Transform::XSLTish; + use Tree::Transform::XSLTish ':engine'; use strict; use warnings; + use Tree::XPathEngine; + use Test::Most; + + engine_factory { + ok 1,'custom factory called'; + Tree::XPathEngine->new(); + }; default_rules; @@ -29,7 +36,7 @@ package TransformB;{ } package main; -use Test::Most qw(no_plan die); +use Test::Most tests=>2,'die'; use strict; use warnings; use Tree::DAG_Node::XPath; -- cgit v1.2.3