View Javadoc

1   /*
2    * $Id: ExpressionTransformerTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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             //expected
169         }
170     }
171 }