@@ -, +, @@ Koha::XSLT_Handler --- t/db_dependent/XSLT_Handler.t | 119 ++++++++++++++++++++++++++++++++ t/db_dependent/XSLT_Handler/test01.xsl | 24 +++++++ t/db_dependent/XSLT_Handler/test02.xsl | 13 ++++ t/db_dependent/XSLT_Handler/test03.xsl | 17 +++++ 4 files changed, 173 insertions(+) create mode 100644 t/db_dependent/XSLT_Handler.t create mode 100644 t/db_dependent/XSLT_Handler/test01.xsl create mode 100644 t/db_dependent/XSLT_Handler/test02.xsl create mode 100644 t/db_dependent/XSLT_Handler/test03.xsl --- a/t/db_dependent/XSLT_Handler.t +++ a/t/db_dependent/XSLT_Handler.t @@ -0,0 +1,119 @@ +#!/usr/bin/perl + +# Copyright 2014 Rijksmuseum +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; + +use FindBin; +use Test::More tests => 24; + +use Koha::XSLT_Handler; + +my $engine=Koha::XSLT_Handler->new; +is( ref $engine, 'Koha::XSLT_Handler', 'Testing creation of handler object' ); + +$engine->transform(''); #we passed no file at first time +is( $engine->err, 1, 'Engine returns error on no file' ); + +$engine->transform( '', 'thisfileshouldnotexist.%$#@' ); +is( $engine->err, 2, 'Engine returns error on bad file' ); + +is( $engine->refresh( 'asdjhaskjh'), 0, 'Test on invalid refresh' ); + +#check first test xsl +my $path= $FindBin::Bin.'/XSLT_Handler/'; +my $xsltfile_1 = 'test01.xsl'; +is( -e $path.$xsltfile_1, 1, "Found my test stylesheet $xsltfile_1" ); +exit if !-e $path.$xsltfile_1; +$xsltfile_1= $path.$xsltfile_1; + +#Testing not-xml strings (undef, empty, some text, malformed xml +my $output= $engine->transform( undef, $xsltfile_1 ); +is( $engine->err, 7, 'Engine returns error on undefined text' ); +$output= $engine->transform( '', $xsltfile_1 ); +is( $engine->err, 5, 'Engine returns error on empty string' ); +$output= $engine->transform( 'abcdef', $xsltfile_1 ); +is( $engine->err, 5, 'Engine returns error on non-xml' ); +$output= $engine->transform( '', $xsltfile_1 ); +is( $engine->err, 5, 'Engine returns error on malformed xml' ); + +#Test not returning source on failure when asked for +#Include passing do_not_return via constructor on second engine +my $secondengine=Koha::XSLT_Handler->new( { + do_not_return_source => 'very_true', + some_unknown_attrib => 'just_for_fun', +}); +$engine->do_not_return_source(1); +$output= $engine->transform( '', $xsltfile_1 ); +is( defined $output? 1: 0, 0, 'Engine respects do_not_return_source==1'); +$output= $secondengine->transform( '', $xsltfile_1 ); +is( defined $output? 1: 0, 0, 'Second engine respects it too'); +undef $secondengine; #bye +$engine->do_not_return_source(0); +$output= $engine->transform( '', $xsltfile_1 ); +is( defined $output? 1: 0, 1, 'Engine respects do_not_return_source==0'); + +#Testing valid refresh now +is( $engine->refresh($xsltfile_1), 1, 'Test on valid refresh' ); +#A second time (for all) should return 0 now +is( $engine->refresh, 0, 'Test on repeated refresh' ); + +#Testing a string that should not change too much +my $xml_1=<<'EOT'; + + +EOT +$output= $engine->transform( $xml_1, $xsltfile_1 ); +is( $engine->err, undef, 'Engine returned no error for xml_1' ); +is( index($output,'')>0, 1, 'No real change expected for xml_1' ); #Just very simple check if the tag was still there + +#Test of adding a new datafield to rudimentary 'marc record' +my $xml_2=<<'EOT'; + + + +1234 +My favorite title + + +EOT +$output= $engine->transform( $xml_2 ); + #note: second parameter (file) not passed again +is( $engine->err, undef, 'Engine returned no error for xml_2' ); +is( index($output,'I saw you')>0, 1, 'Saw the expected change for xml_2' ); #Just very simple check if new datafield was added + +#The second test xsl contains bad code +my $xsltfile_2 = 'test02.xsl'; +is( -e $path.$xsltfile_2, 1, "Found my test stylesheet $xsltfile_2" ); +exit if !-e $path.$xsltfile_2; +$xsltfile_2= $path.$xsltfile_2; + +$output= $engine->transform( $xml_2, $xsltfile_2 ); +is( $engine->err, 4, 'Engine returned error for parsing bad xsl' ); +is( defined($engine->errstr), 1, 'Error string contains text'); + +#The third test xsl is okay again; main use is clearing two items from cache +my $xsltfile_3 = 'test03.xsl'; +is( -e $path.$xsltfile_3, 1, "Found my test stylesheet $xsltfile_3" ); +exit if !-e $path.$xsltfile_3; +$xsltfile_3= $path.$xsltfile_3; +$output= $engine->transform( $xml_2, $xsltfile_3 ); +is( $engine->err, undef, 'Unexpected error on transform with third xsl' ); +is( $engine->refresh, 2, 'Final test on clearing cache' ); + +#End of tests --- a/t/db_dependent/XSLT_Handler/test01.xsl +++ a/t/db_dependent/XSLT_Handler/test01.xsl @@ -0,0 +1,24 @@ + + + + + + + + + I saw you + + + + + + + + + + + + --- a/t/db_dependent/XSLT_Handler/test02.xsl +++ a/t/db_dependent/XSLT_Handler/test02.xsl @@ -0,0 +1,13 @@ + + + + + + + + + + --- a/t/db_dependent/XSLT_Handler/test03.xsl +++ a/t/db_dependent/XSLT_Handler/test03.xsl @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + --