View Javadoc

1   /*
2    * $Id: ExpressionTransformerTestCase.java 20297 2010-11-22 18:49:18Z aperepel $
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.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             //expected
168         }
169     }
170 }