From f68c1f5fed1a98c51e8d6924ed5b2bc6350118ee Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Mar 2026 10:20:44 +0000 Subject: Parametrize SourceSerializationTests --- .../compiler/sources/SourceSerializationTests.java | 47 +++++++++++++++++----- .../sources/protobuf/SourceToProtobufTests.java | 11 ++++- 2 files changed, 45 insertions(+), 13 deletions(-) (limited to 'src/test/java/org') diff --git a/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java b/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java index 0e23201f..7e417d2d 100644 --- a/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java +++ b/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java @@ -1,23 +1,48 @@ package org.shedlang.compiler.sources; import org.junit.jupiter.api.Test; -import org.shedlang.compiler.sources.protobuf.SourceToProtobuf; import org.zwobble.sourcetext.SourcePosition; import org.zwobble.sourcetext.SourceRange; import org.zwobble.sourcetext.SourceText; import java.util.Optional; +import java.util.function.BiFunction; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; -public abstract class SourceSerializationTests { +public abstract class SourceSerializationTests { + private final BiFunction, TSerializedSource> serialize; + private final BiFunction, Source> deserialize; + + public SourceSerializationTests( + BiFunction, TSerializedSource> serialize, + BiFunction, Source> deserialize + ) { + this.serialize = serialize; + this.deserialize = deserialize; + } + + private TSerializedSource serializeSource( + Source source, + Optional parentSource + ) { + return this.serialize.apply(source, parentSource); + } + + private Source deserializeSource( + TSerializedSource serializedSource, + Optional parentSource + ) { + return this.deserialize.apply(serializedSource, parentSource); + } + @Test public void canSerializeNullSource() { var source = Sources.NULL; - var deserializedSource = SourceToProtobuf.deserializeSource( - SourceToProtobuf.serializeSource(source, Optional.empty()), + var deserializedSource = deserializeSource( + serializeSource(source, Optional.empty()), Optional.empty() ); @@ -28,8 +53,8 @@ public abstract class SourceSerializationTests { public void canSerializeRuntimeSource() { var source = Sources.RUNTIME; - var deserializedSource = SourceToProtobuf.deserializeSource( - SourceToProtobuf.serializeSource(source, Optional.empty()), + var deserializedSource = deserializeSource( + serializeSource(source, Optional.empty()), Optional.empty() ); @@ -45,8 +70,8 @@ public abstract class SourceSerializationTests { new SourcePosition(sourceText, 5) )); - var deserializedSource = SourceToProtobuf.deserializeSource( - SourceToProtobuf.serializeSource(source, Optional.empty()), + var deserializedSource = deserializeSource( + serializeSource(source, Optional.empty()), Optional.empty() ); @@ -68,9 +93,9 @@ public abstract class SourceSerializationTests { new SourcePosition(sourceText, 10) )); - var deserializedSource = (FileFragmentSource) SourceToProtobuf.deserializeSource( - SourceToProtobuf.serializeSource(source, parentSource), - parentSource + var deserializedSource = (FileFragmentSource) deserializeSource( + serializeSource(source, Optional.of(parentSource)), + Optional.of(parentSource) ); assertThat(deserializedSource.describe(), equalTo(source.describe())); diff --git a/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java b/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java index 9e272436..9aba0b99 100644 --- a/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java +++ b/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java @@ -2,6 +2,13 @@ package org.shedlang.compiler.sources.protobuf; import org.shedlang.compiler.sources.SourceSerializationTests; -public class SourceToProtobufTests extends SourceSerializationTests { - +public class SourceToProtobufTests extends SourceSerializationTests { + public SourceToProtobufTests() { + super( + (source, parentSource) -> + SourceToProtobuf.serializeSource(source, parentSource), + (serializedSource, parentSource) -> + SourceToProtobuf.deserializeSource(serializedSource, parentSource) + ); + } } -- cgit v1.2.3