View | Details | Raw Unified | Return to bug 11826
Collapse All | Expand All

(-)a/t/db_dependent/XSLT_Handler.t (+119 lines)
Line 0 Link Here
1
#!/usr/bin/perl
2
3
# Copyright 2014 Rijksmuseum
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it under the
8
# terms of the GNU General Public License as published by the Free Software
9
# Foundation; either version 3 of the License, or (at your option) any later
10
# version.
11
#
12
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License along
17
# with Koha; if not, write to the Free Software Foundation, Inc.,
18
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20
use Modern::Perl;
21
22
use FindBin;
23
use Test::More tests => 24;
24
25
use Koha::XSLT_Handler;
26
27
my $engine=Koha::XSLT_Handler->new;
28
is( ref $engine, 'Koha::XSLT_Handler', 'Testing creation of handler object' );
29
30
$engine->transform(''); #we passed no file at first time
31
is( $engine->err, 1, 'Engine returns error on no file' );
32
33
$engine->transform( '', 'thisfileshouldnotexist.%$#@' );
34
is( $engine->err, 2, 'Engine returns error on bad file' );
35
36
is( $engine->refresh( 'asdjhaskjh'), 0, 'Test on invalid refresh' );
37
38
#check first test xsl
39
my $path= $FindBin::Bin.'/XSLT_Handler/';
40
my $xsltfile_1 = 'test01.xsl';
41
is( -e $path.$xsltfile_1, 1, "Found my test stylesheet $xsltfile_1" );
42
exit if !-e $path.$xsltfile_1;
43
$xsltfile_1= $path.$xsltfile_1;
44
45
#Testing not-xml strings (undef, empty, some text, malformed xml
46
my $output= $engine->transform( undef, $xsltfile_1 );
47
is( $engine->err, 7, 'Engine returns error on undefined text' );
48
$output= $engine->transform( '', $xsltfile_1 );
49
is( $engine->err, 5, 'Engine returns error on empty string' );
50
$output= $engine->transform( 'abcdef', $xsltfile_1 );
51
is( $engine->err, 5, 'Engine returns error on non-xml' );
52
$output= $engine->transform( '<a></b>', $xsltfile_1 );
53
is( $engine->err, 5, 'Engine returns error on malformed xml' );
54
55
#Test not returning source on failure when asked for
56
#Include passing do_not_return via constructor on second engine
57
my $secondengine=Koha::XSLT_Handler->new( {
58
    do_not_return_source => 'very_true',
59
    some_unknown_attrib  => 'just_for_fun',
60
});
61
$engine->do_not_return_source(1);
62
$output= $engine->transform( '<a></b>', $xsltfile_1 );
63
is( defined $output? 1: 0, 0, 'Engine respects do_not_return_source==1');
64
$output= $secondengine->transform( '<a></b>', $xsltfile_1 );
65
is( defined $output? 1: 0, 0, 'Second engine respects it too');
66
undef $secondengine; #bye
67
$engine->do_not_return_source(0);
68
$output= $engine->transform( '<a></b>', $xsltfile_1 );
69
is( defined $output? 1: 0, 1, 'Engine respects do_not_return_source==0');
70
71
#Testing valid refresh now
72
is( $engine->refresh($xsltfile_1), 1, 'Test on valid refresh' );
73
#A second time (for all) should return 0 now
74
is( $engine->refresh, 0, 'Test on repeated refresh' );
75
76
#Testing a string that should not change too much
77
my $xml_1=<<'EOT';
78
<just_a_tagname>
79
</just_a_tagname>
80
EOT
81
$output= $engine->transform( $xml_1, $xsltfile_1 );
82
is( $engine->err, undef, 'Engine returned no error for xml_1' );
83
is( index($output,'<just_a_tagname>')>0, 1, 'No real change expected for xml_1' ); #Just very simple check if the tag was still there
84
85
#Test of adding a new datafield to rudimentary 'marc record'
86
my $xml_2=<<'EOT';
87
<?xml version="1.0" encoding="UTF-8"?>
88
<collection>
89
<record>
90
<controlfield tag="001">1234</controlfield>
91
<datafield tag="245" ind1="1" ind2="0"><subfield tag="a">My favorite title</subfield></datafield>
92
</record>
93
</collection>
94
EOT
95
$output= $engine->transform( $xml_2 );
96
    #note: second parameter (file) not passed again
97
is( $engine->err, undef, 'Engine returned no error for xml_2' );
98
is( index($output,'I saw you')>0, 1, 'Saw the expected change for xml_2' ); #Just very simple check if new datafield was added
99
100
#The second test xsl contains bad code
101
my $xsltfile_2 = 'test02.xsl';
102
is( -e $path.$xsltfile_2, 1, "Found my test stylesheet $xsltfile_2" );
103
exit if !-e $path.$xsltfile_2;
104
$xsltfile_2= $path.$xsltfile_2;
105
106
$output= $engine->transform( $xml_2, $xsltfile_2 );
107
is( $engine->err, 4, 'Engine returned error for parsing bad xsl' );
108
is( defined($engine->errstr), 1, 'Error string contains text');
109
110
#The third test xsl is okay again; main use is clearing two items from cache
111
my $xsltfile_3 = 'test03.xsl';
112
is( -e $path.$xsltfile_3, 1, "Found my test stylesheet $xsltfile_3" );
113
exit if !-e $path.$xsltfile_3;
114
$xsltfile_3= $path.$xsltfile_3;
115
$output= $engine->transform( $xml_2, $xsltfile_3 );
116
is( $engine->err, undef, 'Unexpected error on transform with third xsl' );
117
is( $engine->refresh, 2, 'Final test on clearing cache' );
118
119
#End of tests
(-)a/t/db_dependent/XSLT_Handler/test01.xsl (+24 lines)
Line 0 Link Here
1
<xsl:stylesheet version="1.0"
2
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3
    xmlns:marc="http://www.loc.gov/MARC21/slim"
4
>
5
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
6
7
  <xsl:template match="record">
8
      <record>
9
      <xsl:apply-templates/>
10
      <datafield tag="990">
11
        <subfield code="a">
12
          <xsl:text>I saw you</xsl:text>
13
        </subfield>
14
      </datafield>
15
      </record>
16
  </xsl:template>
17
18
  <xsl:template match="node()">
19
    <xsl:copy select=".">
20
      <xsl:copy-of select="@*"/>
21
      <xsl:apply-templates/>
22
    </xsl:copy>
23
  </xsl:template>
24
</xsl:stylesheet>
(-)a/t/db_dependent/XSLT_Handler/test02.xsl (+13 lines)
Line 0 Link Here
1
<!-- This is BAD coded xslt stylesheet to test XSLT_Handler -->
2
<xsl:stylesheet version="1.0"
3
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
    xmlns:marc="http://www.loc.gov/MARC21/slim"
5
>
6
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
7
8
  <xsl:variable name="redefine" select="0"/>
9
  <xsl:variable name="redefine" select="1"/>
10
      <!-- Intentional redefine to generate parsing error -->
11
  <xsl:template match="record">
12
  </xsl:template>
13
</xsl:stylesheet>
(-)a/t/db_dependent/XSLT_Handler/test03.xsl (-1 / +17 lines)
Line 0 Link Here
0
- 
1
<xsl:stylesheet version="1.0"
2
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3
    xmlns:marc="http://www.loc.gov/MARC21/slim"
4
>
5
  <xsl:output method="xml" encoding="UTF-8" version="1.0" indent="yes"/>
6
7
  <xsl:template match="/">
8
      <xsl:apply-templates/>
9
  </xsl:template>
10
11
  <xsl:template match="node()">
12
    <xsl:copy select=".">
13
      <xsl:copy-of select="@*"/>
14
      <xsl:apply-templates/>
15
    </xsl:copy>
16
  </xsl:template>
17
</xsl:stylesheet>

Return to bug 11826