View Javadoc

1   /*
2    * $Id: JsonExpressionEvaluatorTestCase.java 20383 2010-11-29 19:44:13Z 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  
11  package org.mule.module.json;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleMessage;
15  import org.mule.api.expression.ExpressionRuntimeException;
16  import org.mule.routing.filters.ExpressionFilter;
17  import org.mule.tck.AbstractMuleTestCase;
18  import org.mule.util.IOUtils;
19  
20  import java.util.ArrayList;
21  import java.util.List;
22  
23  public class JsonExpressionEvaluatorTestCase extends AbstractMuleTestCase
24  {
25  
26      protected JsonExpressionEvaluator eval;
27      protected String evalName;
28      protected MuleMessage message;
29  
30      @Override
31      protected void doSetUp() throws Exception
32      {
33          super.doSetUp();
34          eval = getEvaluator();
35          evalName = getEvaluatorName();
36          message = new DefaultMuleMessage(IOUtils.getResourceAsString("test-data.json", getClass()),
37              muleContext);
38      }
39  
40      protected JsonExpressionEvaluator getEvaluator()
41      {
42          return new JsonExpressionEvaluator();
43      }
44  
45      protected String getEvaluatorName()
46      {
47          return "json";
48      }
49  
50      public void testExpressions() throws Exception
51      {
52          assertEquals("test from Mule: 6ffca02b-9d52-475e-8b17-946acdb01492", eval.evaluate("[0]/text",
53              message));
54  
55          assertEquals("Mule Test", eval.evaluate("[0]/user/name", message));
56          assertEquals("Mule Test9", eval.evaluate("[9]/'user'/name", message));
57          assertNull(eval.evaluate("[9]/user/XXX", message));
58      }
59  
60      public void testReturnTypes()
61      {
62          // String
63          assertEquals(String.class, eval.evaluate("[0]/user/name", message).getClass());
64          // Number
65          assertEquals(String.class, eval.evaluate("[0]/id", message).getClass());
66          // Boolean
67          assertEquals(String.class, eval.evaluate("[0]/truncated", message).getClass());
68          // Object
69          assertEquals(String.class, eval.evaluate("[0]/user", message).getClass());
70          // Array
71          assertEquals(ArrayList.class, eval.evaluate("[0]/anArray", message).getClass());
72          assertEquals(String.class, ((List) eval.evaluate("[0]/anArray", message)).get(0).getClass());
73          assertEquals(String.class, ((List) eval.evaluate("[0]/anArray", message)).get(1).getClass());
74          assertEquals(ArrayList.class, ((List) eval.evaluate("[0]/anArray", message)).get(2).getClass());
75      }
76  
77      public void testExpressionsUsingManager() throws Exception
78      {
79          assertEquals("test from Mule: 6ffca02b-9d52-475e-8b17-946acdb01492",
80              muleContext.getExpressionManager().evaluate("#[json:[0]/text]", message));
81  
82          assertEquals("Mule Test", muleContext.getExpressionManager().evaluate(evalName + ":[0]/user/name",
83              message));
84          assertEquals("Mule Test9", muleContext.getExpressionManager().evaluate("#[json:[9]/'user'/name]",
85              message));
86          assertNull(muleContext.getExpressionManager().evaluate(evalName + ":[9]/user/XXX", message, false));
87  
88          try
89          {
90              muleContext.getExpressionManager().evaluate(evalName + ":[9]/user/XXX", message, true);
91              fail("A value was required");
92          }
93          catch (ExpressionRuntimeException e)
94          {
95              // Expected
96          }
97      }
98  
99      public void testExpressionFilter() throws Exception
100     {
101         ExpressionFilter filter = new ExpressionFilter("#[json:[0]/text]");
102         filter.setMuleContext(muleContext);
103         assertTrue(filter.accept(message));
104 
105         filter.setExpression("[0]/favorited");
106         assertFalse(filter.accept(message));
107 
108         filter.setExpression("[0]/truncated");
109         assertTrue(filter.accept(message));
110 
111         filter.setExpression("[0]/source");
112         assertTrue(filter.accept(message));
113 
114         filter.setExpression("[0]/xxx");
115         assertFalse(filter.accept(message));
116     }
117 
118     public void testExpressionFilterWithBooleanLogic() throws Exception
119     {
120         ExpressionFilter filter = new ExpressionFilter("#[json:[0]/text]");
121         filter.setMuleContext(muleContext);
122         assertTrue(filter.accept(message));
123 
124         filter.setExpression("[0]/favorited=false");
125         assertTrue(filter.accept(message));
126 
127         filter.setExpression("[0]/truncated != true");
128         assertFalse(filter.accept(message));
129 
130         filter.setExpression("[0]/source=null");
131         assertFalse(filter.accept(message));
132 
133         filter.setExpression("[0]/source!= null");
134         assertTrue(filter.accept(message));
135 
136     }
137 
138     public void testExpressionFilterWithBooleanLogicWhereElementDoesNotExist() throws Exception
139     {
140         // Checks against elements that do not exist
141 
142         ExpressionFilter filter = new ExpressionFilter("#[json:[0]/xyz = null]");
143         filter.setMuleContext(muleContext);
144         assertTrue(filter.accept(message));
145 
146         filter.setExpression("[0]/xyz!= null");
147         assertFalse(filter.accept(message));
148     }
149 }