From deaa7a250bf6a8b5cc266958487e89de6273fe64 Mon Sep 17 00:00:00 2001 From: Reed von Redwitz Date: Fri, 14 Aug 2026 04:59:03 +0200 Subject: [PATCH] fix(base-foundation, base-io): add toString() to Exceptional and PathSet --- .../build/base/foundation/Exceptional.java | 11 ++++++ .../base/foundation/ExceptionalTests.java | 15 ++++++++ .../src/main/java/build/base/io/PathSet.java | 2 +- .../java/build/base/io/PathSetBuilder.java | 5 +++ .../test/java/build/base/io/PathSetTests.java | 38 +++++++++++++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) diff --git a/base-foundation/src/main/java/build/base/foundation/Exceptional.java b/base-foundation/src/main/java/build/base/foundation/Exceptional.java index 0d39764..f970169 100644 --- a/base-foundation/src/main/java/build/base/foundation/Exceptional.java +++ b/base-foundation/src/main/java/build/base/foundation/Exceptional.java @@ -449,6 +449,17 @@ public int hashCode() { return Objects.hash(this.value, this.exception); } + @Override + public String toString() { + if (this.value != null) { + return "Exceptional[" + this.value + "]"; + } else if (this.exception != null) { + return "Exceptional[" + this.exception + "]"; + } else { + return "Exceptional.empty"; + } + } + /** * Obtains the empty {@link Exceptional}, without a value and a {@link Exception}. * diff --git a/base-foundation/src/test/java/build/base/foundation/ExceptionalTests.java b/base-foundation/src/test/java/build/base/foundation/ExceptionalTests.java index 8fc2655..2a00030 100644 --- a/base-foundation/src/test/java/build/base/foundation/ExceptionalTests.java +++ b/base-foundation/src/test/java/build/base/foundation/ExceptionalTests.java @@ -787,4 +787,19 @@ void shouldSeeCausingExceptionInExceptional() { .isEqualTo("Not supported mate"); } } + + /** + * Ensure {@link Exceptional#toString()} renders the value, exception, or empty state. + */ + @Test + void shouldRenderToString() { + assertThat(Exceptional.of(42).toString()) + .isEqualTo("Exceptional[42]"); + + assertThat(Exceptional.ofException(new IllegalStateException("boom")).toString()) + .isEqualTo("Exceptional[java.lang.IllegalStateException: boom]"); + + assertThat(Exceptional.empty().toString()) + .isEqualTo("Exceptional.empty"); + } } diff --git a/base-io/src/main/java/build/base/io/PathSet.java b/base-io/src/main/java/build/base/io/PathSet.java index 5c58b40..ca50d54 100644 --- a/base-io/src/main/java/build/base/io/PathSet.java +++ b/base-io/src/main/java/build/base/io/PathSet.java @@ -178,7 +178,7 @@ public Iterator iterator() { @Override public String toString() { - return "PathSet.empty()"; + return "[]"; } } } diff --git a/base-io/src/main/java/build/base/io/PathSetBuilder.java b/base-io/src/main/java/build/base/io/PathSetBuilder.java index 59287ef..d3a6b5c 100644 --- a/base-io/src/main/java/build/base/io/PathSetBuilder.java +++ b/base-io/src/main/java/build/base/io/PathSetBuilder.java @@ -216,5 +216,10 @@ public boolean equals(final Object object) { public int hashCode() { return Objects.hash(this.paths); } + + @Override + public String toString() { + return this.paths.toString(); + } } } diff --git a/base-io/src/test/java/build/base/io/PathSetTests.java b/base-io/src/test/java/build/base/io/PathSetTests.java index 58140b8..cfb3707 100644 --- a/base-io/src/test/java/build/base/io/PathSetTests.java +++ b/base-io/src/test/java/build/base/io/PathSetTests.java @@ -279,4 +279,42 @@ void shouldComparePathSetsWithEquals() { assertThat(pathSet1.hashCode()) .isEqualTo(pathSet2.hashCode()); } + + /** + * Ensure {@link PathSet#toString()} renders the contained {@link Path}s. + */ + @Test + void shouldRenderToString() { + final var first = Paths.get("/usr/local/bin"); + final var second = Paths.get("/usr/bin"); + + final var pathSet = PathSetBuilder + .create(first, second) + .build(); + + assertThat(pathSet.toString()) + .isEqualTo(Stream.of(first, second).map(Path::toString).toList().toString()); + } + + /** + * Ensure an empty {@link PathSet#toString()} renders an empty list. + */ + @Test + void shouldRenderEmptyToString() { + final var pathSet = PathSetBuilder + .create() + .build(); + + assertThat(pathSet.toString()) + .isEqualTo("[]"); + } + + /** + * Ensure {@link PathSet#empty()} renders the same as an empty built {@link PathSet}. + */ + @Test + void shouldRenderEmptyPathSetToString() { + assertThat(PathSet.empty().toString()) + .isEqualTo("[]"); + } }