aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-03-21 11:01:28 +0000
committerMichael Williamson <mike@zwobble.org>2026-03-21 11:01:28 +0000
commit48a0d074425e5105e92fd3f518c9d80ae8f6dd9a (patch)
tree568ab7f215fb5e68149024bd36a0ff387c304435 /src/test/java
parent6561e50d28066b0913fb5395f238111c3b0479d6 (diff)
Add deserialization for sources
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/sources/protobuf/SourceToProtobufTests.java80
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));
+ }
+}