View Javadoc

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