aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-01-05 23:39:19 +0000
committerMichael Williamson <mike@zwobble.org>2025-01-05 23:39:19 +0000
commit1e6e1f7bb8776fc013f76828ed8df3f9297d095b (patch)
tree69033190a65779f6dbd694e15d66763b53408c5d /src/test/java
parentf54116f39ccb6d1efec95d76c59e9dad1d46e426 (diff)
Use java-source-text for JSON5 parsing
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/config/BinConfigTests.java21
-rw-r--r--src/test/java/org/shedlang/compiler/config/GcConfigTests.java31
-rw-r--r--src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java8
-rw-r--r--src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java25
-rw-r--r--src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java34
-rw-r--r--src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java91
6 files changed, 118 insertions, 92 deletions
diff --git a/src/test/java/org/shedlang/compiler/config/BinConfigTests.java b/src/test/java/org/shedlang/compiler/config/BinConfigTests.java
index eb6514d1..b11562d5 100644
--- a/src/test/java/org/shedlang/compiler/config/BinConfigTests.java
+++ b/src/test/java/org/shedlang/compiler/config/BinConfigTests.java
@@ -3,8 +3,8 @@ package org.shedlang.compiler.config;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.config.errors.ConfigError;
import org.shedlang.compiler.config.json.Json5ObjectWithSource;
-import org.shedlang.compiler.sources.Sources;
import org.shedlang.compiler.types.NamespaceName;
+import org.zwobble.sourcetext.SourceText;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.zwobble.precisely.AssertThat.assertThat;
@@ -13,14 +13,14 @@ import static org.zwobble.precisely.Matchers.*;
public class BinConfigTests {
@Test
public void canParseBinConfigWithNameAndMainNamespace() {
- var source = Sources.string("""
+ var sourceText = """
{
name: "one",
mainNamespace: "A/B",
}
- """);
+ """;
- var config = BinConfig.fromJson5(Json5ObjectWithSource.parse(source));
+ var config = parseBinConfig(sourceText);
assertThat(config, allOf(
has("name", x -> x.name(), equalTo("one")),
@@ -29,23 +29,23 @@ public class BinConfigTests {
}
@Test
public void whenMainNamespaceHasSyntaxErrorThenErrorIsThrown() {
- var source = Sources.string("""
+ var sourceText = """
{
name: "one",
mainNamespace: "A.B",
}
- """);
+ """;
var error = assertThrows(
ConfigError.class,
- () -> BinConfig.fromJson5(Json5ObjectWithSource.parse(source))
+ () -> parseBinConfig(sourceText)
);
assertThat(error.getMessage(), equalTo("""
Invalid namespace name.
Expected: END
But got: SYMBOL_DOT "."
-
+
<string>:1:2
A.B
^"""));
@@ -54,4 +54,9 @@ public class BinConfigTests {
mainNamespace: "A.B",
^^^^^"""));
}
+
+ private BinConfig parseBinConfig(String text) {
+ var sourceText = SourceText.fromString("<string>", text);
+ return BinConfig.fromJson5(Json5ObjectWithSource.parse(sourceText));
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/config/GcConfigTests.java b/src/test/java/org/shedlang/compiler/config/GcConfigTests.java
index 351d3d5b..1dfa27a4 100644
--- a/src/test/java/org/shedlang/compiler/config/GcConfigTests.java
+++ b/src/test/java/org/shedlang/compiler/config/GcConfigTests.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.config;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.config.json.Json5ObjectWithSource;
-import org.shedlang.compiler.sources.Sources;
+import org.zwobble.sourcetext.SourceText;
import java.util.OptionalLong;
@@ -13,15 +13,15 @@ import static org.zwobble.precisely.Matchers.*;
public class GcConfigTests {
@Test
public void whenNameIsUnrecognisedThenErrorIsThrown() {
- var source = Sources.string("""
+ var source = """
{
name: "huh",
}
- """);
+ """;
var error = assertThrows(
IllegalArgumentException.class,
- () -> GcConfig.fromJson5(Json5ObjectWithSource.parse(source))
+ () -> parseGcConfig(source)
);
assertThat(error.getMessage(), equalTo("Unrecognised GC name: \"huh\""));
@@ -29,44 +29,49 @@ public class GcConfigTests {
@Test
public void canParseConfigForBump() {
- var source = Sources.string("""
+ var source = """
{
"name": "bump",
}
- """);
+ """;
- var config = GcConfig.fromJson5(Json5ObjectWithSource.parse(source));
+ var config = parseGcConfig(source);
assertThat(config, instanceOf(GcBumpConfig.class));
}
@Test
public void canParseMinimalConfigForMarkAndSweep() {
- var source = Sources.string("""
+ var source = """
{
name: "mark-and-sweep",
}
- """);
+ """;
- var config = GcConfig.fromJson5(Json5ObjectWithSource.parse(source));
+ var config = parseGcConfig(source);
assertThat(config, instanceOf(GcMarkAndSweepConfig.class));
}
@Test
public void additionalFieldsCanBeUsedBySpecificGcConfig() {
- var source = Sources.string("""
+ var source = """
{
name: "mark-and-sweep",
collectInterval: 10000,
}
- """);
+ """;
- var config = GcConfig.fromJson5(Json5ObjectWithSource.parse(source));
+ var config = parseGcConfig(source);
assertThat(config, instanceOf(
GcMarkAndSweepConfig.class,
has("collectInterval", x -> x.collectInterval(), equalTo(OptionalLong.of(10000L)))
));
}
+
+ private GcConfig parseGcConfig(String text) {
+ var sourceText = SourceText.fromString("<string>", text);
+ return GcConfig.fromJson5(Json5ObjectWithSource.parse(sourceText));
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java b/src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java
index 551c29d6..d867fd71 100644
--- a/src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java
+++ b/src/test/java/org/shedlang/compiler/config/GcMarkAndSweepConfigTests.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.config;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.config.json.Json5ObjectWithSource;
-import org.shedlang.compiler.sources.Sources;
+import org.zwobble.sourcetext.SourceText;
import java.util.OptionalLong;
@@ -13,9 +13,9 @@ import static org.zwobble.precisely.Matchers.has;
public class GcMarkAndSweepConfigTests {
@Test
public void collectIntervalCanBeMissing() {
- var source = Sources.string("{}");
+ var sourceText = SourceText.fromString("<string>", "{}");
- var config = GcMarkAndSweepConfig.fromJson5(Json5ObjectWithSource.parse(source));
+ var config = GcMarkAndSweepConfig.fromJson5(Json5ObjectWithSource.parse(sourceText));
assertThat(config, has(
"collectInterval",
@@ -26,7 +26,7 @@ public class GcMarkAndSweepConfigTests {
@Test
public void additionalFieldsCanBeUsedBySpecificGcConfig() {
- var source = Sources.string("""
+ var source = SourceText.fromString("<string>", """
{
name: "mark-and-sweep",
collectInterval: 10000,
diff --git a/src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java b/src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java
index d7e5ac6f..c923e654 100644
--- a/src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java
+++ b/src/test/java/org/shedlang/compiler/config/ProfileConfigTests.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.config;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.config.json.Json5ObjectWithSource;
-import org.shedlang.compiler.sources.Sources;
+import org.zwobble.sourcetext.SourceText;
import static org.zwobble.precisely.AssertThat.assertThat;
import static org.zwobble.precisely.Matchers.*;
@@ -10,42 +10,42 @@ import static org.zwobble.precisely.Matchers.*;
public class ProfileConfigTests {
@Test
public void canParseProfileConfigWithName() {
- var source = Sources.string("""
+ var source = """
{
name: "one",
}
- """);
+ """;
- var config = ProfileConfig.fromJson5(Json5ObjectWithSource.parse(source));
+ var config = parseProfileConfig(source);
assertThat(config, has("name", x -> x.name(), equalTo("one")));
}
@Test
public void canParseProfileConfigWithoutGc() {
- var source = Sources.string("""
+ var source = """
{
name: "one",
}
- """);
+ """;
- var config = ProfileConfig.fromJson5(Json5ObjectWithSource.parse(source));
+ var config = parseProfileConfig(source);
assertThat(config, has("name", x -> x.gc(), isOptionalEmpty()));
}
@Test
public void canParseProfileConfigWithGc() {
- var source = Sources.string("""
+ var source = """
{
name: "one",
gc: {
"name": "bump",
},
}
- """);
+ """;
- var config = ProfileConfig.fromJson5(Json5ObjectWithSource.parse(source));
+ var config = parseProfileConfig(source);
assertThat(config, has(
"gc",
@@ -53,4 +53,9 @@ public class ProfileConfigTests {
isOptionalOf(equalTo(GcConfig.BUMP))
));
}
+
+ private ProfileConfig parseProfileConfig(String text) {
+ var sourceText = SourceText.fromString("<string>", text);
+ return ProfileConfig.fromJson5(Json5ObjectWithSource.parse(sourceText));
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java b/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java
index 2a852f98..449dd9ff 100644
--- a/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java
+++ b/src/test/java/org/shedlang/compiler/config/ProjectConfigTests.java
@@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test;
import org.shedlang.compiler.config.errors.ConfigError;
import org.shedlang.compiler.config.errors.Json5SyntaxConfigError;
import org.shedlang.compiler.types.NamespaceName;
+import org.zwobble.sourcetext.SourceText;
import java.nio.file.Path;
@@ -18,7 +19,7 @@ public class ProjectConfigTests {
public void whenProjectConfigHasSyntaxErrorsOnFirstLineThenErrorIsThrown() {
var error = assertThrows(
Json5SyntaxConfigError.class,
- () -> ProjectConfig.fromString(PROJECT_PATH, "[1] ]1")
+ () -> parseProjectConfig("[1] ]1")
);
assertThat(error.getMessage(), equalTo("Expected end of document, but was ']'"));
@@ -33,7 +34,7 @@ public class ProjectConfigTests {
public void whenProjectConfigHasSyntaxErrorsOnNonFirstLineThenErrorIsThrown() {
var error = assertThrows(
Json5SyntaxConfigError.class,
- () -> ProjectConfig.fromString(PROJECT_PATH, "[\n1\n]\n 2")
+ () -> parseProjectConfig("[\n1\n]\n 2")
);
assertThat(error.getMessage(), equalTo("Expected end of document, but was number '2'"));
@@ -46,14 +47,14 @@ public class ProjectConfigTests {
@Test
public void canParseProjectConfigWithNoBins() {
- var config = ProjectConfig.fromString(PROJECT_PATH, "{}");
+ var config = parseProjectConfig("{}");
assertThat(config.bins(), isSequence());
}
@Test
public void canParseProjectConfigWithBins() {
- var config = ProjectConfig.fromString(PROJECT_PATH, """
+ var config = parseProjectConfig("""
{
bins: [
{
@@ -86,7 +87,7 @@ public class ProjectConfigTests {
public void whenProjectConfigHasBinsThatArentArrayThenErrorIsThrown() {
var error = assertThrows(
ConfigError.class,
- () -> ProjectConfig.fromString(PROJECT_PATH, """
+ () -> parseProjectConfig("""
{bins: true}"""
)
);
@@ -103,7 +104,7 @@ public class ProjectConfigTests {
public void whenProjectConfigHasBinThatIsntObjectThenErrorIsThrown() {
var error = assertThrows(
ConfigError.class,
- () -> ProjectConfig.fromString(PROJECT_PATH, """
+ () -> parseProjectConfig("""
{
bins: [1],
}"""
@@ -120,14 +121,14 @@ public class ProjectConfigTests {
@Test
public void canParseProjectConfigWithNoExamples() {
- var config = ProjectConfig.fromString(PROJECT_PATH, "{}");
+ var config = parseProjectConfig("{}");
assertThat(config.examples(), isSequence());
}
@Test
public void canParseProjectConfigWithExamples() {
- var config = ProjectConfig.fromString(PROJECT_PATH, """
+ var config = parseProjectConfig("""
{
examples: [
{bin: "one"},
@@ -152,7 +153,7 @@ public class ProjectConfigTests {
public void whenProjectConfigHasExamplesThatArentArrayThenErrorIsThrown() {
var error = assertThrows(
ConfigError.class,
- () -> ProjectConfig.fromString(PROJECT_PATH, """
+ () -> parseProjectConfig("""
{examples: true}"""
)
);
@@ -169,7 +170,7 @@ public class ProjectConfigTests {
public void whenProjectConfigHasExampleThatIsntObjectThenErrorIsThrown() {
var error = assertThrows(
ConfigError.class,
- () -> ProjectConfig.fromString(PROJECT_PATH, """
+ () -> parseProjectConfig("""
{
examples: [1],
}"""
@@ -186,14 +187,14 @@ public class ProjectConfigTests {
@Test
public void canParseProjectConfigWithNoProfiles() {
- var config = ProjectConfig.fromString(PROJECT_PATH, "{}");
+ var config = parseProjectConfig("{}");
assertThat(config.profiles(), isSequence());
}
@Test
public void canParseProjectConfigWithProfiles() {
- var config = ProjectConfig.fromString(PROJECT_PATH, """
+ var config = parseProjectConfig("""
{
profiles: [
{name: "one"},
@@ -218,7 +219,7 @@ public class ProjectConfigTests {
public void whenProjectConfigHasProfilesThatArentArrayThenErrorIsThrown() {
var error = assertThrows(
ConfigError.class,
- () -> ProjectConfig.fromString(PROJECT_PATH, """
+ () -> parseProjectConfig("""
{profiles: true}"""
)
);
@@ -235,7 +236,7 @@ public class ProjectConfigTests {
public void whenProjectConfigHasProfileThatIsntObjectThenErrorIsThrown() {
var error = assertThrows(
ConfigError.class,
- () -> ProjectConfig.fromString(PROJECT_PATH, """
+ () -> parseProjectConfig("""
{
profiles: [1],
}"""
@@ -249,4 +250,9 @@ public class ProjectConfigTests {
^"""
));
}
+
+ private ProjectConfig parseProjectConfig(String text) {
+ var sourceText = SourceText.fromString("<string>", text);
+ return ProjectConfig.fromSourceText(PROJECT_PATH, sourceText);
+ }
}
diff --git a/src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java b/src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java
index 112a45bc..15946c26 100644
--- a/src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java
+++ b/src/test/java/org/shedlang/compiler/config/json/Json5ObjectWithSourceTests.java
@@ -2,19 +2,19 @@ package org.shedlang.compiler.config.json;
import org.junit.jupiter.api.Test;
import org.shedlang.compiler.config.errors.ConfigError;
-import org.shedlang.compiler.sources.Sources;
+import org.zwobble.sourcetext.SourceText;
import java.util.Optional;
import java.util.OptionalLong;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.zwobble.precisely.AssertThat.assertThat;
-import static org.zwobble.precisely.Matchers.*;
+import static org.zwobble.precisely.Matchers.equalTo;
public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsMissingThenGetLongThrowsError() {
- var source = Sources.string("""
+ var source = """
{
a: {
b: [
@@ -23,8 +23,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var error = assertThrows(
ConfigError.class,
@@ -47,7 +47,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsNotNumberFiniteThenGetLongThrowsError() {
- var source = Sources.string("""
+ var source = """
{
a: {
b: [
@@ -56,8 +56,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var error = assertThrows(
ConfigError.class,
@@ -80,7 +80,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsFiniteNumberButIsNotLongThenGetLongThrowsError() {
- var source = Sources.string("""
+ var source = """
{
a: {
b: [
@@ -89,8 +89,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var error = assertThrows(
ConfigError.class,
@@ -113,7 +113,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsLongThenGetLongReturnsValue() {
- var source = Sources.string("""
+ var source = """
{
a: {
b: [
@@ -122,8 +122,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var result = object
.getObject("a")
@@ -137,7 +137,7 @@ public class Json5ObjectWithSourceTests {
}
@Test
public void whenMemberIsMissingThenGetLongOrNoneReturnsEmptyOptional() {
- var source = Sources.string("""
+ var source = """
{
a: {
b: [
@@ -146,8 +146,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var result = object
.getObject("a")
@@ -162,7 +162,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsNotLongThenGetLongOrNoneThrowsError() {
- var source = Sources.string("""
+ var source = """
{
a: {
b: [
@@ -171,8 +171,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var error = assertThrows(
ConfigError.class,
@@ -195,7 +195,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsLongOrNoneThenGetLongReturnsValue() {
- var source = Sources.string("""
+ var source = """
{
a: {
b: [
@@ -204,8 +204,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var result = object
.getObject("a")
@@ -220,7 +220,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsMissingThenGetStringThrowsError() {
- var source = Sources.string("""
+ var source = """
{
shed: {
bins: [
@@ -229,8 +229,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var error = assertThrows(
ConfigError.class,
@@ -253,7 +253,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsNotStringThenGetStringThrowsError() {
- var source = Sources.string("""
+ var source = """
{
shed: {
bins: [
@@ -262,8 +262,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var error = assertThrows(
ConfigError.class,
@@ -286,7 +286,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsStringThenGetStringReturnsValue() {
- var source = Sources.string("""
+ var source = """
{
shed: {
bins: [
@@ -295,8 +295,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var result = object
.getObject("shed")
@@ -307,7 +307,7 @@ public class Json5ObjectWithSourceTests {
.getString("name");
assertThat(result.value(), equalTo("two"));
- assertThat(result.source().describe(), equalTo(
+ assertThat(result.sourceRange().describe(), equalTo(
"""
<string>:5:20
{name: "two"},
@@ -317,7 +317,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsMissingThenGetStringOrNoneReturnsEmptyOptional() {
- var source = Sources.string("""
+ var source = """
{
shed: {
bins: [
@@ -326,8 +326,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var result = object
.getObject("shed")
@@ -342,7 +342,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsNotStringThenGetStringOrNoneThrowsError() {
- var source = Sources.string("""
+ var source = """
{
shed: {
bins: [
@@ -351,8 +351,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var error = assertThrows(
ConfigError.class,
@@ -375,7 +375,7 @@ public class Json5ObjectWithSourceTests {
@Test
public void whenMemberIsStringThenGetStringOrNoneReturnsValue() {
- var source = Sources.string("""
+ var source = """
{
shed: {
bins: [
@@ -384,8 +384,8 @@ public class Json5ObjectWithSourceTests {
],
},
}
- """);
- var object = Json5ObjectWithSource.parse(source);
+ """;
+ var object = parseJson5Object(source);
var result = object
.getObject("shed")
@@ -396,11 +396,16 @@ public class Json5ObjectWithSourceTests {
.getStringOrNone("name");
assertThat(result.orElseThrow().value(), equalTo("two"));
- assertThat(result.orElseThrow().source().describe(), equalTo(
+ assertThat(result.orElseThrow().sourceRange().describe(), equalTo(
"""
<string>:5:20
{name: "two"},
^^^^^"""
));
}
+
+ private Json5ObjectWithSource parseJson5Object(String text) {
+ var sourceText = SourceText.fromString("<string>", text);
+ return Json5ObjectWithSource.parse(sourceText);
+ }
}