Improve Lazy.toString().

Added dedicated Lazy.toString() rendering the resolved value's ….toString() method but resorts to a constant [Unresolved] if it's not already resolved. An additional ….toString(Supplier<String>) allows to customize the fallback message if needed.

Fixes #2751.
This commit is contained in:
Oliver Drotbohm
2023-01-05 11:44:19 +01:00
parent 14919995ad
commit 6fd8ae4917
2 changed files with 57 additions and 0 deletions

View File

@@ -116,4 +116,35 @@ class LazyUnitTests {
assertThat(empty.or(reference).get()).isEqualTo(reference);
assertThat(empty.or(() -> reference).get()).isEqualTo(reference);
}
@Test // #2751
void doesNotResolveValueForToString() {
Supplier<Object> mock = mock(Supplier.class);
var lazy = Lazy.of(mock);
assertThat(lazy.toString()).isEqualTo(Lazy.UNRESOLVED);
verify(mock, never()).get();
lazy.getNullable();
assertThat(lazy.toString()).isNotEqualTo(Lazy.UNRESOLVED);
}
@Test // #2751
void usesFallbackForToStringOnUnresolvedInstance() {
Supplier<Object> mock = mock(Supplier.class);
var lazy = Lazy.of(mock);
var fallback = "fallback";
assertThat(lazy.toString(() -> fallback)).isEqualTo(fallback);
verify(mock, never()).get();
lazy.getNullable();
assertThat(lazy.toString(() -> fallback)).isNotEqualTo(fallback);
}
}