[serde-gson,serde-hjson,serde-jackson] Unify JSON reader tests

This commit is contained in:
2025-08-03 21:19:27 +02:00
parent 7fec263af0
commit a666ac6c33
4 changed files with 224 additions and 135 deletions

View File

@@ -1,14 +1,146 @@
package de.siphalor.tweed5.testutils.serde.json;
import de.siphalor.tweed5.dataapi.api.TweedDataReader;
import de.siphalor.tweed5.dataapi.api.TweedDataToken;
import lombok.SneakyThrows;
import org.assertj.core.data.Offset;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.Assertions.assertThat;
public interface JsonReaderTest {
default Offset<Double> getDoublePrecision() {
return Offset.offset(0.000000001D);
}
TweedDataReader createJsonReader(String text);
@ParameterizedTest
@CsvSource({
"127,127",
"-128,-128",
})
@SneakyThrows
default void jsonByte(String input, byte expected) {
try (var reader = createJsonReader(input)) {
var token = reader.readToken();
assertThat(token.canReadAsByte()).as("%s should be a valid byte", input).isTrue();
assertThat(token.readAsByte()).isEqualTo(expected);
}
}
@ParameterizedTest
@CsvSource({
"1.23e2,123",
"120e-1,12",
})
@SneakyThrows
default void jsonByteFloaty(String input, byte expected) {
try (var reader = createJsonReader(input)) {
var token = reader.readToken();
assertThat(token.canReadAsByte()).as("%s should be a valid byte", input).isTrue();
assertThat(token.readAsByte()).isEqualTo(expected);
}
}
@ParameterizedTest
@CsvSource({
"128",
"1.23",
"-129",
"1.23e3",
"123E-1",
})
@SneakyThrows
default void jsonByteIllegal(String input) {
try (var reader = createJsonReader(input)) {
var token = reader.readToken();
assertThat(token.canReadAsByte()).as("%s should not be a valid byte", input).isFalse();
}
}
@ParameterizedTest
@CsvSource(value = {
"123,123",
"-132893892,-132893892",
})
@SneakyThrows
default void jsonInt(String input, int expected) {
try (var reader = createJsonReader(input)) {
var token = reader.readToken();
assertThat(token.canReadAsInt()).as("%s should be a valid int", input).isTrue();
assertThat(token.readAsInt()).isEqualTo(expected);
}
}
@ParameterizedTest
@CsvSource(value = {
"123e4,1230000",
"9.87e3,9870",
"45670E-1,4567",
"-123.56E+5,-12356000",
})
@SneakyThrows
default void jsonIntFloaty(String input, int expected) {
try (var reader = createJsonReader(input)) {
var token = reader.readToken();
assertThat(token.canReadAsInt()).as("%s should be a valid int", input).isTrue();
assertThat(token.readAsInt()).isEqualTo(expected);
}
}
@ParameterizedTest
@CsvSource({
"123,123",
"12.34,12.34",
"123456789.123456789,123456789.123456789",
"1234.057e8,123405700000",
"987.654E-5,0.00987654",
})
@SneakyThrows
default void jsonDouble(String input, double expected) {
try (var reader = createJsonReader(input)) {
var token = reader.readToken();
assertThat(token.canReadAsDouble()).as("%s should be a valid double", input).isTrue();
assertThat(token.readAsDouble()).isEqualTo(expected, getDoublePrecision());
}
}
@ParameterizedTest
@CsvSource({
"123,123",
"98765,98765"
})
@SneakyThrows
default void jsonIntAsDouble(String input, double expected) {
try (var reader = createJsonReader(input)) {
var token = reader.readToken();
assertThat(token.canReadAsDouble()).as("%s should be a valid double", input).isTrue();
assertThat(token.readAsDouble()).isEqualTo(expected, getDoublePrecision());
}
}
@ParameterizedTest
@ValueSource(strings = {
"[]",
"[\n\n]",
"[ ]",
"[\n\t\t]",
})
@SneakyThrows
default void jsonEmptyArray(String input) {
try (var reader = createJsonReader(input)) {
TweedDataToken token;
token = reader.readToken();
assertThat(token.isListStart()).isTrue();
token = reader.readToken();
assertThat(token.isListEnd()).isTrue();
}
}
@Test
@SneakyThrows
default void complexJsonReadTest() {