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