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