Skip to content

Commit 44cde78

Browse files
committed
Implemented tests for YamlParser and YamlDumper, bumped bson to 5.0.0
1 parent 753384e commit 44cde78

File tree

7 files changed

+131
-16
lines changed

7 files changed

+131
-16
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<dependency>
5050
<groupId>org.mongodb</groupId>
5151
<artifactId>bson</artifactId>
52-
<version>4.11.1</version>
52+
<version>5.0.0</version>
5353
<optional>true</optional>
5454
</dependency>
5555
<dependency>

src/main/java/org/javawebstack/abstractdata/AbstractElement.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,11 @@ default String toYaml() {
120120
}
121121

122122
static AbstractElement fromYaml(String source, boolean singleRoot) {
123-
return new YamlParser().setSingleRoot(singleRoot).parse(source);
123+
try {
124+
return new YamlParser().setSingleRoot(singleRoot).parse(source);
125+
} catch (ParseException e) {
126+
throw new RuntimeException(e);
127+
}
124128
}
125129

126130
static AbstractElement fromYaml(String source) {

src/main/java/org/javawebstack/abstractdata/yaml/LegacyYamlDumper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ public class LegacyYamlDumper {
88

99
protected static String dump(AbstractElement e, boolean pretty) {
1010
Yaml yaml;
11+
DumperOptions options = new DumperOptions();
1112
if (pretty) {
12-
DumperOptions options = new DumperOptions();
1313
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
1414
options.setPrettyFlow(true);
15-
yaml = new Yaml(options);
1615
} else {
17-
yaml = new Yaml();
16+
options.setPrettyFlow(false);
1817
}
18+
yaml = new Yaml(options);
1919
return yaml.dump(e.toObject());
2020
}
2121

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,34 @@
11
package org.javawebstack.abstractdata.yaml;
22

33
import org.javawebstack.abstractdata.AbstractElement;
4+
import org.javawebstack.abstractdata.AbstractNull;
45
import org.yaml.snakeyaml.Yaml;
6+
import org.yaml.snakeyaml.parser.ParserException;
57

6-
import java.util.HashMap;
8+
import java.text.ParseException;
9+
import java.util.ArrayList;
10+
import java.util.Collections;
711
import java.util.List;
812

913
public class LegacyYamlParser {
1014

11-
protected static AbstractElement parse(String source, boolean singleRoot) {
12-
Yaml yaml = new Yaml();
13-
Object object = yaml.load(source);
14-
if (singleRoot && object instanceof List) {
15-
List<Object> list = (List<Object>) object;
16-
if (list.size() == 0) {
17-
object = new HashMap<>();
18-
} else {
15+
protected static AbstractElement parse(String source, boolean singleRoot) throws ParseException {
16+
if(source.trim().equalsIgnoreCase("null"))
17+
return AbstractNull.VALUE;
18+
if(source.trim().isEmpty())
19+
throw new ParseException("Invalid yaml", 0);
20+
try {
21+
Yaml yaml = new Yaml();
22+
List<Object> list = new ArrayList<>();
23+
yaml.loadAll(source).forEach(list::add);
24+
Object object = list;
25+
if (singleRoot && list.size() == 1) {
1926
object = list.get(0);
2027
}
28+
return AbstractElement.fromObject(object);
29+
} catch (ParserException e) {
30+
throw new ParseException(e.getMessage(), e.getProblemMark().getIndex());
2131
}
22-
return AbstractElement.fromObject(object);
2332
}
2433

2534
}

src/main/java/org/javawebstack/abstractdata/yaml/YamlParser.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.javawebstack.abstractdata.AbstractElement;
44

5+
import java.text.ParseException;
6+
57
public class YamlParser {
68

79
boolean singleRoot = false;
@@ -15,7 +17,7 @@ public boolean isSingleRoot() {
1517
return singleRoot;
1618
}
1719

18-
public AbstractElement parse(String source) {
20+
public AbstractElement parse(String source) throws ParseException {
1921
return LegacyYamlParser.parse(source, singleRoot);
2022
}
2123

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.javawebstack.abstractdata.yaml;
2+
3+
import org.javawebstack.abstractdata.AbstractArray;
4+
import org.javawebstack.abstractdata.AbstractObject;
5+
import org.junit.jupiter.api.Test;
6+
import static org.junit.jupiter.api.Assertions.*;
7+
8+
public class YamlDumperTest {
9+
10+
@Test
11+
public void testDump() {
12+
AbstractObject object = new AbstractObject()
13+
.set("a", 1)
14+
.set("b", new AbstractArray());
15+
String expected = "a: 1\nb: []\n"; // Not actually minified but that's what snakeyaml outputs
16+
String dumped = new YamlDumper().dump(object);
17+
assertEquals(expected, dumped);
18+
}
19+
20+
@Test
21+
public void testDumpPretty() {
22+
AbstractObject object = new AbstractObject()
23+
.set("a", 1)
24+
.set("b", new AbstractArray());
25+
String expected = "a: 1\nb: [\n ]\n"; // Not actually expected, as it's not pretty but that's what snakeyaml calls pretty
26+
String dumped = new YamlDumper().setPretty(true).dump(object);
27+
assertEquals(expected, dumped);
28+
}
29+
30+
@Test
31+
public void testSetPretty() {
32+
YamlDumper dumper = new YamlDumper();
33+
assertFalse(dumper.isPretty());
34+
dumper.setPretty(true);
35+
assertTrue(dumper.isPretty());
36+
}
37+
38+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package org.javawebstack.abstractdata.yaml;
2+
3+
import org.javawebstack.abstractdata.AbstractElement;
4+
import org.junit.jupiter.api.Test;
5+
import org.yaml.snakeyaml.Yaml;
6+
7+
import java.text.ParseException;
8+
9+
import static org.junit.jupiter.api.Assertions.*;
10+
11+
public class YamlParserTest {
12+
13+
@Test
14+
public void testParse() {
15+
AbstractElement e = assertDoesNotThrow(() -> new YamlParser().setSingleRoot(true).parse("test:\n a: 123\n b: false\n c: 'abc'"));
16+
assertNotNull(e);
17+
assertTrue(e.isObject());
18+
assertEquals(1, e.object().size());
19+
AbstractElement testElement = e.object().get("test");
20+
assertNotNull(testElement);
21+
assertTrue(testElement.isObject());
22+
assertEquals(3, testElement.object().size());
23+
AbstractElement aElement = testElement.object().get("a");
24+
assertNotNull(aElement);
25+
assertTrue(aElement.isNumber());
26+
assertEquals(123, aElement.number());
27+
AbstractElement bElement = testElement.object().get("b");
28+
assertNotNull(bElement);
29+
assertTrue(bElement.isBoolean());
30+
assertEquals(false, bElement.bool());
31+
AbstractElement cElement = testElement.object().get("c");
32+
assertNotNull(cElement);
33+
assertTrue(cElement.isString());
34+
assertEquals("abc", cElement.string());
35+
}
36+
37+
@Test
38+
public void testParseEmptyDocument() {
39+
assertThrows(ParseException.class, () -> new YamlParser().parse(""));
40+
}
41+
42+
@Test
43+
public void testParseNull() {
44+
AbstractElement e = assertDoesNotThrow(() -> new YamlParser().parse("null"));
45+
assertNotNull(e);
46+
assertTrue(e.isNull());
47+
}
48+
49+
@Test
50+
public void testParseInvalidDocument() {
51+
assertThrows(ParseException.class, () -> new YamlParser().parse("\"a\"1"));
52+
}
53+
54+
@Test
55+
public void testSetSingleRoot() {
56+
YamlParser parser = new YamlParser();
57+
assertFalse(parser.isSingleRoot());
58+
parser.setSingleRoot(true);
59+
assertTrue(parser.isSingleRoot());
60+
}
61+
62+
}

0 commit comments

Comments
 (0)