1
2
3
4
5
6
7
8
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
73 assertEquals(String.class, eval.evaluate("[0]/user/name", message).getClass());
74
75 assertEquals(String.class, eval.evaluate("[0]/id", message).getClass());
76
77 assertEquals(String.class, eval.evaluate("[0]/truncated", message).getClass());
78
79 assertEquals(String.class, eval.evaluate("[0]/user", message).getClass());
80
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
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
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 }