From 0bc830c841cad08c94f13e555eb9b8d1627f2b47 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 23 Dec 2024 11:45:41 +0000 Subject: Test getString() directly --- .../config/toml/TomlTableWithSourceTests.java | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/test/java/org/shedlang/compiler/config/toml/TomlTableWithSourceTests.java (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 new file mode 100644 index 00000000..e99b2611 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/config/toml/TomlTableWithSourceTests.java @@ -0,0 +1,92 @@ +package org.shedlang.compiler.config.toml; + +import org.junit.jupiter.api.Test; +import org.shedlang.compiler.config.errors.ConfigError; +import org.shedlang.compiler.sources.Sources; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.equalTo; + +public class TomlTableWithSourceTests { + @Test + public void whenKeyIsMissingThenGetStringThrowsError() { + var source = Sources.string(""" + [[shed.bins]] + name = "one" + + [[shed.bins]] + """); + var table = TomlTableWithSource.parse(source); + + var error = assertThrows( + ConfigError.class, + () -> table + .getTable("shed") + .orElseThrow() + .getArrayOfTables("bins") + .orElseThrow() + .get(1) + .getString("name") + ); + + assertThat(error.getMessage(), equalTo("shed.bins[1] is missing name")); + assertThat(error.source().describe(), equalTo(""" + :4:1 + [[shed.bins]] + ^""" + )); + } + + @Test + public void whenKeyIsNotStringThenGetStringThrowsError() { + 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) + .getString("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 whenKeyIsStringThenGetStringReturnsValue() { + 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) + .getString("name"); + + assertThat(result, equalTo("two")); + } +} -- cgit v1.2.3