Changelog:
New features:
- Qualified enum constants read cleanly. When two enums share a constant name and Kotlin forces qualification (
OrderStatus.PENDING), the sentence rendered the camel-split qualifier as noise words ("the order is order status PENDING"). A qualified reference whose qualifier provably resolves (via the file's imports) to an enum constant or nested object — including sealed-class data objects (OrderStatus.Pending) — now renders just the member name as a value token, with the type's simple name as a hover hint. Unresolvable qualifiers render as before. Kotlin and Java (#180). - Chained references through value containers.
@RenderedValueContainernow works on test-method parameters as well as fields, and references through the container (useCase.stub,useCase.ref.name) render as resolved values, gated on the member carrying@RenderedValue. The chain may be followed by a call taking arguments —whenever(useCase.stub.sends(request))renders the resolved stub value followed by "sends" and the request as ordinary sentence words, where previously the whole phrase collapsed into the container's toString. Kotlin covers.and?.chains; Java covers the chain-before-call shape. Display values come from a registered value renderer or the member'stoString. - Fixture values from shared objects:
by fixtures(fx). A Kotlin property delegate that resolves a fixture's value from the currently executing test's context on every access. Shared parameterised-test data (e.g.@MethodSourceuse-case objects) can expose per-invocation fixture values as plain properties with no mutation of shared state; a single instance is safe under parallel execution, and access outside an active test fails with an error naming the property and fixture. - Fixture-delegated properties render as fixture tokens. A reference terminating in a
by fixtures(...)property — via a container chain, a bare reference insidewith(container) { }, or a property on the test class itself — renders with the same styling and highlighting as a directfixtures[...]reference. Paths continuing past the delegated property render as derived values as before.
Fixes:
- Diagram labels keep natural glyph shapes. The 0.8.15 Safari fix swapped every diagram
<text>element tolengthAdjust="spacingAndGlyphs", which scales glyphs horizontally to fit PlantUML's computedtextLength— short labels (e.g. 4-character participant names) read as faux-bold where browser font metrics diverge from PlantUML's. The Safari corruption (#174) is now fixed at source instead: consecutive whitespace in sequence diagram labels (interaction names, dividers, time markers, participant labels, group names) is collapsed to a single space before PlantUML measures them, so the renderedtextLengthmatches what the browser draws and the SVG keeps PlantUML's nativelengthAdjust="spacing"(#179). A group namedSetupwith stray whitespace also now receives the setup colour rather than the test-group gold. - Delegated Kotlin properties in rendered paths. A path segment backed by a property delegate (
by lazy, a customReadOnlyProperty) resolved to the delegate object itself, rendering its type name (e.g. "Read Only Property") instead of the value. Delegated properties now resolve through their getter, including private delegated properties.
Changed:
- Gradle 9.7.0. Wrapper bump from 9.6.1; no API changes.