From a7d9c54a3926fe1846e795980f81d03f0114212f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 23 Dec 2024 11:48:19 +0000 Subject: Add TomlTableWithSource.getStringOrNone() --- .../config/toml/TomlTableWithSourceTests.java | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'src/test/java') 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(""" + :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"))); + } } -- cgit v1.2.3