aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-23 11:48:19 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-23 11:48:19 +0000
commita7d9c54a3926fe1846e795980f81d03f0114212f (patch)
tree4e0c8f3e6ba505a150b258c3d1cd2a6b13531221 /src/test/java
parent0bc830c841cad08c94f13e555eb9b8d1627f2b47 (diff)
Add TomlTableWithSource.getStringOrNone()
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/config/toml/TomlTableWithSourceTests.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/config/toml/TomlTableWithSourceTests.java b/src/test/java/org/shedlang/compiler/config/toml/TomlTableWithSourceTests.java
index e99b2611..3dcc17f0 100644
--- a/src/test/java/org/shedlang/compiler/config/toml/TomlTableWithSourceTests.java
+++ b/src/test/java/org/shedlang/compiler/config/toml/TomlTableWithSourceTests.java
@@ -4,6 +4,8 @@ import org.junit.jupiter.api.Test;
import org.shedlang.compiler.config.errors.ConfigError;
import org.shedlang.compiler.sources.Sources;
+import java.util.Optional;
+
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.equalTo;
@@ -89,4 +91,77 @@ public class TomlTableWithSourceTests {
assertThat(result, equalTo("two"));
}
+
+ @Test
+ public void whenKeyIsMissingThenGetStringOrNoneReturnsEmptyOptional() {
+ var source = Sources.string("""
+ [[shed.bins]]
+ name = "one"
+
+ [[shed.bins]]
+ """);
+ var table = TomlTableWithSource.parse(source);
+
+ var result = table
+ .getTable("shed")
+ .orElseThrow()
+ .getArrayOfTables("bins")
+ .orElseThrow()
+ .get(1)
+ .getStringOrNone("name");
+
+ assertThat(result, equalTo(Optional.empty()));
+ }
+
+ @Test
+ public void whenKeyIsNotStringThenGetStringOrNoneThrowsError() {
+ var source = Sources.string("""
+ [[shed.bins]]
+ name = "one"
+
+ [[shed.bins]]
+ name = true
+ """);
+ var table = TomlTableWithSource.parse(source);
+
+ var error = assertThrows(
+ ConfigError.class,
+ () -> table
+ .getTable("shed")
+ .orElseThrow()
+ .getArrayOfTables("bins")
+ .orElseThrow()
+ .get(1)
+ .getStringOrNone("name")
+ );
+
+ assertThat(error.getMessage(), equalTo("Expected shed.bins[1].name to be a string, but was Boolean"));
+ assertThat(error.source().describe(), equalTo("""
+ <string>:5:1
+ name = true
+ ^"""
+ ));
+ }
+
+ @Test
+ public void whenKeyIsStringThenGetStringOrNoneReturnsValue() {
+ var source = Sources.string("""
+ [[shed.bins]]
+ name = "one"
+
+ [[shed.bins]]
+ name = "two"
+ """);
+ var table = TomlTableWithSource.parse(source);
+
+ var result = table
+ .getTable("shed")
+ .orElseThrow()
+ .getArrayOfTables("bins")
+ .orElseThrow()
+ .get(1)
+ .getStringOrNone("name");
+
+ assertThat(result, equalTo(Optional.of("two")));
+ }
}