View Javadoc

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