1
2
3
4
5
6
7
8
9
10
11 package org.mule.transformers.simple;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.expression.RequiredValueException;
16 import org.mule.api.transformer.TransformerException;
17 import org.mule.expression.transformers.BeanBuilderTransformer;
18 import org.mule.expression.transformers.ExpressionArgument;
19 import org.mule.expression.transformers.ExpressionTransformer;
20 import org.mule.tck.FunctionalTestCase;
21 import org.mule.tck.testmodels.fruit.Apple;
22 import org.mule.tck.testmodels.fruit.Banana;
23 import org.mule.tck.testmodels.fruit.FruitBasket;
24 import org.mule.tck.testmodels.fruit.FruitBowl;
25
26 import java.util.HashMap;
27 import java.util.List;
28 import java.util.Map;
29
30 public class ExpressionTransformerTestCase extends FunctionalTestCase
31 {
32 @Override
33 protected String getConfigResources()
34 {
35 return "org/mule/test/transformers/expression-transformers-test.xml";
36 }
37
38 public void testTransformerConfig() throws Exception
39 {
40 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
41 assertNotNull(transformer);
42 assertNotNull(transformer.getArguments());
43 assertEquals(2, transformer.getArguments().size());
44 ExpressionArgument arg1 = transformer.getArguments().get(0);
45 assertEquals("payload", arg1.getEvaluator());
46 assertEquals("org.mule.tck.testmodels.fruit.FruitBasket", arg1.getExpression());
47 assertFalse(arg1.isOptional());
48
49 ExpressionArgument arg2 = transformer.getArguments().get(1);
50 assertEquals("headers", arg2.getEvaluator());
51 assertEquals("foo,bar?", arg2.getExpression());
52 assertTrue(arg2.isOptional());
53
54 }
55
56 public void testBeanBuilderTransformerConfig() throws Exception
57 {
58 BeanBuilderTransformer transformer = (BeanBuilderTransformer) muleContext.getRegistry().lookupTransformer("testTransformer3");
59 assertNotNull(transformer);
60 assertNotNull(transformer.getArguments());
61 assertEquals(3, transformer.getArguments().size());
62 ExpressionArgument arg1 = transformer.getArguments().get(0);
63 assertEquals("brand", arg1.getName());
64 assertEquals("mule", arg1.getEvaluator());
65 assertEquals("message.payload", arg1.getExpression());
66 assertFalse(arg1.isOptional());
67
68 ExpressionArgument arg2 = transformer.getArguments().get(1);
69 assertEquals("segments", arg2.getName());
70 assertEquals("mule", arg2.getEvaluator());
71 assertEquals("message.header(SEGMENTS)", arg2.getExpression());
72 assertTrue(arg2.isOptional());
73
74 }
75
76 public void testExecutionWithCorrectMessage() throws Exception
77 {
78 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
79 Map<String, Object> props = new HashMap<String, Object>();
80 props.put("foo", "moo");
81 props.put("bar", "mar");
82
83 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
84
85 Object result = transformer.transform(message);
86 assertNotNull(result);
87 assertTrue(result.getClass().isArray());
88 Object o1 = ((Object[]) result)[0];
89 assertTrue(o1 instanceof FruitBasket);
90
91 Object o2 = ((Object[]) result)[1];
92 assertTrue(o2 instanceof Map<?, ?>);
93 Map<?, ?> map = (Map<?, ?>) o2;
94 assertEquals(2, map.size());
95 assertEquals("moo", map.get("foo"));
96 assertEquals("mar", map.get("bar"));
97 }
98
99 public void testExecutionWithPartialMissingOptionalParams() throws Exception
100 {
101 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
102 Map<String, Object> props = new HashMap<String, Object>();
103 props.put("foo", "moo");
104
105 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
106
107 Object result = transformer.transform(message);
108 assertNotNull(result);
109 assertTrue(result.getClass().isArray());
110 Object o1 = ((Object[]) result)[0];
111 assertTrue(o1 instanceof FruitBasket);
112
113 Object o2 = ((Object[]) result)[1];
114 assertTrue(o2 instanceof Map<?, ?>);
115 Map<?, ?> map = (Map<?, ?>) o2;
116 assertEquals(1, map.size());
117 assertEquals("moo", map.get("foo"));
118 }
119
120 public void testExecutionWithAllMissingOptionalParams() throws Exception
121 {
122 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
123
124 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), muleContext);
125
126 Object result = transformer.transform(message);
127 assertNotNull(result);
128 assertTrue(result.getClass().isArray());
129 Object o1 = ((Object[]) result)[0];
130 assertTrue(o1 instanceof FruitBasket);
131
132 assertNull(((Object[]) result)[1]);
133 }
134
135 public void testTransformerConfigWithSingleArgument() throws Exception
136 {
137 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer2");
138 Map<String, Object> props = new HashMap<String, Object>();
139 props.put("foo", "moo");
140 props.put("bar", "mar");
141
142 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
143
144 Object result = transformer.transform(message);
145 assertNotNull(result);
146 assertFalse(result.getClass().isArray());
147 assertTrue(result instanceof List<?>);
148 List<?> list = (List<?>) result;
149 assertTrue(list.contains("moo"));
150 assertTrue(list.contains("mar"));
151 }
152
153 public void testExecutionWithInCorrectMessage() throws Exception
154 {
155 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer2");
156 Map<String, Object> props = new HashMap<String, Object>();
157 props.put("foo", "moo");
158
159 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
160
161 try
162 {
163 transformer.transform(message);
164 fail("Not all headers present, the transform should have failed");
165 }
166 catch (RequiredValueException e)
167 {
168
169 }
170 }
171 }