View Javadoc

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