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.RequestContext;
11  import org.mule.api.MuleEvent;
12  import org.mule.api.MuleMessage;
13  import org.mule.tck.junit4.AbstractMuleContextTestCase;
14  import org.mule.transformer.simple.StringAppendTransformer;
15  
16  import java.sql.Timestamp;
17  
18  import org.junit.Test;
19  
20  import static org.junit.Assert.assertEquals;
21  import static org.junit.Assert.assertFalse;
22  import static org.junit.Assert.assertNotNull;
23  import static org.junit.Assert.assertNull;
24  import static org.junit.Assert.assertTrue;
25  import static org.junit.Assert.fail;
26  
27  public class ExpressionManagerTestCase extends AbstractMuleContextTestCase
28  {
29      @Test
30      public void testManager() throws Exception
31      {
32          MuleMessage message = new DefaultMuleMessage("test", muleContext);
33          Object o = muleContext.getExpressionManager().evaluate("function:uuid", message);
34          assertNotNull(o);
35          o = muleContext.getExpressionManager().evaluate("function:now", message);
36          assertNotNull(o);
37          assertTrue(o instanceof Timestamp);
38      }
39  
40      @Test
41      public void testRegistration() throws Exception
42      {
43          // http://mule.mulesoft.org/jira/browse/MULE-3809 . For now ignore duplicate registrations.
44          /*try
45          {
46              DefaultExpressionManager.registerEvaluator(new MapPayloadExpressionEvaluator());
47              fail("extractor already exists");
48          }
49          catch (IllegalArgumentException e)
50          {
51              //Expected
52          }*/
53  
54          try
55          {
56              muleContext.getExpressionManager().registerEvaluator(null);
57              fail("null extractor");
58          }
59          catch (IllegalArgumentException e)
60          {
61              //Expected
62          }
63          assertNull(muleContext.getExpressionManager().unregisterEvaluator(null));
64      }
65  
66  
67      @Test
68      public void testValidator() throws Exception
69      {
70          // fail for old-style ${}
71          assertFalse(muleContext.getExpressionManager().isValidExpression("http://${bean:user}:${bean:password}@${header:host}:${header:port}/foo/bar"));
72          assertFalse(muleContext.getExpressionManager().isValidExpression("${bean:user}"));
73  
74          // wiggly mule style!
75          assertTrue(muleContext.getExpressionManager().isValidExpression("#[bean:user]"));
76          assertTrue(muleContext.getExpressionManager().isValidExpression("http://#[bean:user]:#[bean:password]@#[header:host]:#[header:port]/foo/bar"));
77  
78          assertFalse(muleContext.getExpressionManager().isValidExpression("{bean:user}"));
79          assertFalse(muleContext.getExpressionManager().isValidExpression("#{bean:user"));
80          assertFalse(muleContext.getExpressionManager().isValidExpression("user"));
81  
82         assertFalse(muleContext.getExpressionManager().isValidExpression("http://#[bean:user:#[bean:password]@#[header:host]:#[header:port]/foo/bar"));
83         assertTrue(muleContext.getExpressionManager().isValidExpression("http://#[bean:user]:##[bean:password]@#[header:host]:#[header:port]/foo/bar"));
84         assertTrue(muleContext.getExpressionManager().isValidExpression("http://#[bean:user]]:##[bean:password]@#[header:host]:#[header:port]/foo/bar"));
85         assertFalse(muleContext.getExpressionManager().isValidExpression("http://#[bean:user]:#[[bean:password]@#[header:host]:#[header:port]/foo/bar"));
86         assertTrue(muleContext.getExpressionManager().isValidExpression("http://#[bean:user]:#[#bean:password]@#[header:host]:#[header:port]/foo/bar"));
87      }
88  
89      @Test
90      public void testParsing() throws Exception
91      {
92          MuleMessage msg = new DefaultMuleMessage("test", muleContext);
93          msg.setOutboundProperty("user", "vasya");
94          msg.setOutboundProperty("password", "pupkin");
95          msg.setOutboundProperty("host", "example.com");
96          msg.setOutboundProperty("port", "12345");
97  
98          String result = muleContext.getExpressionManager().parse("http://#[header:user]:#[header:password]@#[header:host]:#[header:port]/foo/bar", msg);
99          assertNotNull(result);
100         assertEquals("http://vasya:pupkin@example.com:12345/foo/bar", result);
101     }
102     
103     @Test
104     public void testNestedParsing() throws Exception
105     {
106         muleContext.getRegistry().registerObject("proc1", new StringAppendTransformer("c"));
107         muleContext.getRegistry().registerObject("proc2", new StringAppendTransformer("e"));
108 
109         MuleEvent event = getTestInboundEvent("b");
110         RequestContext.setEvent(event);
111 
112         assertEquals("-1-abcde-2-", muleContext.getExpressionManager().parse(
113             "-#[string:1]-#[process:proc2:#[string:a#[process:proc1]d]]-#[string:2]-", event.getMessage()));
114     }
115 
116     @Test
117     public void testBooleanEvaluation()
118     {
119         MuleMessage msg = new DefaultMuleMessage("test", muleContext);
120         msg.setOutboundProperty("user", "vasya");
121         msg.setOutboundProperty("password", "pupkin");
122         msg.setOutboundProperty("host", "example.com");
123         msg.setOutboundProperty("port", "12345");
124 
125         // Non-boolean string value
126         assertFalse(muleContext.getExpressionManager().evaluateBoolean("header:user", msg));
127         assertTrue(muleContext.getExpressionManager().evaluateBoolean("header:user", msg, false, true));
128         assertFalse(muleContext.getExpressionManager().evaluateBoolean("header:user", msg, false, false));
129         
130         // Null
131         assertFalse(muleContext.getExpressionManager().evaluateBoolean("header:ur", msg));
132         assertTrue(muleContext.getExpressionManager().evaluateBoolean("header:ur", msg, true, false));
133         assertFalse(muleContext.getExpressionManager().evaluateBoolean("header:ur", msg, false, false));
134         
135         // Boolean value
136         assertTrue(muleContext.getExpressionManager().evaluateBoolean("string:true", msg));
137         assertFalse(muleContext.getExpressionManager().evaluateBoolean("string:false", msg));
138     }
139 }