added parser tests

This commit is contained in:
Sander Hautvast 2020-08-14 19:41:02 +02:00
parent 6599c3a3e1
commit 2cc05e3b3a
4 changed files with 98 additions and 2 deletions

View file

@ -53,7 +53,7 @@ public class JavaObjectReaderFactory {
private static CtMethod createReadJsonMethod(CtClass serializerClass, Class<?> type) {
try {
String readMethodBodySource = createReadMethodBodySource(type);
System.out.println(readMethodBodySource);
// System.out.println(readMethodBodySource);
return CtNewMethod.make(Modifier.PUBLIC, OBJECT_CLASS, "read", PARSER_PARAM, NO_EXCEPTIONS, readMethodBodySource, serializerClass);
} catch (CannotCompileException e) {
throw new ClassCreationException(e);

View file

@ -105,6 +105,10 @@ public class Parser extends Lexer {
}
public List<?> parseArray() {
return parseArray(null);
}
public List<?> parseArray(Class<?> genericType) {
skipWhitespace();
if (current != '[') {
throw new JsonParseException("no list found");
@ -112,7 +116,7 @@ public class Parser extends Lexer {
final List<Object> list = new ArrayList<>();
advance();
while (current != -1 && current != ']') {
final Maybe<Object> maybeValue = parseValue();
final Maybe<Object> maybeValue = genericType == null ? parseValue() : parseValue(genericType);
if (!maybeValue.isPresent()) {
break;
} else {

View file

@ -0,0 +1,87 @@
package nl.sander.jsontoy2;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class ParserTest {
@Test
public void testFloat() {
assertEquals(31.415927F, new Parser(getInputStream("31.415927")).parseFloat());
}
@Test
public void testDouble() {
assertEquals(3.1415927D, new Parser(getInputStream("3.1415927")).parseDouble());
}
@Test
public void testInt() {
assertEquals(31415927, new Parser(getInputStream("31415927")).parseInteger());
}
@Test
public void testShort() {
assertEquals((short) 31415, new Parser(getInputStream("31415")).parseShort());
}
@Test
public void testByte() {
assertEquals((byte) 31, new Parser(getInputStream("31")).parseByte());
}
@Test
public void testBooleanTrue() {
assertEquals(true, new Parser(getInputStream("true")).parseBoolean());
}
@Test
public void testBooleanFalse() {
assertEquals(false, new Parser(getInputStream("false")).parseBoolean());
}
@Test
public void testBooleanInvalid() {
assertThrows(JsonParseException.class, () -> new Parser(getInputStream("falsy")).parseBoolean());
}
@Test
public void testArray() {
assertEquals(List.of("3", "1", "4", "1"), new Parser(getInputStream("[\"3\",\"1\",\"4\",\"1\"]")).parseArray());
}
@Test
public void testArrayWithType() {
assertEquals(List.of(3D, 1D, 4D, 1D), new Parser(getInputStream("[3,1,4,1]")).parseArray(Double.class));
}
@Test
public void testObject() {
assertEquals(Map.of("pi", 3.1415927D), new Parser(getInputStream("{\"pi\":3.1415927}")).parseObject());
}
@Test
public void testObjectWithType() {
assertEquals(Map.of("pi", 3.1415927F), new Parser(getInputStream("{\"pi\":3.1415927}")).parseObject(PiBean.class));
}
@Test
public void testChar() {
assertEquals('3', new Parser(getInputStream("\"3\"")).parseCharacter());
}
private InputStream getInputStream(String jsonString) {
return new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8));
}
static class PiBean {
private float pi;
}
}

View file

@ -7,6 +7,11 @@ public class FloatBean {
public FloatBean() {
}
public FloatBean(float value, Float value2) {
this.value = value;
this.value2 = value2;
}
public float getValue() {
return value;
}