View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.expression;
8   
9   import org.mule.DefaultMuleMessage;
10  import org.mule.api.MuleMessage;
11  import org.mule.tck.junit4.AbstractMuleContextTestCase;
12  import org.mule.tck.testmodels.fruit.Apple;
13  import org.mule.tck.testmodels.fruit.Banana;
14  import org.mule.tck.testmodels.fruit.FruitBasket;
15  import org.mule.tck.testmodels.fruit.FruitBowl;
16  import org.mule.tck.testmodels.fruit.FruitBowlToFruitBasket;
17  
18  import java.io.ByteArrayInputStream;
19  
20  import org.junit.Test;
21  
22  import static org.junit.Assert.assertEquals;
23  import static org.junit.Assert.assertFalse;
24  import static org.junit.Assert.assertNotNull;
25  import static org.junit.Assert.assertNull;
26  import static org.junit.Assert.assertTrue;
27  
28  public class PayloadExpressionEvaluatorTestCase extends AbstractMuleContextTestCase
29  {
30      @Test
31      public void testSimple() throws Exception
32      {
33          MessagePayloadExpressionEvaluator eval = new MessagePayloadExpressionEvaluator();
34          MuleMessage message = new DefaultMuleMessage("test", muleContext);
35  
36          //no expression
37          Object result = eval.evaluate(null, message);
38          assertNotNull(result);
39          assertEquals("test", result);
40  
41          //no expression
42          result = eval.evaluate(null, null);
43          assertNull(result);
44      }
45  
46      /**
47       * Make sure the evaluator gets registered properly
48       *
49       * @throws Exception if the test fails
50       */
51      @Test
52      public void testSimpleUsingManager() throws Exception
53      {
54          MuleMessage message = new DefaultMuleMessage("test", muleContext);
55  
56          assertFalse(muleContext.getExpressionManager().isValidExpression("${payload:}"));
57          assertTrue(muleContext.getExpressionManager().isValidExpression("#[payload:]"));
58  
59          Object result = muleContext.getExpressionManager().evaluate("#[payload:]", message);
60          assertNotNull(result);
61          assertEquals("test", result);
62  
63          result = muleContext.getExpressionManager().evaluate("#[payload:]", null);
64          assertNull(result);
65      }
66  
67      @Test
68      public void testWithTransform() throws Exception
69      {
70          MessagePayloadExpressionEvaluator eval = new MessagePayloadExpressionEvaluator();
71          MuleMessage message = new DefaultMuleMessage("test", muleContext);
72  
73          //i.e. ${payload:byte[]}
74          Object result = eval.evaluate("byte[]", message);
75          assertNotNull(result);
76          assertTrue(result instanceof byte[]);
77          assertEquals("test", new String((byte[]) result));
78  
79          ByteArrayInputStream bais = new ByteArrayInputStream("test2".getBytes());
80          //i.e. ${payload:java.lang.String}
81          result = eval.evaluate("java.lang.String", new DefaultMuleMessage(bais, muleContext));
82          assertNotNull(result);
83          assertEquals("test2", result);
84      }
85  
86      @Test
87      public void testWithMoreComplexTransform() throws Exception
88      {
89          MessagePayloadExpressionEvaluator eval = new MessagePayloadExpressionEvaluator();
90          MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), muleContext);
91  
92          //Lets register our transformer so Mule can find it
93          muleContext.getRegistry().registerTransformer(new FruitBowlToFruitBasket());
94  
95          //i.e. ${payload:org.mule.tck.testmodels.fruit.FruitBasket}
96          Object result = eval.evaluate("org.mule.tck.testmodels.fruit.FruitBasket", message);
97          assertNotNull(result);
98          assertTrue(result instanceof FruitBasket);
99          FruitBasket fb = (FruitBasket) result;
100         assertEquals(2, fb.getFruit().size());
101         assertTrue(fb.hasBanana());
102         assertTrue(fb.hasApple());
103     }
104 }