1
2
3
4
5
6
7 package org.mule.transformers.xml.xquery;
8
9 import org.mule.DefaultMuleMessage;
10 import org.mule.api.transformer.Transformer;
11 import org.mule.module.xml.transformer.XQueryTransformer;
12 import org.mule.transformer.AbstractTransformerTestCase;
13 import org.mule.transformer.types.DataTypeFactory;
14 import org.mule.util.IOUtils;
15
16 import java.util.HashMap;
17 import java.util.Map;
18 import java.util.Properties;
19
20 import org.custommonkey.xmlunit.XMLUnit;
21 import org.w3c.dom.Document;
22
23 public class InlineXQueryTransformerWithParamsTestCase extends AbstractTransformerTestCase
24 {
25 private String srcData;
26 private String resultData;
27
28 @Override
29 protected void doSetUp() throws Exception
30 {
31 XMLUnit.setIgnoreWhitespace(true);
32 XMLUnit.setIgnoreComments(true);
33 srcData = IOUtils.getResourceAsString("cd-catalog.xml", getClass());
34 resultData = IOUtils.getResourceAsString("cd-catalog-result-with-params.xml", getClass());
35 }
36
37 @Override
38 public Transformer getTransformer() throws Exception
39 {
40 XQueryTransformer transformer = new XQueryTransformer();
41 transformer.setXquery(
42 "declare variable $document external;\n" +
43 "declare variable $title external;\n" +
44 "declare variable $rating external;\n" +
45 " <cd-listings title='{$title}' rating='{$rating}'>\n" +
46 "{\n" +
47 " for $cd in $document/catalog/cd\n" +
48 " return <cd-title>{data($cd/title)}</cd-title>\n" +
49 "} \n</cd-listings>");
50 transformer.setReturnDataType(DataTypeFactory.STRING);
51 Properties params = new Properties();
52 params.setProperty("title", "#[mule:message.header(ListTitle)]");
53 params.setProperty("rating", "#[mule:message.header(ListRating)]");
54 transformer.setContextProperties(params);
55 transformer.setMuleContext(muleContext);
56 transformer.initialise();
57 return transformer;
58 }
59
60 @Override
61 public Transformer getRoundTripTransformer() throws Exception
62 {
63 return null;
64 }
65
66 @Override
67 public void testRoundtripTransform() throws Exception
68 {
69
70 }
71
72 @Override
73 public Object getTestData()
74 {
75 Map<String, Object> props = new HashMap<String, Object>(2);
76 props.put("ListTitle", "MyList");
77 props.put("ListRating", new Integer(6));
78 return new DefaultMuleMessage(srcData, props, muleContext);
79 }
80
81 @Override
82 public Object getResultData()
83 {
84 return resultData;
85 }
86
87 @Override
88 public boolean compareResults(Object expected, Object result)
89 {
90 if (expected instanceof Document && result instanceof Document)
91 {
92 return XMLUnit.compareXML((Document)expected, (Document)result).similar();
93 }
94 else if (expected instanceof String && result instanceof String)
95 {
96 try
97 {
98 String expectedString = this.normalizeString((String)expected);
99 String resultString = this.normalizeString((String)result);
100 return XMLUnit.compareXML(expectedString, resultString).similar();
101 }
102 catch (Exception ex)
103 {
104 return false;
105 }
106 }
107
108
109 return super.compareResults(expected, result);
110 }
111 }