Skip to content

Commit 0362a7f

Browse files
committed
Add additional test cases
Added additional test cases to exercise Parse.parse().
1 parent 52f0c02 commit 0362a7f

File tree

6 files changed

+415
-2
lines changed

6 files changed

+415
-2
lines changed

module/jsonurl-core/src/test/java/org/jsonurl/AbstractParseTest.java

Lines changed: 108 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919

2020
import static org.junit.jupiter.api.Assertions.assertEquals;
21+
import static org.junit.jupiter.api.Assertions.assertFalse;
2122
import static org.junit.jupiter.api.Assertions.assertThrows;
2223
import static org.junit.jupiter.api.Assertions.assertTrue;
2324

@@ -94,6 +95,18 @@ private void parse(Object out, Object out2, String in) {
9495
assertEquals(in.length(), JsonUrl.parseLiteralLength(in));
9596
}
9697

98+
@SuppressWarnings("unchecked")
99+
private A parseArray(String jsonUrlText) {
100+
Parser<V, C, ABT, A, JBT, J, B, M, N, S> p = new Parser<>(factory);
101+
return (A)p.parse(jsonUrlText);
102+
}
103+
104+
@SuppressWarnings("unchecked")
105+
private J parseObject(String jsonUrlText) {
106+
Parser<V, C, ABT, A, JBT, J, B, M, N, S> p = new Parser<>(factory);
107+
return (J)p.parse(jsonUrlText);
108+
}
109+
97110
@ParameterizedTest
98111
@Tag("parse")
99112
@Tag("long")
@@ -332,9 +345,102 @@ void testExceptions() throws ParseException {
332345
assertTrue(new ParseException("a").toString().endsWith("a"));
333346
assertTrue(new SyntaxException("a").toString().endsWith("a"));
334347
}
348+
349+
protected abstract boolean getBoolean(String key, J value);
350+
351+
protected abstract String getString(String key, J value);
352+
353+
protected abstract boolean getNull(String key, J value);
354+
355+
protected abstract boolean getEmptyComposite(String key, J value);
356+
357+
protected abstract A getArray(String key, J value);
358+
359+
protected abstract A getArray(int index, A value);
360+
361+
protected abstract J getObject(String key, J value);
362+
363+
protected abstract J getObject(int index, A value);
364+
365+
protected abstract M getNumber(int index, A value);
366+
367+
protected abstract M getNumber(String key, J value);
368+
369+
@Test
370+
void testJsonUrlText1() throws ParseException {
371+
J parseResult = (J)parseObject(
372+
"(true:true,false:false,null:null,empty:(),"
373+
+ "single:(0),nested:((1)),many:(-1,2.0,3e1,4e-2,5e+0))");
374+
375+
assertTrue(getBoolean("true", parseResult));
376+
assertFalse(getBoolean("false", parseResult));
377+
assertTrue(getNull("null", parseResult));
378+
assertTrue(getEmptyComposite("empty", parseResult));
379+
380+
assertEquals(
381+
factory.getNumber(new NumberBuilder("0")),
382+
getNumber(0, getArray("single", parseResult)));
383+
384+
assertEquals(
385+
factory.getNumber(new NumberBuilder("-1")),
386+
getNumber(0, getArray("many", parseResult)));
387+
388+
assertEquals(
389+
factory.getNumber(new NumberBuilder("2.0")),
390+
getNumber(1, getArray("many", parseResult)));
391+
392+
assertEquals(
393+
factory.getNumber(new NumberBuilder("3e1")),
394+
getNumber(2, getArray("many", parseResult)));
395+
396+
assertEquals(
397+
factory.getNumber(new NumberBuilder("4e-2")),
398+
getNumber(3, getArray("many", parseResult)));
399+
400+
assertEquals(
401+
factory.getNumber(new NumberBuilder("5e+0")),
402+
getNumber(4, getArray("many", parseResult)));
403+
404+
assertEquals(
405+
factory.getNumber(new NumberBuilder("1")),
406+
getNumber(0, getArray(0, getArray("nested", parseResult))));
407+
}
408+
409+
@Test
410+
void testJsonUrlText2() throws ParseException {
411+
A parseResult = parseArray("(1)");
412+
413+
assertEquals(
414+
factory.getNumber(new NumberBuilder("1")),
415+
getNumber(0, parseResult));
416+
}
417+
418+
@Test
419+
void testJsonUrlText3() throws ParseException {
420+
A parseResult = parseArray("(1,(2))");
421+
422+
assertEquals(
423+
factory.getNumber(new NumberBuilder("2")),
424+
getNumber(0, getArray(1,parseResult)));
425+
}
426+
427+
@Test
428+
void testJsonUrlText4() throws ParseException {
429+
A parseResult = parseArray("(1,(a:2),3)");
430+
431+
assertEquals(
432+
factory.getNumber(new NumberBuilder("2")),
433+
getNumber("a", getObject(1, parseResult)));
434+
}
335435

336436
@Test
337-
@Tag("failing")
338-
void testFailing() throws ParseException {
437+
void testJsonUrlText5() throws ParseException {
438+
J parseResult = parseObject("(age:64,name:(first:Fred))");
439+
440+
assertEquals(
441+
"Fred",
442+
getString("first", getObject("name", parseResult)));
339443
}
340444
}
445+
446+

module/jsonurl-core/src/test/java/org/jsonurl/JavaValueFactoryParseTest.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,65 @@ abstract class JavaValueFactoryParseTest extends AbstractParseTest<
4848
public JavaValueFactoryParseTest(JavaValueFactory factory) {
4949
super(factory);
5050
}
51+
52+
@Override
53+
protected boolean getBoolean(String key, Map<String,Object> value) {
54+
Object ret = value.get(key);
55+
56+
if (ret instanceof Boolean) {
57+
return ((Boolean)ret).booleanValue();
58+
}
59+
60+
throw new IllegalArgumentException("value not boolean: " + ret);
61+
}
62+
63+
@Override
64+
protected boolean getNull(String key, Map<String,Object> value) {
65+
Object ret = value.get(key);
66+
return factory.getNull() == ret;
67+
}
68+
69+
@Override
70+
protected boolean getEmptyComposite(String key, Map<String,Object> value) {
71+
return factory.isEmpty(value.get(key));
72+
}
73+
74+
@SuppressWarnings("unchecked") //NOPMD
75+
@Override
76+
protected List<Object> getArray(String key, Map<String,Object> value) {
77+
return (List<Object>)value.get(key);
78+
}
79+
80+
@SuppressWarnings("unchecked")
81+
@Override
82+
protected List<Object> getArray(int index, List<Object> value) {
83+
return (List<Object>)value.get(index);
84+
}
85+
86+
@SuppressWarnings("unchecked")
87+
@Override
88+
protected Map<String,Object> getObject(int index, List<Object> value) {
89+
return (Map<String,Object>)value.get(index);
90+
}
91+
92+
@SuppressWarnings("unchecked")
93+
@Override
94+
protected Map<String,Object> getObject(String key, Map<String,Object> value) {
95+
return (Map<String,Object>)value.get(key);
96+
}
97+
98+
@Override
99+
protected Number getNumber(int index, List<Object> value) {
100+
return (Number)value.get(index);
101+
}
102+
103+
@Override
104+
protected Number getNumber(String key, Map<String,Object> value) {
105+
return (Number)value.get(key);
106+
}
107+
108+
@Override
109+
protected String getString(String key, Map<String,Object> value) {
110+
return (String)value.get(key);
111+
}
51112
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.jsonurl;
2+
3+
/*
4+
* Copyright 2019 David MacCormack
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
7+
* use this file except in compliance with the License. You may obtain a copy
8+
* of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
import static org.junit.jupiter.api.Assertions.assertNotNull;
21+
22+
import org.junit.jupiter.api.Test;
23+
24+
/**
25+
* JavaValueParserTest.
26+
*/
27+
@SuppressWarnings("PMD")
28+
class JavaValueParserTest {
29+
30+
@Test
31+
void testConstruct() {
32+
assertNotNull(new JavaValueParser());
33+
assertNotNull(new JavaValueParser(JavaValueFactory.PRIMITIVE));
34+
}
35+
36+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package org.jsonurl;
2+
3+
/*
4+
* Copyright 2019 David MacCormack
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
7+
* use this file except in compliance with the License. You may obtain a copy
8+
* of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
21+
import static org.junit.jupiter.api.Assertions.assertEquals;
22+
import static org.junit.jupiter.api.Assertions.assertNotNull;
23+
24+
import java.io.IOException;
25+
import java.math.BigDecimal;
26+
import java.math.BigInteger;
27+
import org.junit.jupiter.api.Test;
28+
29+
/**
30+
* JsonUrlStringBuilder unit test.
31+
*/
32+
@SuppressWarnings("PMD")
33+
class JsonUrlStringBuilderTest {
34+
35+
@Test
36+
void testConstruct() {
37+
assertNotNull(new JsonUrlStringBuilder());
38+
assertNotNull(new JsonUrlStringBuilder(10));
39+
}
40+
41+
@Test
42+
void testText() throws IOException {
43+
assertEquals("(key1:(1,1,true,CharSequence,1.0,2))",
44+
new JsonUrlStringBuilder()
45+
.beginObject()
46+
.append("key1")
47+
.nameSeparator()
48+
.beginArray()
49+
.add(BigDecimal.ONE).valueSeparator()
50+
.add(BigInteger.ONE).valueSeparator()
51+
.add(true).valueSeparator()
52+
.add("CharSequence").valueSeparator()
53+
.add(1D).valueSeparator()
54+
.add(2L)
55+
.endArray()
56+
.endObject()
57+
.build());
58+
59+
final char c = 0xc0;
60+
final String s = "bcde";
61+
62+
assertEquals("" + c + s + s.substring(1, 2),
63+
new JsonUrlStringBuilder()
64+
.append(c)
65+
.append(s)
66+
.append(s, 1, 2)
67+
.build());
68+
69+
assertEquals("(bcde:bcde,d:())",
70+
new JsonUrlStringBuilder()
71+
.beginObject()
72+
.addKey(s)
73+
.nameSeparator()
74+
.add(s)
75+
.valueSeparator()
76+
.addKey(s, 2, 3)
77+
.nameSeparator()
78+
.addEmptyComposite()
79+
.endObject()
80+
.build());
81+
82+
assertEquals("(null,10,0)",
83+
new JsonUrlStringBuilder()
84+
.beginObject()
85+
.add((Number)null).valueSeparator()
86+
.add((Number)BigDecimal.TEN).valueSeparator()
87+
.add((Number)BigInteger.ZERO)
88+
.endObject()
89+
.build());
90+
}
91+
}

module/jsonurl-jsonorg/src/test/java/org/jsonurl/jsonorg/JsonOrgParseTest.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,61 @@ abstract class JsonOrgParseTest extends AbstractParseTest<
4949
public JsonOrgParseTest(JsonOrgValueFactory factory) {
5050
super(factory);
5151
}
52+
53+
@Override
54+
protected JSONArray getArray(String key, JSONObject value) {
55+
return (JSONArray)value.get(key);
56+
}
57+
58+
@Override
59+
protected JSONArray getArray(int index, JSONArray value) {
60+
return (JSONArray)value.get(index);
61+
}
62+
63+
@Override
64+
protected JSONObject getObject(int index, JSONArray value) {
65+
return (JSONObject)value.get(index);
66+
}
67+
68+
@Override
69+
protected JSONObject getObject(String key, JSONObject value) {
70+
return (JSONObject)value.get(key);
71+
}
72+
73+
@Override
74+
protected Number getNumber(int index, JSONArray value) {
75+
return (Number)value.get(index);
76+
}
77+
78+
@Override
79+
protected Number getNumber(String key, JSONObject value) {
80+
return (Number)value.get(key);
81+
}
82+
83+
@Override
84+
protected String getString(String key, JSONObject value) {
85+
return (String)value.get(key);
86+
}
87+
88+
@Override
89+
protected boolean getBoolean(String key, JSONObject value) {
90+
Object ret = value.get(key);
91+
92+
if (ret instanceof Boolean) {
93+
return ((Boolean)ret).booleanValue();
94+
}
95+
96+
throw new IllegalArgumentException("value not boolean: " + ret);
97+
}
98+
99+
@Override
100+
protected boolean getNull(String key, JSONObject value) {
101+
Object ret = value.get(key);
102+
return factory.getNull() == ret;
103+
}
104+
105+
@Override
106+
protected boolean getEmptyComposite(String key, JSONObject value) {
107+
return factory.isEmpty(value.get(key));
108+
}
52109
}

0 commit comments

Comments
 (0)