From cb44def5d662e9ec15cf1d97d735c6deb129c302 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 24 Mar 2024 13:45:02 +0000 Subject: Add config for profiles --- .../shedlang/compiler/config/GcConfigTests.java | 64 ++++++++++++++++++++++ .../compiler/config/GcMarkAndSweepConfigTests.java | 34 ++++++++++++ .../compiler/config/ProfileConfigTests.java | 41 ++++++++++++++ .../compiler/config/ProjectConfigTests.java | 51 +++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 src/test/java/org/shedlang/compiler/config/GcConfigTests.java create mode 100644 src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java create mode 100644 src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/config/GcConfigTests.java b/src/test/java/org/shedlang/compiler/config/GcConfigTests.java new file mode 100644 index 00000000..2f6c6c93 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/config/GcConfigTests.java @@ -0,0 +1,64 @@ +package org.shedlang.compiler.config; + +import org.junit.jupiter.api.Test; +import org.tomlj.Toml; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.*; + +public class GcConfigTests { + @Test + public void whenNameIsMissingThenErrorIsThrown() { + var error = assertThrows( + IllegalArgumentException.class, + () -> GcConfig.fromToml(Toml.parse("")) + ); + + assertThat(error.getMessage(), equalTo("Missing GC name")); + } + + @Test + public void whenNameIsUnrecognisedThenErrorIsThrown() { + var error = assertThrows( + IllegalArgumentException.class, + () -> GcConfig.fromToml(Toml.parse(""" + name = "huh" + """ + )) + ); + + assertThat(error.getMessage(), equalTo("Unrecognised GC name: \"huh\"")); + } + + @Test + public void canParseConfigForBump() { + var config = GcConfig.fromToml(Toml.parse(""" + name = "bump" + """)); + + assertThat(config, instanceOf(GcBumpConfig.class)); + } + + @Test + public void canParseMinimalConfigForMarkAndSweep() { + var config = GcConfig.fromToml(Toml.parse(""" + name = "mark-and-sweep" + """)); + + assertThat(config, instanceOf(GcMarkAndSweepConfig.class)); + } + + @Test + public void additionalFieldsCanBeUsedBySpecificGcConfig() { + var config = GcConfig.fromToml(Toml.parse(""" + name = "mark-and-sweep" + collect-interval = 10000 + """)); + + assertThat(config, instanceOf( + GcMarkAndSweepConfig.class, + has("collectInterval", x -> x.collectInterval(), isOptionalOf(equalTo(10000L))) + )); + } +} diff --git a/src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java b/src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java new file mode 100644 index 00000000..120d279a --- /dev/null +++ b/src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java @@ -0,0 +1,34 @@ +package org.shedlang.compiler.config; + +import org.junit.jupiter.api.Test; +import org.tomlj.Toml; + +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.*; + +public class GcMarkAndSweepConfigTests { + @Test + public void collectIntervalCanBeMissing() { + var config = GcMarkAndSweepConfig.fromToml(Toml.parse("")); + + assertThat(config, has( + "collectInterval", + x -> x.collectInterval(), + isOptionalEmpty() + )); + } + + @Test + public void additionalFieldsCanBeUsedBySpecificGcConfig() { + var config = GcMarkAndSweepConfig.fromToml(Toml.parse(""" + name = "mark-and-sweep" + collect-interval = 10000 + """)); + + assertThat(config, has( + "collectInterval", + x -> x.collectInterval(), + isOptionalOf(equalTo(10000L)) + )); + } +} diff --git a/src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java b/src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java new file mode 100644 index 00000000..3a3e828c --- /dev/null +++ b/src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java @@ -0,0 +1,41 @@ +package org.shedlang.compiler.config; + +import org.junit.jupiter.api.Test; +import org.tomlj.Toml; + +import static org.zwobble.precisely.AssertThat.assertThat; +import static org.zwobble.precisely.Matchers.*; + +public class ProfileConfigTests { + @Test + public void canParseProfileConfigWithName() { + var config = ProfileConfig.fromToml(Toml.parse(""" + name = "one" + """)); + + assertThat(config, has("name", x -> x.name(), equalTo("one"))); + } + + @Test + public void canParseProfileConfigWithoutGc() { + var config = ProfileConfig.fromToml(Toml.parse(""" + name = "one" + """)); + + assertThat(config, has("name", x -> x.gc(), isOptionalEmpty())); + } + + @Test + public void canParseProfileConfigWithGc() { + var config = ProfileConfig.fromToml(Toml.parse(""" + name = "one" + gc.name = "bump" + """)); + + assertThat(config, has( + "gc", + x -> x.gc(), + isOptionalOf(equalTo(GcConfig.BUMP)) + )); + } +} diff --git a/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java b/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java index 9496a1e6..fe3bc78f 100644 --- a/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java +++ b/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java @@ -50,4 +50,55 @@ public class ProjectConfigTests { assertThat(config.examples(), isSequence()); } + + @Test + public void canParseProjectConfigWithExamples() { + var config = ProjectConfig.fromString(PROJECT_PATH, """ + [[shed.examples]] + bin = "one" + + [[shed.examples]] + bin = "two" + """); + + assertThat(config.examples(), isSequence( + instanceOf( + ExampleConfig.class, + has("bin", x -> x.bin(), equalTo("one")) + ), + instanceOf( + ExampleConfig.class, + has("bin", x -> x.bin(), equalTo("two")) + ) + )); + } + + @Test + public void canParseProjectConfigWithNoProfiles() { + var config = ProjectConfig.fromString(PROJECT_PATH, ""); + + assertThat(config.profiles(), isSequence()); + } + + @Test + public void canParseProjectConfigWithProfiles() { + var config = ProjectConfig.fromString(PROJECT_PATH, """ + [[shed.profiles]] + name = "one" + + [[shed.profiles]] + name = "two" + """); + + assertThat(config.profiles(), isSequence( + instanceOf( + ProfileConfig.class, + has("name", x -> x.name(), equalTo("one")) + ), + instanceOf( + ProfileConfig.class, + has("name", x -> x.name(), equalTo("two")) + ) + )); + } } -- cgit v1.2.3