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