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