Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import org.apache.flink.table.types.DataType;
import org.apache.flink.types.Row;

import org.junit.jupiter.api.Nested;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
Expand All @@ -32,37 +34,24 @@
import java.util.Objects;

/** Tests for {@link ExternalSerializer}. */
abstract class ExternalSerializerTest<T> extends SerializerTestInstance<T> {

@SuppressWarnings("unchecked")
ExternalSerializerTest(TestSpec<T> testSpec) {
super(
ExternalSerializer.of(testSpec.dataType),
(Class<T>) testSpec.dataType.getConversionClass(),
testSpec.length,
testSpec.instances.toArray(
(T[]) Array.newInstance(testSpec.dataType.getConversionClass(), 0)));
}

@Override
protected boolean allowNullInstances(TypeSerializer<T> serializer) {
return true;
}
class ExternalSerializerTest {

static final class ExternalSerializer1Test extends ExternalSerializerTest {
public ExternalSerializer1Test() {
@Nested
final class ExternalSerializer1Test extends ExternalSerializerTestBase<Integer> {
ExternalSerializer1Test() {
super(
TestSpec.forDataType(DataTypes.INT())
TestSpec.<Integer>forDataType(DataTypes.INT())
.withLength(4)
.addInstance(18)
.addInstance(42));
}
}

static final class ExternalSerializer2Test extends ExternalSerializerTest {
public ExternalSerializer2Test() {
@Nested
final class ExternalSerializer2Test extends ExternalSerializerTestBase<Row> {
ExternalSerializer2Test() {
super(
TestSpec.forDataType(
TestSpec.<Row>forDataType(
DataTypes.ROW(
DataTypes.FIELD("age", DataTypes.INT()),
DataTypes.FIELD("name", DataTypes.STRING())))
Expand All @@ -71,10 +60,11 @@ public ExternalSerializer2Test() {
}
}

static final class ExternalSerializer3Test extends ExternalSerializerTest {
public ExternalSerializer3Test() {
@Nested
final class ExternalSerializer3Test extends ExternalSerializerTestBase<ImmutableTestPojo> {
ExternalSerializer3Test() {
super(
TestSpec.forDataType(
TestSpec.<ImmutableTestPojo>forDataType(
DataTypes.STRUCTURED(
ImmutableTestPojo.class,
DataTypes.FIELD("age", DataTypes.INT()),
Expand All @@ -84,10 +74,12 @@ public ExternalSerializer3Test() {
}
}

static final class ExternalSerializer4Test extends ExternalSerializerTest {
public ExternalSerializer4Test() {
@Nested
final class ExternalSerializer4Test
extends ExternalSerializerTestBase<List<ImmutableTestPojo>> {
ExternalSerializer4Test() {
super(
TestSpec.forDataType(
TestSpec.<List<ImmutableTestPojo>>forDataType(
DataTypes.ARRAY(
DataTypes.STRUCTURED(
ImmutableTestPojo.class,
Expand All @@ -106,15 +98,34 @@ public ExternalSerializer4Test() {
}
}

static final class ExternalSerializer5Test extends ExternalSerializerTest {
public ExternalSerializer5Test() {
@Nested
final class ExternalSerializer5Test extends ExternalSerializerTestBase<Integer[]> {
ExternalSerializer5Test() {
super(
TestSpec.forDataType(DataTypes.ARRAY(DataTypes.INT()))
TestSpec.<Integer[]>forDataType(DataTypes.ARRAY(DataTypes.INT()))
.addInstance(new Integer[] {0, 1, null, 3})
.addInstance(new Integer[0]));
}
}

abstract static class ExternalSerializerTestBase<T> extends SerializerTestInstance<T> {

@SuppressWarnings("unchecked")
ExternalSerializerTestBase(TestSpec<T> testSpec) {
super(
ExternalSerializer.of(testSpec.dataType),
(Class<T>) testSpec.dataType.getConversionClass(),
testSpec.length,
testSpec.instances.toArray(
(T[]) Array.newInstance(testSpec.dataType.getConversionClass(), 0)));
}

@Override
protected boolean allowNullInstances(TypeSerializer<T> serializer) {
return true;
}
}

// --------------------------------------------------------------------------------------------

private static class TestSpec<T> {
Expand Down
Loading