aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-24 13:45:02 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-24 13:45:02 +0000
commitcb44def5d662e9ec15cf1d97d735c6deb129c302 (patch)
tree6d42fe8107940123a90b39bd761c947f97ca9d3a /src/test/java
parent5741462601505907f25c5b26a2618adf077c05c6 (diff)
Add config for profiles
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/config/GcConfigTests.java64
-rw-r--r--src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java34
-rw-r--r--src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java41
-rw-r--r--src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java51
4 files changed, 190 insertions, 0 deletions
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"))
+ )
+ ));
+ }
}