[serde-gson] Support for Gson readers and writers
This commit is contained in:
@@ -8,6 +8,8 @@ dependencies {
|
||||
implementation(project(":tweed5-serde-api"))
|
||||
implementation(libs.jackson.core)
|
||||
shadowOnly(libs.jackson.core)
|
||||
|
||||
testImplementation(project(":serde-json-test-utils"))
|
||||
}
|
||||
|
||||
tasks.shadowJar {
|
||||
|
||||
@@ -2,77 +2,21 @@ package de.siphalor.tweed5.data.jackson;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.StreamReadFeature;
|
||||
import de.siphalor.tweed5.dataapi.api.TweedDataReader;
|
||||
import de.siphalor.tweed5.testutils.serde.json.JsonReaderTest;
|
||||
import lombok.SneakyThrows;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class JacksonReaderTest {
|
||||
class JacksonReaderTest implements JsonReaderTest {
|
||||
@SneakyThrows
|
||||
@Test
|
||||
void complex() {
|
||||
var inputStream = new ByteArrayInputStream("""
|
||||
{
|
||||
"first": [
|
||||
[ 1 ]
|
||||
],
|
||||
"second": {
|
||||
"test": "Hello World!"
|
||||
}
|
||||
}
|
||||
""".getBytes(StandardCharsets.UTF_8));
|
||||
try (var parser = JsonFactory.builder().enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION).build().createParser(inputStream)) {
|
||||
var reader = new JacksonReader(parser);
|
||||
|
||||
var token = reader.peekToken();
|
||||
assertThat(token.isMapStart()).isTrue();
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapStart()).isTrue();
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEntryKey()).isTrue();
|
||||
assertThat(token.canReadAsString()).isTrue();
|
||||
assertThat(token.readAsString()).isEqualTo("first");
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEntryValue()).isTrue();
|
||||
assertThat(token.isListStart()).isTrue();
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEntryValue()).isFalse();
|
||||
assertThat(token.isListValue()).isTrue();
|
||||
assertThat(token.isListStart()).isTrue();
|
||||
token = reader.readToken();
|
||||
assertThat(token.isListValue()).isTrue();
|
||||
assertThat(token.canReadAsInt()).isTrue();
|
||||
assertThat(token.readAsInt()).isEqualTo(1);
|
||||
token = reader.readToken();
|
||||
assertThat(token.isListValue()).isTrue();
|
||||
assertThat(token.isListEnd()).isTrue();
|
||||
token = reader.readToken();
|
||||
assertThat(token.isListValue()).isFalse();
|
||||
assertThat(token.isMapEntryValue()).isTrue();
|
||||
assertThat(token.isListEnd()).isTrue();
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEntryKey()).isTrue();
|
||||
assertThat(token.canReadAsString()).isTrue();
|
||||
assertThat(token.readAsString()).isEqualTo("second");
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEntryValue()).isTrue();
|
||||
assertThat(token.isMapStart()).isTrue();
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEntryValue()).isFalse();
|
||||
assertThat(token.isMapEntryKey()).isTrue();
|
||||
assertThat(token.canReadAsString()).isTrue();
|
||||
assertThat(token.readAsString()).isEqualTo("test");
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEntryValue()).isTrue();
|
||||
assertThat(token.canReadAsString()).isTrue();
|
||||
assertThat(token.readAsString()).isEqualTo("Hello World!");
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEnd()).isTrue();
|
||||
token = reader.readToken();
|
||||
assertThat(token.isMapEnd()).isTrue();
|
||||
}
|
||||
@Override
|
||||
public TweedDataReader createJsonReader(String text) {
|
||||
var parser = JsonFactory.builder()
|
||||
.enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION)
|
||||
.build()
|
||||
.createParser(new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8)));
|
||||
return new JacksonReader(parser);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user