Template2 icon indicating copy to clipboard operation
Template2 copied to clipboard

When creating a new document Provider uses global DOCUMENT instead of self's [rt.cpan.org #57206]

Open atoomic opened this issue 7 years ago • 2 comments
trafficstars

Migrated from rt.cpan.org#57206 (status was 'new')

Requestors:

Attachments:

From http://dekimsey.myopenid.com/ on 2010-05-04 19:00:14:

The provider object already defines its own DOCUMENT class to be used for 
creating a Template document. Other places in the code properly reference 
the $self->{DOCUMENT}, this line seemed to have been overlooked when the 
code was refactored. Wrote a quick-n-dirty test and added it to provider.t

atoomic avatar Oct 05 '18 17:10 atoomic

diff -ur Template-Toolkit-2.22/lib/Template/Provider.pm Template-Toolkit-2.22p/lib/Template/Provider.pm
--- Template-Toolkit-2.22/lib/Template/Provider.pm	2008-11-13 03:30:46.000000000 -0500
+++ Template-Toolkit-2.22p/lib/Template/Provider.pm	2010-05-04 14:23:43.000000000 -0400
@@ -891,7 +891,7 @@
 
         unless ($error) {
             return $data                                        ## RETURN ##
-                if $data->{ data } = $DOCUMENT->new($parsedoc);
+                if $data->{ data } = $self->{DOCUMENT}->new($parsedoc);
             $error = $Template::Document::ERROR;
         }
     }
diff -ur Template-Toolkit-2.22/t/provider.t Template-Toolkit-2.22p/t/provider.t
--- Template-Toolkit-2.22/t/provider.t	2008-11-13 03:30:45.000000000 -0500
+++ Template-Toolkit-2.22p/t/provider.t	2010-05-04 14:58:18.000000000 -0400
@@ -251,8 +251,23 @@
     ttd2   => $ttd2, 
     ttdbad => $ttd3 ];
 
-test_expect(\*DATA, $uselist, $vars);
+#------------------------------------------------------------------------
+# What about if a DOCUMENT class is specified.
+#------------------------------------------------------------------------
+require "$lib/document.pm" || die $!;
+is $provabs->{DOCUMENT}, 'Template::Document', "Default document class is specified ok";
+my $provdoc = Template::Provider->new({
+    ABSOLUTE => 1,
+    DOCUMENT => 'Test::Template::Document',
+    LOAD_TEMPLATES => [ $provabs ],
+}) || die $Template::Provider::ERROR;
+is $provdoc->{DOCUMENT}, 'Test::Template::Document', "Custom document class is specified ok";
+my ($doc_abs) = $provabs->fetch($absfile);
+my ($doc_oth) = $provdoc->fetch($absfile);
+is ref $doc_abs, 'Template::Document';
+is ref $doc_oth, 'Test::Template::Document';
 
+test_expect(\*DATA, $uselist, $vars);
 
 __DATA__
 -- test --

toddr avatar Oct 05 '18 20:10 toddr

The supplied fix breaks test so I'm very unsure if its presence there was intentional. I will need to dig to be sure.

toddr avatar Oct 08 '18 23:10 toddr