| Feature | Addresses |
|---|---|
Suppressed exception access on ThrowableCheck |
Truth #717 |
Primitive array checks (int[], double[], long[]) |
Truth #571 |
| BigDecimal / BigInteger assertions | Truth #540 |
| Stream assertions | Truth #342 |
| Regex match group assertions | Unique |
| ZonedDateTime / OffsetDateTime assertions | Unique |
| UUID assertions | Unique |
Byte array assertions (toHex(), toBase64() extractors) |
Unique |
| Sealed class permit assertions | Unique (Java 17+) |
satisfies(Predicate) / matches(Predicate) / satisfies(Consumer) |
Escape hatch for one-off assertions |
RealityAssertions.assertThat() alias |
Migration from Truth/AssertJ |
Migration guides (MIGRATION.md) |
Truth & AssertJ |
| Java 17+ support | Wider adoption |
| JaCoCo coverage enforcement (95% floor) + Codecov badge | Quality gates |
CHANGELOG.md |
Release hygiene |
| RFC 4180-compliant CSV parser | Quoted fields, escaped quotes, unclosed-quote detection |
| XXE-safe XML parsing (cached factories) | Blocks DOCTYPE, external entities |
| JSON array-index and bracket-key navigation | users[0].name, db["connection.string"] |
throwsExactly() vs throwsInstanceOf() |
Exact-type vs subclass exception matching |
Thread-safe soft assertions (CopyOnWriteArrayList) |
Parallel-safe assertion collection |
Null-safe expected parameters (Objects.equals throughout) |
Zero NPE risk |
Locale-safe containsIgnoringCase() |
Uses Locale.ROOT |
Frequency-map containsExactlyInAnyOrder |
Accurate duplicate-count comparison |
realitycheck-ai — LLM/AI Response AssertionsStatus: Planned for a future release. This module does not ship with v1.0.
A new module for asserting on non-deterministic LLM/AI outputs — a category that neither Truth nor AssertJ address. Designed with pluggable SPIs (embedding providers, tokenizers, judges) so you bring your own AI provider with zero mandatory dependencies.
assertThatResponse(llmOutput)
.isSemanticallyCloseTo("The capital of France is Paris", 0.85)
.doesNotContainPII()
.hasLengthBetween(50, 500);
assertThatResponse(llmOutput)
.extractJson() // chains into JsonCheck
.hasField("answer")
.fieldEquals("answer", "Paris");
See ROADMAP_AI.md for the full API design, architecture, and design principles.
Ideas under consideration for post-v1 releases. No commitments, no timelines.
| Idea | Notes |
|---|---|
realitycheck-ai |
LLM/AI response assertions — see Upcoming above |
| gRPC / Protobuf assertions | Field-level assertion on proto messages |
| Database assertions | Row/column assertions via JDBC |
| Async/reactive support | Mono, Flux, CompletableFuture chains |
| IDE plugin | Inline failure previews in IntelliJ |
Have a feature request? Open an issue.