Skip to content

Commit fc8db8b

Browse files
committed
Implemented test for collectors and JsonDumper
1 parent 3684fde commit fc8db8b

File tree

6 files changed

+164
-2
lines changed

6 files changed

+164
-2
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@
5858
<version>5.10.0</version>
5959
<scope>test</scope>
6060
</dependency>
61+
<dependency>
62+
<groupId>org.mockito</groupId>
63+
<artifactId>mockito-core</artifactId>
64+
<version>4.11.0</version>
65+
<scope>test</scope>
66+
</dependency>
6167
</dependencies>
6268

6369
<build>

src/main/java/org/javawebstack/abstractdata/collector/AbstractArrayCollector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public Function<List<AbstractElement>, AbstractArray> finisher() {
4646

4747
public Set<Characteristics> characteristics() {
4848
Set<Characteristics> characteristics = new HashSet<>();
49-
characteristics.add(Characteristics.UNORDERED);
5049
return characteristics;
5150
}
5251

src/main/java/org/javawebstack/abstractdata/json/JsonDumper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ private List<String> dumpLines(AbstractElement element) {
8383
}
8484
return lines;
8585
}
86-
return new ArrayList<>();
86+
throw new IllegalArgumentException("Unknown element type"); // Should be unreachable
8787
}
8888

8989
private static String escape(String s) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.javawebstack.abstractdata.collector;
2+
3+
import org.javawebstack.abstractdata.AbstractArray;
4+
import org.javawebstack.abstractdata.AbstractPrimitive;
5+
import org.junit.jupiter.api.Test;
6+
import java.util.stream.Stream;
7+
import static org.junit.jupiter.api.Assertions.*;
8+
9+
public class AbstractArrayCollectorTest {
10+
11+
@Test
12+
public void testCollection() {
13+
AbstractArray array = Stream.of("a", "b", "c").parallel().collect(new AbstractArrayCollector<>(AbstractPrimitive::new));
14+
assertEquals(3, array.size());
15+
assertEquals("a", array.string(0));
16+
assertEquals("b", array.string(1));
17+
assertEquals("c", array.string(2));
18+
}
19+
20+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.javawebstack.abstractdata.collector;
2+
3+
import org.javawebstack.abstractdata.AbstractObject;
4+
import org.javawebstack.abstractdata.AbstractPrimitive;
5+
import org.junit.jupiter.api.Test;
6+
7+
import java.util.stream.Stream;
8+
import static org.junit.jupiter.api.Assertions.*;
9+
10+
public class AbstractObjectCollectorTest {
11+
12+
@Test
13+
public void testCollection() {
14+
AbstractObject object = Stream.of("a", "bc", "def").parallel().collect(new AbstractObjectCollector<>(s -> s, s -> new AbstractPrimitive(s.length())));
15+
assertEquals(3, object.size());
16+
assertEquals(1, object.number("a"));
17+
assertEquals(2, object.number("bc"));
18+
assertEquals(3, object.number("def"));
19+
}
20+
21+
}
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package org.javawebstack.abstractdata.json;
2+
3+
import org.javawebstack.abstractdata.*;
4+
import org.junit.jupiter.api.Test;
5+
import static org.mockito.Mockito.*;
6+
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
import java.util.function.Function;
10+
11+
import static org.junit.jupiter.api.Assertions.*;
12+
13+
public class JsonDumperTest {
14+
15+
@Test
16+
public void testDumpJavaNull() {
17+
assertEquals("null", new JsonDumper().dump(null));
18+
}
19+
20+
@Test
21+
public void testDumpNull() {
22+
assertEquals("null", new JsonDumper().dump(AbstractNull.VALUE));
23+
}
24+
25+
@Test
26+
public void testDumpString() {
27+
assertEquals("\"abc\"", new JsonDumper().dump(new AbstractPrimitive("abc")));
28+
}
29+
30+
@Test
31+
public void testDumpNumber() {
32+
assertEquals("123.456", new JsonDumper().dump(new AbstractPrimitive(123.456)));
33+
}
34+
35+
@Test
36+
public void testDumpBoolean() {
37+
assertEquals("true", new JsonDumper().dump(new AbstractPrimitive(true)));
38+
assertEquals("false", new JsonDumper().dump(new AbstractPrimitive(false)));
39+
}
40+
41+
@Test
42+
public void testDumpObject() {
43+
assertEquals("{\"a\":1,\"b\":2}", new JsonDumper().dump(new AbstractObject().set("a", 1).set("b", 2)));
44+
}
45+
46+
@Test
47+
public void testDumpArray() {
48+
assertEquals("[1,2,3]", new JsonDumper().dump(new AbstractArray().add(1).add(2).add(3)));
49+
}
50+
51+
@Test
52+
public void testEscapeStringEscapeSeq() {
53+
Map<String, String> escapes = new HashMap<>();
54+
escapes.put("\"", "\\\"");
55+
escapes.put("\\", "\\\\");
56+
escapes.put("\b", "\\b");
57+
escapes.put("\f", "\\f");
58+
escapes.put("\n", "\\n");
59+
escapes.put("\r", "\\r");
60+
escapes.put("\t", "\\t");
61+
escapes.put("\0", "\\0");
62+
escapes.put("/", "\\/");
63+
for(String c : escapes.keySet()) {
64+
assertEquals("\"" + escapes.get(c) + "\"", new JsonDumper().dump(new AbstractPrimitive(c)));
65+
}
66+
}
67+
68+
@Test
69+
public void testEscapeStringUnicode() {
70+
assertEquals("\"\\u001F\"", new JsonDumper().dump(new AbstractPrimitive("\u001F")));
71+
}
72+
73+
@Test
74+
public void testPrettyFlag() {
75+
AbstractObject o = new AbstractObject()
76+
.set("a", 1)
77+
.set("b", new AbstractArray().add("a").add("b"));
78+
String expectedNonPretty = "{\"a\":1,\"b\":[\"a\",\"b\"]}";
79+
String expectedPretty = "{\n \"a\": 1,\n \"b\": [\n \"a\",\n \"b\"\n ]\n}";
80+
assertEquals(expectedNonPretty, new JsonDumper().dump(o));
81+
assertEquals(expectedPretty, new JsonDumper().setPretty(true).dump(o));
82+
}
83+
84+
@Test
85+
public void testIndent() {
86+
AbstractObject o = new AbstractObject()
87+
.set("a", 1)
88+
.set("b", new AbstractArray().add("a").add("b"));
89+
String defaultIndent = " ";
90+
String shortIndent = " ";
91+
Function<String, String> expectedFn = indent -> "{\n" + indent + "\"a\": 1,\n" + indent + "\"b\": [\n" + indent + indent + "\"a\",\n" + indent + indent + "\"b\"\n" + indent + "]\n}";
92+
assertEquals(expectedFn.apply(defaultIndent), new JsonDumper().setPretty(true).dump(o));
93+
assertEquals(expectedFn.apply(shortIndent), new JsonDumper().setIndent(shortIndent).setPretty(true).dump(o));
94+
}
95+
96+
@Test
97+
public void testNoNewlineOnEmptyObject() {
98+
AbstractObject object = new AbstractObject().set("a", new AbstractObject());
99+
String expected = "{\n \"a\": {}\n}";
100+
assertEquals(expected, new JsonDumper().setPretty(true).dump(object));
101+
}
102+
103+
@Test
104+
public void testNoNewlineOnEmptyArray() {
105+
AbstractObject object = new AbstractObject().set("a", new AbstractArray());
106+
String expected = "{\n \"a\": []\n}";
107+
assertEquals(expected, new JsonDumper().setPretty(true).dump(object));
108+
}
109+
110+
@Test
111+
public void testDumpUnknownType() {
112+
AbstractElement e = mock(AbstractElement.class);
113+
assertThrows(IllegalArgumentException.class, () -> new JsonDumper().dump(e));
114+
}
115+
116+
}

0 commit comments

Comments
 (0)