1   /*
2    * $Id: ExpressionTransformerTestCase.java 11433 2008-03-20 03:43:57Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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.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             //exprected
146         }
147 
148     }
149 }