Skip to content

0.9.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 23:12
· 6 commits to master since this release

Changelog:

The API freeze ahead of 1.0. The supported surface is now sealed by the compiler rather than by convention. See COMPATIBILITY.md for the policy and support matrix.

Added:

  • @Epic. Class or method level, rendered beside issues, filterable with epic: in the report. (#194)
  • Report overview page. A landing view per source with result, tag, package, epic/issue, duration, failure, interaction and density panels, every segment a filter. Shows wall clock vs total elapsed so you can see what parallel execution saves. (#195)
  • indices.json gains per-test epics, timing, interactions, participants, assertions and expandables fields, additive.
  • Replay links on issue badges. When a report is served with a replayUrl in its manifest, issue badges gain a replay glyph and a right-click menu offering the issue tracker and Replay filtered to that issue. Reports without the key render exactly as before.
  • @KensaInternalApi and @KensaExperimental. The first marks plumbing that is public only because Kensa spans Gradle modules: do not call it. The second marks features still being designed and open to feedback, currently the org-flow surfaces only.
  • COMPATIBILITY.md. What semver covers, what the two markers exclude, and the support matrix of Kensa version against required Kotlin and minimum JDK.

Breaking:

  • Implementation packages are now internal: dev.kensa.parse, dev.kensa.state, dev.kensa.output, dev.kensa.service, dev.kensa.util and the implementation parts of dev.kensa.context. The documented API is unaffected. internal has no bytecode equivalent, so Java consumers are not blocked from these types, but they are equally unsupported.
  • Upgrade core and the framework adapters together. Kotlin mangles the JVM names of internal functions, so a 0.9.0 core with an older kensa-junit5 / kensa-testng / kensa-kotest can fail at runtime rather than at compile time.
  • findAnnotationNames moved to a top-level dev.kensa.parse.kotlin.findAnnotationNames; KotlinParserDelegate.Companion is now internal. Affects custom framework adapters only.
  • @KensaInternalApi is an error, not a warning. The integration SPI (FrameworkDescriptor, KensaLifecycleManager, the invocation-context hooks) now requires @file:OptIn(dev.kensa.KensaInternalApi::class).
  • Configuration.issueTrackerUrl is now URL? defaulting to null, replacing a http://empty sentinel. Reading the property in Kotlin needs a null check; withIssueTrackerUrl is unchanged.

Fixes:

  • Parallel invocations of the same test method no longer lose data. The shared TestMethodContainer held non-concurrent collections, so parallel parameterised invocations could fail with a NoSuchElementException or NullPointerException. Both collections are now concurrent.
  • Registered value renderers are no longer bypassed for parameterised test arguments. The display-name label substitution ran before renderers; a registered ValueRenderer now wins (#189).
  • Empty string parameters render as "" instead of null in the invocation parameter matrix (#185, thanks to Michael Orr).
  • An unconfigured issue tracker no longer renders dead links. The sentinel default made @Issue badges link to http://empty/PROJ-123. The property is now omitted from the report config when unset, and reports written by earlier versions stop linking too (#191).
  • kensa.disable.output honours every value. Only a bare flag or =true disabled output; =1, =yes and the rest silently did nothing. Any value now disables, with =false as the escape hatch (#192).
  • Fixtures and outputs resolve inside polling blocks. Multi-assertion thenEventually { } and thenContinually { } run each check on another thread, which lost the test context, so by fixtures(...) delegates and ThenSpec outputs resolved to nothing inside a block. Hamkrest's single-assertion thenEventually lost it too, via Awaitility (#190).

Changed:

  • keyWords is now keywords in the DSL, matching the builder's withKeywords. keyWords remains as a deprecation (#193).
  • The Java builder reaches everything the Kotlin DSL does. KensaConfigurator gains withTitleText, withAntlrPredicationMode and withAntlrErrorListenerDisabled (#193).
  • sectionOrder validates against the Section enum. Each Section exactly once, and the error reports the rejected order (#193).
  • Tab services are supported API. Configuration.registerTabService and KensaTabServices no longer need an experimental opt-in.
  • TestContext and TestContextHolder are stable, documented as frozen rather than disclaimed in prose.