Skip to content

Commit f86ad96

Browse files
committed
Null vs undefined + jsonata.setOutputConvertNulls tests. #59
1 parent 539c8d9 commit f86ad96

1 file changed

Lines changed: 116 additions & 0 deletions

File tree

src/test/java/com/dashjoin/jsonata/NullSafetyTest.java

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package com.dashjoin.jsonata;
22

33
import static com.dashjoin.jsonata.Jsonata.jsonata;
4+
import static com.dashjoin.jsonata.Jsonata.NULL_VALUE;
5+
import static com.dashjoin.jsonata.JsonataTest.mapOf;
6+
import static com.dashjoin.jsonata.JsonataTest.evaluateJsonata;
7+
import static com.dashjoin.jsonata.JsonataTest.UNDEFINED;
8+
import com.dashjoin.jsonata.JsonataTest;
49
import java.util.ArrayList;
510
import java.util.Arrays;
611
import java.util.List;
@@ -72,4 +77,115 @@ public void testFilterNullLookup() {
7277
Arrays.asList(Map.of("content", "some"), Map.of()));
7378
Assertions.assertEquals(Map.of("content", "some"), x);
7479
}
80+
81+
@Test
82+
public void testOutputConvertNulls() {
83+
Jsonata j = jsonata("$");
84+
Jsonata j2 = jsonata("$");
85+
j2.setOutputConvertNulls(false);
86+
87+
Assertions.assertTrue(j.isOutputConvertNulls());
88+
Assertions.assertFalse(j2.isOutputConvertNulls());
89+
90+
Object res, res2;
91+
res = j.evaluate(Jsonata.NULL_VALUE);
92+
res2 = j2.evaluate(Jsonata.NULL_VALUE);
93+
94+
Assertions.assertEquals(null, res);
95+
Assertions.assertEquals(Jsonata.NULL_VALUE, res2);
96+
97+
res = j.evaluate(null);
98+
res2 = j2.evaluate(null);
99+
100+
Assertions.assertEquals(null, res);
101+
Assertions.assertEquals(null, res2);
102+
}
103+
104+
/**
105+
* Executes expression without output null conversion
106+
*/
107+
Object executeJsonataRaw(String expression, Object input) {
108+
var expr = jsonata(expression);
109+
expr.setOutputConvertNulls(false);
110+
var result = expr.evaluate(input);
111+
return result;
112+
}
113+
114+
@Test
115+
public void testJavaNullVsUndefined() throws Exception {
116+
JsonataTest test = new JsonataTest();
117+
118+
Assertions.assertTrue(test.runTestCase("test-undefined", mapOf(
119+
"expr", "undefined",
120+
"undefinedResult", true)));
121+
122+
Assertions.assertTrue(test.runTestCase("test-null", mapOf(
123+
"expr", "null",
124+
"result", null)));
125+
126+
// Test various evaluations raw vs cooked, returning null or undefined
127+
var res = executeJsonataRaw("null", null);
128+
Assertions.assertEquals(Jsonata.NULL_VALUE, res);
129+
130+
res = executeJsonataRaw("$", NULL_VALUE);
131+
Assertions.assertEquals(Jsonata.NULL_VALUE, res);
132+
133+
res = executeJsonataRaw("$", null);
134+
Assertions.assertEquals(null, res);
135+
136+
res = executeJsonataRaw("no_match", null);
137+
Assertions.assertEquals(null, res);
138+
139+
res = evaluateJsonata("null", null, null);
140+
Assertions.assertNull(res);
141+
142+
res = evaluateJsonata("no_match", null, null);
143+
Assertions.assertEquals(UNDEFINED, res);
144+
145+
res = evaluateJsonata("{}.a", null, null);
146+
Assertions.assertEquals(UNDEFINED, res);
147+
148+
res = executeJsonataRaw("{\"a\":null}.a", null);
149+
Assertions.assertEquals(Jsonata.NULL_VALUE, res);
150+
151+
res = evaluateJsonata("{\"a\":null}.a", null, null);
152+
Assertions.assertEquals(null, res);
153+
154+
res = executeJsonataRaw("{\"a\":null}.b", null);
155+
Assertions.assertNull(res);
156+
157+
res = evaluateJsonata("{\"a\":null}.b", null, null);
158+
Assertions.assertEquals(UNDEFINED, res);
159+
160+
res = evaluateJsonata("[a,null,b][0]", null, null);
161+
Assertions.assertEquals(null, res);
162+
163+
res = executeJsonataRaw("$[1]", List.of(42, Jsonata.NULL_VALUE));
164+
Assertions.assertEquals(NULL_VALUE, res);
165+
166+
res = executeJsonataRaw("$[2]", List.of(42, Jsonata.NULL_VALUE));
167+
Assertions.assertEquals(null, res);
168+
169+
res = evaluateJsonata("$[2]", List.of(42, Jsonata.NULL_VALUE), null);
170+
Assertions.assertEquals(UNDEFINED, res);
171+
172+
res = jsonata("$").evaluate(Jsonata.NULL_VALUE);
173+
Assertions.assertNull(res);
174+
175+
//
176+
res = executeJsonataRaw("{'a':$}", Jsonata.NULL_VALUE);
177+
Assertions.assertEquals(Jsonata.NULL_VALUE, ((Map)res).get("a"));
178+
179+
res = executeJsonataRaw("{'a':$}", null);
180+
Assertions.assertEquals("{}", ""+res);
181+
182+
res = executeJsonataRaw("{'a':{'b':$}}",null);
183+
Assertions.assertEquals("{a={}}", ""+res);
184+
185+
res = executeJsonataRaw("[$]", List.of(Jsonata.NULL_VALUE, Jsonata.NULL_VALUE));
186+
Assertions.assertEquals(List.of(Jsonata.NULL_VALUE, Jsonata.NULL_VALUE), res);
187+
188+
res = evaluateJsonata("[$]", List.of(Jsonata.NULL_VALUE, Jsonata.NULL_VALUE), null);
189+
Assertions.assertEquals(Arrays.asList(null, null), res);
190+
}
75191
}

0 commit comments

Comments
 (0)