From 6e04d1210402cfb487367b9ba811d5f7b00e557b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 22 Mar 2026 10:10:33 +0000 Subject: Extract SourceSerializationTests --- .../compiler/sources/SourceSerializationTests.java | 79 ++++++++++++++++++++++ .../sources/protobuf/SourceToProtobufTests.java | 77 +-------------------- 2 files changed, 81 insertions(+), 75 deletions(-) create mode 100644 src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java b/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java new file mode 100644 index 00000000..0e23201f --- /dev/null +++ b/src/test/java/org/shedlang/compiler/sources/SourceSerializationTests.java @@ -0,0 +1,79 @@ +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 static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public abstract class SourceSerializationTests { + @Test + public void canSerializeNullSource() { + var source = Sources.NULL; + + var deserializedSource = SourceToProtobuf.deserializeSource( + SourceToProtobuf.serializeSource(source, Optional.empty()), + Optional.empty() + ); + + assertThat(deserializedSource, equalTo(source)); + } + + @Test + public void canSerializeRuntimeSource() { + var source = Sources.RUNTIME; + + var deserializedSource = SourceToProtobuf.deserializeSource( + SourceToProtobuf.serializeSource(source, Optional.empty()), + Optional.empty() + ); + + assertThat(deserializedSource, equalTo(source)); + } + + @Test + public void whenFileFragmentSourceHasNoParentThenSourceTextIsPreserved() { + var sourceText = SourceText.fromString("a/b", ""); + var source = new FileFragmentSource(new SourceRange( + sourceText, + new SourcePosition(sourceText, 2), + new SourcePosition(sourceText, 5) + )); + + var deserializedSource = SourceToProtobuf.deserializeSource( + SourceToProtobuf.serializeSource(source, Optional.empty()), + Optional.empty() + ); + + assertThat(deserializedSource.describe(), equalTo(source.describe())); + } + + @Test + public void whenFileFragmentSourceNoExplicitSourceTextThenSourceTextFromParentIsReused() { + var sourceText = SourceText.fromString("a/b", ""); + var sourceRange = new SourceRange( + sourceText, + new SourcePosition(sourceText, 2), + new SourcePosition(sourceText, 5) + ); + var source = new FileFragmentSource(sourceRange); + var parentSource = new FileFragmentSource(new SourceRange( + sourceText, + new SourcePosition(sourceText, 0), + new SourcePosition(sourceText, 10) + )); + + var deserializedSource = (FileFragmentSource) SourceToProtobuf.deserializeSource( + SourceToProtobuf.serializeSource(source, parentSource), + parentSource + ); + + assertThat(deserializedSource.describe(), equalTo(source.describe())); + assertThat(deserializedSource.sourceRange().sourceText() == sourceText, equalTo(true)); + } +} 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 e8f68e46..9e272436 100644 --- a/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java +++ b/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java @@ -1,80 +1,7 @@ package org.shedlang.compiler.sources.protobuf; -import org.junit.jupiter.api.Test; -import org.shedlang.compiler.sources.FileFragmentSource; -import org.shedlang.compiler.sources.Sources; -import org.zwobble.sourcetext.SourcePosition; -import org.zwobble.sourcetext.SourceRange; -import org.zwobble.sourcetext.SourceText; +import org.shedlang.compiler.sources.SourceSerializationTests; -import java.util.Optional; +public class SourceToProtobufTests extends SourceSerializationTests { -import static org.zwobble.precisely.AssertThat.assertThat; -import static org.zwobble.precisely.Matchers.equalTo; - -public class SourceToProtobufTests { - @Test - public void canSerializeNullSource() { - var source = Sources.NULL; - - var deserializedSource = SourceToProtobuf.deserializeSource( - SourceToProtobuf.serializeSource(source, Optional.empty()), - Optional.empty() - ); - - assertThat(deserializedSource, equalTo(source)); - } - - @Test - public void canSerializeRuntimeSource() { - var source = Sources.RUNTIME; - - var deserializedSource = SourceToProtobuf.deserializeSource( - SourceToProtobuf.serializeSource(source, Optional.empty()), - Optional.empty() - ); - - assertThat(deserializedSource, equalTo(source)); - } - - @Test - public void whenFileFragmentSourceHasNoParentThenSourceTextIsPreserved() { - var sourceText = SourceText.fromString("a/b", ""); - var source = new FileFragmentSource(new SourceRange( - sourceText, - new SourcePosition(sourceText, 2), - new SourcePosition(sourceText, 5) - )); - - var deserializedSource = SourceToProtobuf.deserializeSource( - SourceToProtobuf.serializeSource(source, Optional.empty()), - Optional.empty() - ); - - assertThat(deserializedSource.describe(), equalTo(source.describe())); - } - - @Test - public void whenFileFragmentSourceNoExplicitSourceTextThenSourceTextFromParentIsReused() { - var sourceText = SourceText.fromString("a/b", ""); - var sourceRange = new SourceRange( - sourceText, - new SourcePosition(sourceText, 2), - new SourcePosition(sourceText, 5) - ); - var source = new FileFragmentSource(sourceRange); - var parentSource = new FileFragmentSource(new SourceRange( - sourceText, - new SourcePosition(sourceText, 0), - new SourcePosition(sourceText, 10) - )); - - var deserializedSource = (FileFragmentSource) SourceToProtobuf.deserializeSource( - SourceToProtobuf.serializeSource(source, parentSource), - parentSource - ); - - assertThat(deserializedSource.describe(), equalTo(source.describe())); - assertThat(deserializedSource.sourceRange().sourceText() == sourceText, equalTo(true)); - } } -- cgit v1.2.3