1
2
3
4
5
6
7
8
9
10
11 package org.mule.transformers.xml;
12
13 import org.mule.impl.MuleEvent;
14 import org.mule.impl.MuleMessage;
15 import org.mule.impl.RequestContext;
16 import org.mule.tck.MuleTestUtils;
17 import org.mule.tck.testmodels.fruit.Apple;
18 import org.mule.umo.UMOMessage;
19 import org.mule.umo.transformer.UMOTransformer;
20
21 import java.util.HashMap;
22 import java.util.Map;
23
24 import org.custommonkey.xmlunit.XMLAssert;
25
26 public class XmlUMOMessageTransformersTestCase extends AbstractXmlTransformerTestCase
27 {
28 private UMOMessage testObject = null;
29
30
31 protected void doSetUp() throws Exception
32 {
33 RequestContext.setEvent(new MuleEvent(testObject, getTestEndpoint("test", "sender"), MuleTestUtils
34 .getTestSession(), true));
35 }
36
37
38 protected void doTearDown() throws Exception
39 {
40 RequestContext.clear();
41 }
42
43 public XmlUMOMessageTransformersTestCase()
44 {
45 Map props = new HashMap();
46 props.put("object", new Apple());
47 props.put("number", new Integer(1));
48 props.put("string", "hello");
49 testObject = new MuleMessage("test", props);
50 }
51
52 public UMOTransformer getTransformer() throws Exception
53 {
54 ObjectToXml t = new ObjectToXml();
55 t.setAcceptUMOMessage(true);
56 return t;
57 }
58
59 public UMOTransformer getRoundTripTransformer() throws Exception
60 {
61 return new XmlToObject();
62 }
63
64 public Object getTestData()
65 {
66 return testObject;
67 }
68
69 public Object getResultData()
70 {
71 return "<org.mule.impl.MuleMessage>\n"
72 + " <adapter class=\"org.mule.providers.DefaultMessageAdapter\">\n"
73 + " <message class=\"string\">test</message>\n"
74 + " <properties class=\"edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap\">\n"
75 + " <entry>\n"
76 + " <string>string</string>\n"
77 + " <string>hello</string>\n"
78 + " </entry>\n"
79 + " <entry>\n"
80 + " <string>object</string>\n"
81 + " <org.mule.tck.testmodels.fruit.Apple>\n"
82 + " <bitten>false</bitten>\n"
83 + " <washed>false</washed>\n"
84 + " </org.mule.tck.testmodels.fruit.Apple>\n"
85 + " </entry>\n"
86 + " <entry>\n"
87 + " <string>number</string>\n"
88 + " <int>1</int>\n"
89 + " </entry>\n"
90 + " </properties>\n"
91 + " <attachments class=\"edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap\"/>\n"
92 + " <encoding>UTF-8</encoding>\n"
93 + " <id>" + testObject.getUniqueId() + "</id>\n"
94 + " </adapter>\n"
95 + "</org.mule.impl.MuleMessage>";
96 }
97
98
99
100
101
102
103
104
105 public boolean compareResults(Object expected, Object result)
106 {
107 if (!super.compareResults(expected, result))
108 {
109
110
111 try
112 {
113 XMLAssert.assertXpathEvaluatesTo("3", "count(//adapter/properties/entry)", (String)result);
114 XMLAssert.assertXpathEvaluatesTo("object", "//adapter/properties/entry/string/text()", (String)result);
115 XMLAssert.assertXpathEvaluatesTo("false", "//adapter/properties/entry/org.mule.tck.testmodels.fruit.Apple/bitten", (String)result);
116 }
117 catch (Exception ex)
118 {
119 fail(ex.getMessage());
120 }
121 }
122
123 return true;
124 }
125
126
127 public boolean compareRoundtripResults(Object expected, Object result)
128 {
129 if (expected == null && result == null)
130 {
131 return true;
132 }
133
134 if (expected == null || result == null)
135 {
136 return false;
137 }
138
139 if (expected instanceof UMOMessage && result instanceof UMOMessage)
140 {
141 return ((UMOMessage)expected).getPayload().equals(((UMOMessage)result).getPayload())
142 && ((UMOMessage)expected).getProperty("object").equals(
143 ((UMOMessage)result).getProperty("object"))
144 && ((UMOMessage)expected).getProperty("string").equals(
145 ((UMOMessage)result).getProperty("string"))
146 && ((UMOMessage)expected).getIntProperty("number", -1) == ((UMOMessage)result)
147 .getIntProperty("number", -2);
148 }
149 else
150 {
151 return false;
152 }
153 }
154
155
156 protected void doTestClone(UMOTransformer original, UMOTransformer clone) throws Exception
157 {
158 super.doTestClone(original, clone);
159
160 ObjectToXml t1 = (ObjectToXml) original;
161 ObjectToXml t2 = (ObjectToXml) clone;
162
163
164 assertNotSame("xstream", t1.getXStream(), t2.getXStream());
165
166
167 assertEquals("driverClassName", t1.getDriverClassName(), t2.getDriverClassName());
168
169
170 assertEquals("aliases", t1.getAliases(), t2.getAliases());
171 if (t1.getAliases() != null && t2.getAliases() != null)
172 {
173 assertNotSame("aliases", t1.getAliases(), t2.getAliases());
174 }
175
176 assertEquals("converters", t1.getConverters(), t2.getConverters());
177 if (t1.getConverters() != null && t2.getConverters() != null)
178 {
179 assertNotSame("converters", t1.getConverters(), t2.getConverters());
180 }
181 }
182
183 }