X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=t%2Fdb_dependent%2FXSLT_Handler.t;h=8d6bc5cde02bd63dcb1acbd256157af8741c621c;hb=8a0e21f0ecfd7e5bd135ad30e8955960b5d3549d;hp=770568c76606b681bfbcbea5877c29fda3f0e117;hpb=97acd9511e5a3abb22dac02fd0014c44295a4313;p=koha.git
diff --git a/t/db_dependent/XSLT_Handler.t b/t/db_dependent/XSLT_Handler.t
index 770568c766..8d6bc5cde0 100644
--- a/t/db_dependent/XSLT_Handler.t
+++ b/t/db_dependent/XSLT_Handler.t
@@ -21,19 +21,23 @@ use Modern::Perl;
use FindBin;
use File::Slurp;
-use Test::More tests => 27;
+use Test::More tests => 41;
+use Test::Warn;
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
+warning_is { $engine->transform('') } #we passed no file at first time
+ "No XSLT file passed.",
+ "No XSLT warning correctly displayed";
is( $engine->err, 1, 'Engine returns error on no file' );
-$engine->transform( '', 'thisfileshouldnotexist.%$#@' );
+warning_is { $engine->transform( '', 'thisfileshouldnotexist.%$#@' ) }
+ "XSLT file not found.",
+ "No XSLT warning correctly displayed";
is( $engine->err, 2, 'Engine returns error on bad file' );
-
is( $engine->refresh( 'asdjhaskjh'), 0, 'Test on invalid refresh' );
#check first test xsl
@@ -44,13 +48,30 @@ 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 );
+my $output;
+
+# Undefined text tests
+warning_is { $output = $engine->transform( undef, $xsltfile_1 ) }
+ "No string to transform.",
+ "No string warning correctly displayed";
is( $engine->err, 7, 'Engine returns error on undefined text' );
-$output= $engine->transform( '', $xsltfile_1 );
+
+# Empty string tests
+warning_is { $output = $engine->transform( '', $xsltfile_1 ) }
+ "Error while parsing input: Empty String",
+ "Empty string warning correctly displayed";
is( $engine->err, 5, 'Engine returns error on empty string' );
-$output= $engine->transform( 'abcdef', $xsltfile_1 );
+
+# Non-XML tests
+warning_like { $output = $engine->transform( 'abcdef', $xsltfile_1 ) }
+ qr{^Error while parsing input: :1: parser error : Start tag expected, '<' not found},
+ "Non-XML warning correctly displayed";
is( $engine->err, 5, 'Engine returns error on non-xml' );
-$output= $engine->transform( '', $xsltfile_1 );
+
+# Malformed XML tests
+warning_like { $output = $engine->transform( '', $xsltfile_1 ) }
+ qr{^Error while parsing input: :1: parser error : Opening and ending tag mismatch: a line 1 and b},
+ "Malformed XML warning correctly displayed";
is( $engine->err, 5, 'Engine returns error on malformed xml' );
#Test not returning source on failure when asked for
@@ -60,13 +81,19 @@ my $secondengine=Koha::XSLT_Handler->new( {
some_unknown_attrib => 'just_for_fun',
});
$engine->do_not_return_source(1);
-$output= $engine->transform( '', $xsltfile_1 );
+warning_like { $output = $engine->transform( '', $xsltfile_1 ) }
+ qr{^Error while parsing input: :1: parser error : Opening and ending tag mismatch: a line 1 and b},
+ "Malformed XML warning correctly displayed";
is( defined $output? 1: 0, 0, 'Engine respects do_not_return_source==1');
-$output= $secondengine->transform( '', $xsltfile_1 );
+warning_like { $output = $secondengine->transform( '', $xsltfile_1 ) }
+ qr{^Error while parsing input: :1: parser error : Opening and ending tag mismatch: a line 1 and b},
+ "Malformed XML warning correctly displayed";
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 );
+warning_like { $output = $engine->transform( '', $xsltfile_1 ) }
+ qr{^Error while parsing input: :1: parser error : Opening and ending tag mismatch: a line 1 and b},
+ "Malformed XML warning correctly displayed";
is( defined $output? 1: 0, 1, 'Engine respects do_not_return_source==0');
#Testing valid refresh now
@@ -107,6 +134,11 @@ is( $output, $output2, 'Try hash parameter code');
#Check rerun on last code
$output2 = $engine->transform( $xml_2 );
is( $output, $output2, 'Rerun on previous passed code');
+#Check format xmldoc
+is( ref $engine->transform({
+ file => $xsltfile_1, xml => $xml_2, format => 'xmldoc',
+}), 'XML::LibXML::Document',
+'Format parameter returns a xml document object' );
#The second test xsl contains bad code
my $xsltfile_2 = 'test02.xsl';
@@ -114,7 +146,9 @@ 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 );
+warning_like { $output = $engine->transform( $xml_2, $xsltfile_2 ) }
+ qr{^Error while parsing stylesheet:},
+ "Bad XSL warning correctly displayed";
is( $engine->err, 4, 'Engine returned error for parsing bad xsl' );
is( defined($engine->errstr), 1, 'Error string contains text');
@@ -127,4 +161,27 @@ $output= $engine->transform( $xml_2, $xsltfile_3 );
is( $engine->err, undef, 'Unexpected error on transform with third xsl' );
is( $engine->refresh, 3, 'Final test on clearing cache' );
+my $xsltfile_4 = 'test04.xsl';
+is( -e $path.$xsltfile_4, 1, "Found my test stylesheet $xsltfile_4" );
+exit if !-e $path.$xsltfile_4;
+$xsltfile_4 = $path.$xsltfile_4;
+
+my $parameters = { injected_variable => "'this is a test'",};
+$output = $engine->transform({
+ xml => $xml_1,
+ file => $xsltfile_4,
+ parameters => $parameters,
+ });
+require XML::LibXML;
+my $dom = XML::LibXML->load_xml(string => $output);
+my $result = $dom->find( '/just_a_tagname' );
+is ( $result->to_literal(), 'this is a test', "Successfully injected string into XSLT parameter/variable");
+
+$output = $engine->transform({
+ xml => $xml_1,
+ file => $xsltfile_4,
+ });
+$dom = XML::LibXML->load_xml(string => $output);
+$result = $dom->find( '/just_a_tagname' );
+is ( $result->to_literal(), '', "As expected, no XSLT parameters/variables were added");
#End of tests