| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-06-15 | 13.4 kB | |
| v6.2.0 source code.tar.gz | 2026-06-15 | 32.4 MB | |
| v6.2.0 source code.zip | 2026-06-15 | 35.0 MB | |
| Totals: 3 Items | 67.4 MB | 0 | |
✨ Features
New matchers / assertions
comparables.shouldBeAtLeast — @AlexCue987 (#5831) MultipleMatcherResult for combining multiple matcher results — @sksamuel (#5723) shouldContainExactCopies for lists — @AlexCue987 (#5913) Character matchers — @JordanLongstaff (#5921) shouldBeSingle matcher — @sksamuel (#6028) shouldContainRepeats for strings — @AlexCue987 (#6004) Infix form for inspectors — @alfonsoristorato (#5920) Block-asserting overload for shouldBeFailure — @alfonsoristorato (#5927) Per-call Eq overrides via a withEqs DSL — @PreAgile (#6010) Per-element data class diffs in collection comparisons — @PreAgile (#5835)
Framework / API
Run data tests singularly — @alfonsoristorato (#5574) New JVM test-suites module (deprecates JunitXmlReporter) — @sksamuel (#5801) Support isolation modes on all KMP platforms — @sksamuel (#5806) Breadcrumbs support for Kotest spec files — @sksamuel (#5793) Type-safe test metadata API — @PreAgile (#5905) Public API for creating custom styles — @sksamuel (#5814) Support multiple --test args joined by semicolon in KOTEST_INCLUDE_PATTERN — @sksamuel (#5922) Extend life of deprecated Test containers and add onStart — @sksamuel (#5896) Make Arb.stringPattern multiplatform — @wilmveel (#6008) Complete the permutations module — @sksamuel (#6016) Add Wasm WASI target to kotest-property and kotest-property-permutations — @jsoizo (#6129) Make fibonacci interval functions public — @mvanhorn (#6135) Add Android instrumented test module — @sksamuel (#5900)
IntelliJ plugin
N-times setter for test invocation — @alfonsoristorato (#5815) Invocation count on the Kotest producer — @alfonsoristorato (#5837) Singular data-test run on the Kotest producer — @alfonsoristorato (#5843) Amper-aware run-configuration producer — @sksamuel (#5999)
🐛 Fixes
Property testing / Arb / Exhaustive / shrinkers
Integer shrinkers proposing wrap-around values near MIN — @sksamuel (#5931) Arb.ipAddressV4 couldn't produce 255 in any octet — @sksamuel (#5938) Arb.multiple couldn't produce the largest multiple of k ≤ max — @sksamuel (#5939) Arb.map maxSize off-by-one and minSize == maxSize crash — @sksamuel (#5937) Arb.map half-open nextInt for targetSize — @sksamuel (#5946) Arb.factor crash on k=1 / never producing k — @sksamuel (#5959) Arb.date never producing Dec 31 in leap years — @sksamuel (#5949) Arb.intRange overflow when domain.last == Int.MAX_VALUE — @sksamuel (#5945) Arb.subsequence only producing prefixes — @sksamuel (#5958) Arb.orNull(0.0) still producing nulls via boundary draw — @sksamuel (#5936) Arb.slice throwing on empty input list — @sksamuel (#6044) Codepoint.lowSurrogate using ushr instead of and — @sksamuel (#5935) IntRangeShrinker overflow on Int.MAX_VALUE singleton — @sksamuel (#5957) DurationShrinker discarding all shrinks if any candidate is Duration.ZERO — @sksamuel (#5955) Exhaustive.merge truncating to the shorter length — @sksamuel (#5956) Exhaustive.azstring crash on size-0 ranges — @sksamuel (#5947) List.edgecase recursing on the unshuffled tail — @sksamuel (#5950); silently dropping un-tested arbs — @sksamuel (#5930) orNull.edgecase returning null instead of Sample(null) — @sksamuel (#5948) PropTestConfig.maxDiscardPercentage ignoring the global setting — @sksamuel (#5951) Propagate expected/actual diff values to property-test errors — @sksamuel (#6009) Degenerate ranges / inclusive max bounds in yearMonth/localTime/double/float arbs — @sksamuel (#6120) Honor discardCheckThreshold in max-discard check — @sksamuel (#6126) Arb.list repeated-element edgecase now actually repeats a single element — @sksamuel (#6128) Descriptive error when Arb.distinct exhausts attempts — @sksamuel (#6122) Dead AssertionError branch in PropertyErrorMessageBuilder — @sksamuel (#6065)
Spec DSLs / test naming / prefixes
ShouldSpec nested context missing "context " prefix — @sksamuel (#5979) FunSpec nested context missing "context " prefix — @sksamuel (#5984) FreeSpec config leaf test registered as container — @sksamuel (#5966) DescribeSpec root it/fit/xit(name) always DISABLED — @sksamuel (#5965) it/fit/xit(name, lambda) missing prefix/wrong receiver — @sksamuel (#5978) context/fcontext no-lambda missing "Context: " prefix — @sksamuel (#5974) WordSpec config-form should producing " when" suffix — @sksamuel (#5964); addWhen/addShould missing withDefaultAffixes — @sksamuel (#5995) ExpectSpec root expect leaf wrapping in container scope — @sksamuel (#5983) BehaviorSpec missing f* overloads — @sksamuel (#5988) given/context test-lambda missing withDefaultAffixes — @sksamuel (#5975) FeatureSpec rename xfscenario → fscenario — @sksamuel (#5972) scenario leaf running with wrong scope — @sksamuel (#6062) truncateTestName splitting UTF-16 surrogate pairs — @sksamuel (#5990) Honor WithDataTestName.dataTestName() on all platforms — @sksamuel (#6064) Data test run including sibling regular containers — @alfonsoristorato (#6033) Materializer dropping xmethod on nested TestCases — @sksamuel (#5992) Descriptor.depth() off-by-one — @sksamuel (#6123)
Matchers / assertions / messages
CompletableFuture cancelled() matcher reporting "completed" — @sksamuel (#5960) URI/URL parameter matcher NPEs and fragment/ref message typos — @sksamuel (#5961) haveMaxLength negated message reporting wrong minimum length — @sksamuel (#5941) shouldNotBeRegex calling positive shouldEqualRegex — @sksamuel (#5952) kotlinx-datetime Instant before/after negated message swap — @sksamuel (#5953) containAllInAnyOrder/containExactlyInAnyOrder mislabeling missing elements — @sksamuel (#5942) containsInOrder "found before" slice in failure message — @sksamuel (#6054) beUpperCase/beLowerCase for non-String CharSequence — @sksamuel (#6055) shouldBeEmpty crashing on dynamic iterables — @sksamuel (#6025) Inverted Path/File shouldNotEqualJson config-block overload — @sksamuel (#6068) beEqualToUsingFields message listing wrong fields — @sksamuel (#6066) MapEq differing-key computation via Eq typeclass, not raw == — @sksamuel (#6067) NumberEq cross-type comparisons (Double/Long, Float/Long, etc.) — @sksamuel (#6087) Integer overflow in shouldBeWithin near MAX_VALUE — @sksamuel (#6088) haveElementAt swapped expected/actual + negative index handling — @sksamuel (#6125) Path containNFiles failing gracefully on non-directory — @sksamuel (#6077) Path haveExtension/haveNameWithoutExtension NPE on root paths — @sksamuel (#6078) Restore large-string diff output in StringEq.diff() — @sksamuel (#5944) Make clear what the actual string value is — @sschuberth (#6110) escapeString in Diff producing literal control chars — @sksamuel (#5943) Validate tolerance / handle infinities in Float plusOrMinus — @sksamuel (#6124) Integer enum schema values never matching JSON numbers — @sksamuel (#6056) retry exception classification + cap backoff at remaining timeout — @sksamuel (#6114)
Engine / runners / discovery / listeners
Failfast in sibling contexts via per-scope CoroutineContext tracking — @sksamuel (#5774) Coroutines probe dump with background coroutines — @sksamuel (#5894) DataClassEq comparator — @scottdfedorov (#5602) KSP processor including abstract/sealed spec classes — @sksamuel (#5987) duplicate specs across KSP rounds — @sksamuel (#6115) AnnotationSpec @Test(expected=...) requiring exact class match — @sksamuel (#5993) JUnit4RuleExtension running test outside rule chain when rule skips — @sksamuel (#5986) JUnit4 runner not firing testIgnored events — @sksamuel (#5967) JUnit listeners collapsing MultipleExceptions to a single placeholder — @sksamuel (#5976) testIgnored creating duplicate descriptor when test already started — @sksamuel (#5982) Discovery allow_private respecting presence not value — @sksamuel (#5980) duplicate specs for ClassSelector + UniqueIdSelector — @sksamuel (#5981) failOnIgnoredTests never triggering due to per-spec results reset — @sksamuel (#5968); count TestAbortedException-skipped tests — @sksamuel (#6059) InvocationTimeoutInterceptor missing WasmWasi guard — @sksamuel (#5991) Tag expressions: OR-of-exclusions over-permissive — @sksamuel (#5973) parser precedence & over | — @sksamuel (#6089) three-valued OR identity — @sksamuel (#6090) parenthesize operands in combine — @sksamuel (#6046) isSubtreeComplete checking each child result, not the parent — @sksamuel (#6050) CollectingTestEngineListener cross-thread-safe error state — @sksamuel (#6052) FailureFirstSorter comparator contract violation — @sksamuel (#6070) ExtensionStore untyped get key mismatch / getOrComputeIfAbsent not storing — @sksamuel (#6092) Propagate beforeInvocation/afterInvocation listener failures — @sksamuel (#6041) Cancel timeout coroutine when block completes/fails — @sksamuel (#6051) cancel wall-clock watchdog when block throws — @sksamuel (#6113) PropertyOrder.Strict comparing values even when key sets differ — @sksamuel (#6043) JvmReflection caches thread-safe — @sksamuel (#6086); FailFastScopeTracker thread-safe — @sksamuel (#6069) Invoke package config extensions for spec-level callbacks — @sksamuel (#6118) Permutation.iteration always 0 — @sksamuel (#6057) preserve duration & discardCheckThreshold in PermutationConfiguration.from() — @sksamuel (#6045) Detect Spec subclasses in KotestFileVisitor instead of a name list — @sksamuel (#6036) Register shouldBe with Power Assert correctly — @sksamuel (#6071) until() default fixes — @sksamuel (#6058); regression revert — @sksamuel (#6093) eventually listener default in jsTest — @sksamuel (#5841) wasmJsD8Test timeout failure when tests use delay() — @sksamuel (#5827) Native IR crash from shadowed OnlyInputTypes — @PreAgile (#5828) Only override ignored flags for test-level run — @sksamuel (#5824) Replace periods with wildcards in GradleTestFilterBuilder — @sksamuel (#5842) replace interpolated entries with wildcards in asString() — @sksamuel (#5844) Gradle ClassMethodNameFilterUtils.reset only clearing commandLine patterns — @sksamuel (#5804) spec-prefix match must respect path boundary — @sksamuel (#6082) Spec/Test platform producers creating a new run config every run — @sksamuel (#5998) RunnerOs NPE when RUNNER_OS unset — @sksamuel (#6091) LazyJvmAssertionError computing its message lazily — @sksamuel (#6080) SpecRefExecutor removing @ApplyExtension extensions in a finally block — @sksamuel (#6040)
Extensions / resource handling
Close pooled Connection + HikariDataSource in SharedJdbcDatabaseContainerExtension — @sksamuel (#6049); close HikariDataSource in project/spec extensions — @sksamuel (#6060, [#6048]); release lock on mount exception — @sksamuel (#6047, [#6039]); release lock on Compose container start failure — @sksamuel (#6116) Close the InputStream in KotestPropertiesLoader.loadSystemProps — @sksamuel (#6053) Null the server field after stopping in MockServerListener.afterSpec — @sksamuel (#6061) Spring: forward test exception to test context manager — @sksamuel (#6102); restore original System.out/err for nested tests — @sksamuel (#6117); remove leftover debug println — @sksamuel (#6121); fix inverted kotest.listener.spring.ignore.warning boolean — @sksamuel (#6083) Avoid unsafe cast of throwable cause in Allure spec-init failure reporting — @sksamuel (#6072)
Reporting / output / TeamCity / IntelliJ
Pass exception to TEST_FAILED placeholder so TeamCity shows a failure — @alfonsoristorato (#5928) IntelliJ jump-to-source via locationUrl instead of displayName tag — @sksamuel (#5929); use correct producer from the custom IJ window — @alfonsoristorato (#5902) HtmlWriter flag error-only rows with failure CSS class — @sksamuel (#6074); HtmlReporter read results from configured build dir — @sksamuel (#6073) JunitXmlReportTestEngineListener reset accumulated state per spec — @sksamuel (#6042); keep ISO-8601 Z in JUnit XML timestamp — @sksamuel (#6085); queue specIgnored events in PinnedSpecTestEngineListener — @sksamuel (#6127) Leftover-seconds in console total-time summary — @sksamuel (#6084) shouldContainExactCopies param name — @AlexCue987 (#5918)
Typos
"shunk" → "shrunk" in shrink output — @sksamuel (#5932) "should not be be" double-word in date/time between matchers — @sksamuel (#5954) "should not should be" in beUpperCase/beLowerCase — @sksamuel (#5940) Javadoc shouldContainNotSlice → shouldNotContain… — @AlexCue987 (#5903)
📦 Dependency / toolchain updates
stacktrace-decoroutinator-jvm → v2.6.4 — @renovate[bot] (#5963) koin → v4.2.1 — @renovate[bot] (#5970) org.pitest:pitest → v1.23.1 — @renovate[bot] (#5969) jackson-module-kotlin → v2.21.3 — @renovate[bot] (#5962), then → v2.21.4 — @renovate[bot] (#6100) classgraph → v4.8.184 — @renovate[bot] (#6101) mockserver → v6.0.0 — @Kantis (#6017) KSP → 2.3.9 — @sksamuel (#6038) IntelliJ plugin IC-261 target → 2026.1.1 — @sksamuel (#5971) AGP → 9.0.0 final — @sschuberth (#6109)