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