Skip to content

Commit b8aace4

Browse files
Lauretttaadamretter
authored andcommitted
[test] Tests to reproduce relative XSLT import issues: #169
1 parent 016695f commit b8aace4

2 files changed

Lines changed: 137 additions & 0 deletions

File tree

exist-core/src/test/java/org/exist/xquery/TransformTest.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,50 @@ public void transform() throws XMLDBException {
9595
"<p>End Template 1</p>" +
9696
"</doc>");
9797
}
98+
99+
@Test
100+
public void transformWithSameDirectoryImportViaDbLocation() throws XMLDBException {
101+
final String query =
102+
"import module namespace transform='http://exist-db.org/xquery/transform';\n" +
103+
"let $xml := <empty/>\n" +
104+
"let $xsl := '/db/" + TEST_COLLECTION_NAME + "/same-dir/a.xsl'\n" +
105+
"return transform:transform($xml, $xsl, ())";
106+
final String result = execQuery(query);
107+
assertEquals("<doc><p>From A</p><p>From B</p></doc>", result);
108+
}
109+
110+
@Test
111+
public void transformWithSameDirectoryImportViaXmldbLocation() throws XMLDBException {
112+
final String query =
113+
"import module namespace transform='http://exist-db.org/xquery/transform';\n" +
114+
"let $xml := <empty/>\n" +
115+
"let $xsl := 'xmldb:exist:///db/" + TEST_COLLECTION_NAME + "/same-dir/a.xsl'\n" +
116+
"return transform:transform($xml, $xsl, ())";
117+
final String result = execQuery(query);
118+
assertEquals("<doc><p>From A</p><p>From B</p></doc>", result);
119+
}
120+
121+
@Test
122+
public void transformWithSameDirectoryImportViaDbNode() throws XMLDBException {
123+
final String query =
124+
"import module namespace transform='http://exist-db.org/xquery/transform';\n" +
125+
"let $xml := <empty/>\n" +
126+
"let $xsl := doc('/db/" + TEST_COLLECTION_NAME + "/same-dir/a.xsl')\n" +
127+
"return transform:transform($xml, $xsl, ())";
128+
final String result = execQuery(query);
129+
assertEquals("<doc><p>From A</p><p>From B</p></doc>", result);
130+
}
131+
132+
@Test
133+
public void transformWithSameDirectoryImportViaXmldbNode() throws XMLDBException {
134+
final String query =
135+
"import module namespace transform='http://exist-db.org/xquery/transform';\n" +
136+
"let $xml := <empty/>\n" +
137+
"let $xsl := doc('xmldb:exist:///db/" + TEST_COLLECTION_NAME + "/same-dir/a.xsl')\n" +
138+
"return transform:transform($xml, $xsl, ())";
139+
final String result = execQuery(query);
140+
assertEquals("<doc><p>From A</p><p>From B</p></doc>", result);
141+
}
98142

99143

100144
private String execQuery(String query) throws XMLDBException {
@@ -174,6 +218,29 @@ public void setUp() throws ClassNotFoundException, IllegalAccessException, Insta
174218
addXMLDocument(xsl1, doc1, "1.xsl");
175219
addXMLDocument(xsl2, doc2, "2.xsl");
176220
addXMLDocument(xsl3, doc3, "3.xsl");
221+
222+
service = (CollectionManagementService) testCollection.getService("CollectionManagementService", "1.0");
223+
224+
Collection sameDir = service.createCollection("same-dir");
225+
assertNotNull(sameDir);
226+
227+
String docA = "<?xml version='1.0' encoding='UTF-8'?>\n" +
228+
"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>\n"+
229+
"<xsl:import href='b.xsl'/>\n" +
230+
"<xsl:template match='/'>" +
231+
"<doc><p>From A</p><xsl:call-template name='from-b'/></doc>" +
232+
"</xsl:template>" +
233+
"</xsl:stylesheet>";
234+
235+
String docB = "<?xml version='1.0' encoding='UTF-8'?>\n" +
236+
"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>\n"+
237+
"<xsl:template name='from-b'>" +
238+
"<p>From B</p>" +
239+
"</xsl:template>" +
240+
"</xsl:stylesheet>";
241+
242+
addXMLDocument(sameDir, docA, "a.xsl");
243+
addXMLDocument(sameDir, docB, "b.xsl");
177244
}
178245

179246
@After

exist-core/src/test/java/org/exist/xquery/functions/fn/transform/FunTransformITTest.java

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,47 @@
5858
*/
5959
public class FunTransformITTest {
6060

61+
private static final XmldbURI TEST_IMPORT_XSLT_COLLECTION = XmldbURI.create("/db/fn-transform-import-test");
62+
private static final XmldbURI IMPORT_A_XSLT_NAME = XmldbURI.create("a.xsl");
63+
private static final XmldbURI IMPORT_B_XSLT_NAME = XmldbURI.create("b.xsl");
64+
65+
private static final String IMPORT_A_XSLT =
66+
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n" +
67+
" <xsl:import href=\"b.xsl\"/>\n" +
68+
" <xsl:template match=\"/\">\n" +
69+
" <doc><p>From A</p><xsl:call-template name=\"from-b\"/></doc>\n" +
70+
" </xsl:template>\n" +
71+
"</xsl:stylesheet>";
72+
73+
private static final String IMPORT_B_XSLT =
74+
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n" +
75+
" <xsl:template name=\"from-b\"><p>From B</p></xsl:template>\n" +
76+
"</xsl:stylesheet>";
77+
78+
private static final String SAME_DIR_IMPORT_VIA_DB_LOCATION_QUERY =
79+
"fn:transform(map {\n" +
80+
" \"stylesheet-location\": \"/db/fn-transform-import-test/a.xsl\",\n" +
81+
" \"source-node\": document { <empty/> }\n" +
82+
"})?output";
83+
84+
private static final String SAME_DIR_IMPORT_VIA_XMLDB_LOCATION_QUERY =
85+
"fn:transform(map {\n" +
86+
" \"stylesheet-location\": \"xmldb:exist:///db/fn-transform-import-test/a.xsl\",\n" +
87+
" \"source-node\": document { <empty/> }\n" +
88+
"})?output";
89+
90+
private static final String SAME_DIR_IMPORT_VIA_DB_NODE_QUERY =
91+
"fn:transform(map {\n" +
92+
" \"stylesheet-node\": doc(\"/db/fn-transform-import-test/a.xsl\"),\n" +
93+
" \"source-node\": document { <empty/> }\n" +
94+
"})?output";
95+
96+
private static final String SAME_DIR_IMPORT_VIA_XMLDB_NODE_QUERY =
97+
"fn:transform(map {\n" +
98+
" \"stylesheet-node\": doc(\"xmldb:exist:///db/fn-transform-import-test/a.xsl\"),\n" +
99+
" \"source-node\": document { <empty/> }\n" +
100+
"})?output";
101+
61102
private static final XmldbURI TEST_IDENTITY_XSLT_COLLECTION = XmldbURI.create("/db/transform-identity-test");
62103
private static final XmldbURI IDENTITY_XSLT_NAME = XmldbURI.create("xsl-identity.xslt");
63104

@@ -143,6 +184,30 @@ public class FunTransformITTest {
143184
@ClassRule
144185
public static ExistEmbeddedServer existEmbeddedServer = new ExistEmbeddedServer(true, true);
145186

187+
@Test
188+
public void sameDirectoryImportViaDbLocation() throws XPathException, PermissionDeniedException, EXistException {
189+
final Source expected = Input.fromString("<doc><p>From A</p><p>From B</p></doc>").build();
190+
expectQuery(SAME_DIR_IMPORT_VIA_DB_LOCATION_QUERY, expected);
191+
}
192+
193+
@Test
194+
public void sameDirectoryImportViaXmldbLocation() throws XPathException, PermissionDeniedException, EXistException {
195+
final Source expected = Input.fromString("<doc><p>From A</p><p>From B</p></doc>").build();
196+
expectQuery(SAME_DIR_IMPORT_VIA_XMLDB_LOCATION_QUERY, expected);
197+
}
198+
199+
@Test
200+
public void sameDirectoryImportViaDbNode() throws XPathException, PermissionDeniedException, EXistException {
201+
final Source expected = Input.fromString("<doc><p>From A</p><p>From B</p></doc>").build();
202+
expectQuery(SAME_DIR_IMPORT_VIA_DB_NODE_QUERY, expected);
203+
}
204+
205+
@Test
206+
public void sameDirectoryImportViaXmldbNode() throws XPathException, PermissionDeniedException, EXistException {
207+
final Source expected = Input.fromString("<doc><p>From A</p><p>From B</p></doc>").build();
208+
expectQuery(SAME_DIR_IMPORT_VIA_XMLDB_NODE_QUERY, expected);
209+
}
210+
146211
@Test
147212
public void identityPersistentDom() throws XPathException, PermissionDeniedException, EXistException {
148213
final Source expected = Input.fromString(IDENTITY_XML).build();
@@ -212,6 +277,11 @@ public static void storeResources() throws EXistException, PermissionDeniedExcep
212277
Tuple(IDENTITY_XML_NAME, IDENTITY_XML)
213278
);
214279

280+
createCollection(broker, transaction, TEST_IMPORT_XSLT_COLLECTION,
281+
Tuple(IMPORT_A_XSLT_NAME, IMPORT_A_XSLT),
282+
Tuple(IMPORT_B_XSLT_NAME, IMPORT_B_XSLT)
283+
);
284+
215285
transaction.commit();
216286
}
217287
}

0 commit comments

Comments
 (0)