1
2
3
4
5
6
7
8
9
10 package org.mule.module.json;
11
12 import org.mule.DefaultMuleMessage;
13 import org.mule.api.MuleMessage;
14 import org.mule.api.expression.ExpressionRuntimeException;
15 import org.mule.routing.filters.ExpressionFilter;
16 import org.mule.tck.AbstractMuleTestCase;
17 import org.mule.util.IOUtils;
18
19 public class JsonExpressionEvaluatorTestCase extends AbstractMuleTestCase
20 {
21 public void testExpressions() throws Exception
22 {
23 String json = IOUtils.getResourceAsString("test-data.json", getClass());
24 MuleMessage message = new DefaultMuleMessage(json, muleContext);
25 JsonExpressionEvaluator eval = new JsonExpressionEvaluator();
26
27 assertEquals("test from Mule: 6ffca02b-9d52-475e-8b17-946acdb01492", eval.evaluate("[0]/text", message));
28
29 assertEquals("Mule Test", eval.evaluate("[0]/user/name", message));
30 assertEquals("Mule Test9", eval.evaluate("[9]/'user'/name", message));
31 assertNull(eval.evaluate("[9]/user/XXX", message));
32 }
33
34 public void testExpressionsUsingManager() throws Exception
35 {
36 String json = IOUtils.getResourceAsString("test-data.json", getClass());
37 MuleMessage message = new DefaultMuleMessage(json, muleContext);
38
39 assertEquals("test from Mule: 6ffca02b-9d52-475e-8b17-946acdb01492", muleContext.getExpressionManager().evaluate("#[json:[0]/text]", message));
40
41 assertEquals("Mule Test", muleContext.getExpressionManager().evaluate("json:[0]/user/name", message));
42 assertEquals("Mule Test9", muleContext.getExpressionManager().evaluate("#[json:[9]/'user'/name]", message));
43 assertNull(muleContext.getExpressionManager().evaluate("json:[9]/user/XXX", message, false));
44
45 try
46 {
47 muleContext.getExpressionManager().evaluate("json:[9]/user/XXX", message, true);
48 fail("A value was required");
49 }
50 catch (ExpressionRuntimeException e)
51 {
52
53 }
54 }
55
56 public void testExpressionFilter() throws Exception
57 {
58 String json = IOUtils.getResourceAsString("test-data.json", getClass());
59 MuleMessage message = new DefaultMuleMessage(json, muleContext);
60
61 ExpressionFilter filter = new ExpressionFilter("#[json:[0]/text]");
62 filter.setMuleContext(muleContext);
63 assertTrue(filter.accept(message));
64
65 filter.setExpression("[0]/favorited");
66 assertFalse(filter.accept(message));
67
68 filter.setExpression("[0]/truncated");
69 assertTrue(filter.accept(message));
70
71 filter.setExpression("[0]/source");
72 assertTrue(filter.accept(message));
73
74 filter.setExpression("[0]/xxx");
75 assertFalse(filter.accept(message));
76 }
77
78 public void testExpressionFilterWithBooleanLogic() throws Exception
79 {
80 String json = IOUtils.getResourceAsString("test-data.json", getClass());
81 MuleMessage message = new DefaultMuleMessage(json, muleContext);
82
83 ExpressionFilter filter = new ExpressionFilter("#[json:[0]/text]");
84 filter.setMuleContext(muleContext);
85 assertTrue(filter.accept(message));
86
87 filter.setExpression("[0]/favorited=false");
88 assertTrue(filter.accept(message));
89
90 filter.setExpression("[0]/truncated != true");
91 assertFalse(filter.accept(message));
92
93 filter.setExpression("[0]/source=null");
94 assertFalse(filter.accept(message));
95
96 filter.setExpression("[0]/source!= null");
97 assertTrue(filter.accept(message));
98
99
100 }
101
102 public void testExpressionFilterWithBooleanLogicWhereElementDoesNotExist() throws Exception
103 {
104
105 String json = IOUtils.getResourceAsString("test-data.json", getClass());
106 MuleMessage message = new DefaultMuleMessage(json, muleContext);
107
108 ExpressionFilter filter = new ExpressionFilter("#[json:[0]/xyz = null]");
109 filter.setMuleContext(muleContext);
110 assertTrue(filter.accept(message));
111
112 filter.setExpression("[0]/xyz!= null");
113 assertFalse(filter.accept(message));
114 }
115 }