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.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
63 assertEquals(String.class, eval.evaluate("[0]/user/name", message).getClass());
64
65 assertEquals(String.class, eval.evaluate("[0]/id", message).getClass());
66
67 assertEquals(String.class, eval.evaluate("[0]/truncated", message).getClass());
68
69 assertEquals(String.class, eval.evaluate("[0]/user", message).getClass());
70
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
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
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 }