diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-03-21 11:01:28 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-03-21 11:01:28 +0000 |
| commit | 48a0d074425e5105e92fd3f518c9d80ae8f6dd9a (patch) | |
| tree | 568ab7f215fb5e68149024bd36a0ff387c304435 /src/test/java | |
| parent | 6561e50d28066b0913fb5395f238111c3b0479d6 (diff) | |
Add deserialization for sources
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java b/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java new file mode 100644 index 00000000..e8f68e46 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java @@ -0,0 +1,80 @@ +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 java.util.Optional; + +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", "<contents>"); + 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", "<contents>"); + 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)); + } +} |
