From 9fbae21aae934c373153aa542973be96ba4bc433 Mon Sep 17 00:00:00 2001 From: sksamuel Date: Tue, 20 Jan 2026 13:23:49 -0600 Subject: [PATCH 1/9] Update to Kotest 6.1.0 and refactor to align with updated API changes. --- jvm/example-kotest/build.gradle.kts | 1 + .../test/kotlin/com/example/kotest/KotestConfig.kt | 2 +- jvm/gradle.properties | 4 ++-- .../com/diffplug/selfie/junit5/SelfieExtension.kt | 12 ++++++------ .../kotlin/com/diffplug/selfie/kotest/FSOkio.kt | 14 ++++++++------ .../com/diffplug/selfie/kotest/SelfieExtension.kt | 10 +++++----- jvm/undertest-junit5-kotest/build.gradle | 1 + .../harness/gradle.properties | 2 +- .../undertest/junit5/JunitKotestProjectConfig.kt | 2 +- .../junit5/UT_KotestConcurrencyStressTest.kt | 5 ++++- 10 files changed, 30 insertions(+), 23 deletions(-) diff --git a/jvm/example-kotest/build.gradle.kts b/jvm/example-kotest/build.gradle.kts index 248917e0a..178f67c28 100644 --- a/jvm/example-kotest/build.gradle.kts +++ b/jvm/example-kotest/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { } tasks.test { useJUnitPlatform() + systemProperty("kotest.framework.config.fqn", "com.example.kotest.KotestConfig") environment(properties.filter { it.key == "selfie" || it.key == "OPENAI_API_KEY" }) inputs.files(fileTree("src/test") { include("**/*.ss") diff --git a/jvm/example-kotest/src/test/kotlin/com/example/kotest/KotestConfig.kt b/jvm/example-kotest/src/test/kotlin/com/example/kotest/KotestConfig.kt index c16584b60..901a2248b 100644 --- a/jvm/example-kotest/src/test/kotlin/com/example/kotest/KotestConfig.kt +++ b/jvm/example-kotest/src/test/kotlin/com/example/kotest/KotestConfig.kt @@ -3,5 +3,5 @@ package com.example.kotest import com.diffplug.selfie.kotest.SelfieExtension class KotestConfig : io.kotest.core.config.AbstractProjectConfig() { - override fun extensions() = listOf(SelfieExtension(this)) + override val extensions = listOf(SelfieExtension(this)) } \ No newline at end of file diff --git a/jvm/gradle.properties b/jvm/gradle.properties index 83dfda6f3..557243c9a 100644 --- a/jvm/gradle.properties +++ b/jvm/gradle.properties @@ -9,7 +9,7 @@ ver_JUNIT_PIONEER=2.3.0 ver_OKIO=3.16.0 ver_KOTLIN_TEST=2.0.0 ver_KOTLIN_SERIALIZATION=1.9.0 -# Kotest 5.6.0 is the oldest that we support -ver_KOTEST=5.6.0 +# Kotest 6.0.0 is the oldest that we support +ver_KOTEST=6.1.0 ver_JVM_TARGET=11 \ No newline at end of file diff --git a/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt b/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt index aed9aee40..062e5d7a9 100644 --- a/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt +++ b/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt @@ -24,7 +24,7 @@ import io.kotest.core.listeners.BeforeSpecListener import io.kotest.core.listeners.FinalizeSpecListener import io.kotest.core.spec.Spec import io.kotest.core.test.TestCase -import io.kotest.core.test.TestResult +import io.kotest.engine.test.TestResult import kotlin.reflect.KClass import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.withContext @@ -43,11 +43,11 @@ class SelfieExtension(projectConfig: AbstractProjectConfig) : execute: suspend (TestCase) -> TestResult ): TestResult { val file = SnapshotSystemJUnit5.forClass(testCase.spec::class.java.name) - val coroutineLocal = CoroutineDiskStorage(DiskStorageJUnit5(file, testCase.name.testName)) + val coroutineLocal = CoroutineDiskStorage(DiskStorageJUnit5(file, testCase.name.name)) return withContext(currentCoroutineContext() + coroutineLocal) { - file.startTest(testCase.name.testName, false) + file.startTest(testCase.name.name, false) val result = execute(testCase) - file.finishedTestWithSuccess(testCase.name.testName, false, result.isSuccess) + file.finishedTestWithSuccess(testCase.name.name, false, result.isSuccess) result } } @@ -58,8 +58,8 @@ class SelfieExtension(projectConfig: AbstractProjectConfig) : val file = SnapshotSystemJUnit5.forClass(kclass.java.name) results.entries.forEach { if (it.value.isIgnored) { - file.startTest(it.key.name.testName, false) - file.finishedTestWithSuccess(it.key.name.testName, false, false) + file.startTest(it.key.name.name, false) + file.finishedTestWithSuccess(it.key.name.name, false, false) } } SnapshotSystemJUnit5.forClass(kclass.java.name) diff --git a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/FSOkio.kt b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/FSOkio.kt index 366fc526a..41187509f 100644 --- a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/FSOkio.kt +++ b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/FSOkio.kt @@ -18,13 +18,13 @@ package com.diffplug.selfie.kotest import com.diffplug.selfie.guts.FS import com.diffplug.selfie.guts.TypedPath import io.kotest.assertions.Actual -import io.kotest.assertions.Exceptions +import io.kotest.assertions.AssertionErrorBuilder import io.kotest.assertions.Expected import io.kotest.assertions.print.Printed import okio.FileSystem import okio.Path.Companion.toPath -expect internal val FS_SYSTEM: FileSystem +internal expect val FS_SYSTEM: FileSystem internal fun TypedPath.toPath(): okio.Path = absolutePath.toPath() internal object FSOkio : FS { @@ -42,7 +42,7 @@ internal object FSOkio : FS { FS_SYSTEM.write(typedPath.toPath()) { write(content) } /** Creates an assertion failed exception to throw. */ override fun assertFailed(message: String, expected: Any?, actual: Any?): Throwable = - if (expected == null && actual == null) Exceptions.createAssertionError(message, null) + if (expected == null && actual == null) AssertionErrorBuilder.create().withMessage(message).build() else { val expectedStr = nullableToString(expected, "") val actualStr = nullableToString(actual, "") @@ -56,9 +56,11 @@ internal object FSOkio : FS { } } private fun nullableToString(any: Any?, onNull: String): String = - any?.let { it.toString() } ?: onNull + any?.toString() ?: onNull private fun comparisonAssertion(message: String, expected: String, actual: String): Throwable { - return Exceptions.createAssertionError( - message, null, Expected(Printed((expected))), Actual(Printed((actual)))) + return AssertionErrorBuilder.create() + .withMessage(message) + .withValues(Expected(Printed((expected))), Actual(Printed((actual)))) + .build() } } diff --git a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt index ffd5fb653..01436e9df 100644 --- a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt +++ b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt @@ -26,7 +26,7 @@ import io.kotest.core.listeners.FinalizeSpecListener import io.kotest.core.source.SourceRef import io.kotest.core.spec.Spec import io.kotest.core.test.TestCase -import io.kotest.core.test.TestResult +import io.kotest.engine.test.TestResult import kotlin.jvm.JvmStatic import kotlin.reflect.KClass import kotlinx.coroutines.currentCoroutineContext @@ -62,7 +62,7 @@ class SelfieExtension( val classOrFilename: String = when (val source = testCase.source) { is SourceRef.ClassSource -> source.fqn - is SourceRef.FileSource -> source.fileName + is SourceRef.ClassLineSource -> source.fqn is SourceRef.None -> TODO("Handle SourceRef.None") } return system.forClassOrFilename(classOrFilename) @@ -73,7 +73,7 @@ class SelfieExtension( execute: suspend (TestCase) -> TestResult ): TestResult { val file = snapshotFileFor(testCase) - val testName = testCase.name.testName + val testName = testCase.name.name val coroutineLocal = CoroutineDiskStorage(DiskStorageKotest(file, testName)) return withContext(currentCoroutineContext() + coroutineLocal) { file.startTest(testName) @@ -89,8 +89,8 @@ class SelfieExtension( val file = results.keys.map { snapshotFileFor(it) }.firstOrNull() ?: return results.entries.forEach { if (it.value.isIgnored) { - file.startTest(it.key.name.testName) - file.finishedTestWithSuccess(it.key.name.testName, false) + file.startTest(it.key.name.name) + file.finishedTestWithSuccess(it.key.name.name, false) } } file.finishedClassWithSuccess(results.entries.all { it.value.isSuccess }) diff --git a/jvm/undertest-junit5-kotest/build.gradle b/jvm/undertest-junit5-kotest/build.gradle index e45f5e401..43fc8f05d 100644 --- a/jvm/undertest-junit5-kotest/build.gradle +++ b/jvm/undertest-junit5-kotest/build.gradle @@ -39,4 +39,5 @@ test { // defaults to 'write' systemProperty 'selfie', findProperty('selfie') systemProperty 'selfie.settings', findProperty('selfie.settings') + systemProperty 'kotest.framework.config.fqn', 'undertest.junit5.JunitKotestProjectConfig' } \ No newline at end of file diff --git a/jvm/undertest-junit5-kotest/harness/gradle.properties b/jvm/undertest-junit5-kotest/harness/gradle.properties index 520a835d1..b48cfaa78 100644 --- a/jvm/undertest-junit5-kotest/harness/gradle.properties +++ b/jvm/undertest-junit5-kotest/harness/gradle.properties @@ -9,4 +9,4 @@ ver_JUNIT_PIONEER=2.2.0 ver_OKIO=3.7.0 ver_KOTLIN_TEST=1.9.22 ver_KOTLIN_SERIALIZATION=1.6.3 -ver_KOTEST=5.8.0 \ No newline at end of file +ver_KOTEST=6.1.0 \ No newline at end of file diff --git a/jvm/undertest-junit5-kotest/src/test/kotlin/undertest/junit5/JunitKotestProjectConfig.kt b/jvm/undertest-junit5-kotest/src/test/kotlin/undertest/junit5/JunitKotestProjectConfig.kt index 574982605..6750745d9 100644 --- a/jvm/undertest-junit5-kotest/src/test/kotlin/undertest/junit5/JunitKotestProjectConfig.kt +++ b/jvm/undertest-junit5-kotest/src/test/kotlin/undertest/junit5/JunitKotestProjectConfig.kt @@ -4,5 +4,5 @@ import com.diffplug.selfie.junit5.SelfieExtension import io.kotest.core.config.AbstractProjectConfig class JunitKotestProjectConfig : AbstractProjectConfig() { - override fun extensions() = listOf(SelfieExtension(this)) + override val extensions = listOf(SelfieExtension(this)) } diff --git a/jvm/undertest-junit5-kotest/src/test/kotlin/undertest/junit5/UT_KotestConcurrencyStressTest.kt b/jvm/undertest-junit5-kotest/src/test/kotlin/undertest/junit5/UT_KotestConcurrencyStressTest.kt index bdabe2565..540b9ddaf 100644 --- a/jvm/undertest-junit5-kotest/src/test/kotlin/undertest/junit5/UT_KotestConcurrencyStressTest.kt +++ b/jvm/undertest-junit5-kotest/src/test/kotlin/undertest/junit5/UT_KotestConcurrencyStressTest.kt @@ -1,12 +1,15 @@ package undertest.junit5 import com.diffplug.selfie.coroutines.expectSelfie +import io.kotest.common.ExperimentalKotest import io.kotest.core.spec.style.FunSpec +import io.kotest.engine.concurrency.TestExecutionMode import kotlinx.coroutines.delay +@OptIn(ExperimentalKotest::class) class UT_KotestConcurrencyStressTest : FunSpec({ - concurrency = 100 + testExecutionMode = TestExecutionMode.LimitedConcurrency(100) for (d in 1..1000) { val digit = d test(String.format("test %04d", digit)) { From 0cbea499aa64567bce70fa605060b9869126b5fc Mon Sep 17 00:00:00 2001 From: sksamuel Date: Tue, 20 Jan 2026 16:06:21 -0600 Subject: [PATCH 2/9] Fixed spotless warning --- .../main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt b/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt index 062e5d7a9..b15fb563e 100644 --- a/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt +++ b/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 DiffPlug + * Copyright (C) 2024-2026 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 75942b02448f67edb4b0ab853395d1cd2b986b62 Mon Sep 17 00:00:00 2001 From: sksamuel Date: Tue, 20 Jan 2026 20:16:34 -0600 Subject: [PATCH 3/9] Spotless apply --- .../kotlin/com/diffplug/selfie/kotest/FSOkio.kt | 16 +++++++++------- .../diffplug/selfie/kotest/SelfieExtension.kt | 3 ++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/FSOkio.kt b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/FSOkio.kt index 41187509f..5bdac324e 100644 --- a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/FSOkio.kt +++ b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/FSOkio.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 DiffPlug + * Copyright (C) 2024-2026 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ internal fun TypedPath.toPath(): okio.Path = absolutePath.toPath() internal object FSOkio : FS { override fun fileExists(typedPath: TypedPath): Boolean = FS_SYSTEM.metadataOrNull(typedPath.toPath())?.isRegularFile ?: false + /** Walks the files (not directories) which are children and grandchildren of the given path. */ override fun fileWalk(typedPath: TypedPath, walk: (Sequence) -> T): T = walk( @@ -40,9 +41,11 @@ internal object FSOkio : FS { FS_SYSTEM.read(typedPath.toPath()) { readByteArray() } override fun fileWriteBinary(typedPath: TypedPath, content: ByteArray): Unit = FS_SYSTEM.write(typedPath.toPath()) { write(content) } + /** Creates an assertion failed exception to throw. */ override fun assertFailed(message: String, expected: Any?, actual: Any?): Throwable = - if (expected == null && actual == null) AssertionErrorBuilder.create().withMessage(message).build() + if (expected == null && actual == null) + AssertionErrorBuilder.create().withMessage(message).build() else { val expectedStr = nullableToString(expected, "") val actualStr = nullableToString(actual, "") @@ -55,12 +58,11 @@ internal object FSOkio : FS { comparisonAssertion(message, expectedStr, actualStr) } } - private fun nullableToString(any: Any?, onNull: String): String = - any?.toString() ?: onNull + private fun nullableToString(any: Any?, onNull: String): String = any?.toString() ?: onNull private fun comparisonAssertion(message: String, expected: String, actual: String): Throwable { return AssertionErrorBuilder.create() - .withMessage(message) - .withValues(Expected(Printed((expected))), Actual(Printed((actual)))) - .build() + .withMessage(message) + .withValues(Expected(Printed((expected))), Actual(Printed((actual)))) + .build() } } diff --git a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt index 01436e9df..3ee9a74b5 100644 --- a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt +++ b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 DiffPlug + * Copyright (C) 2024-2026 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -67,6 +67,7 @@ class SelfieExtension( } return system.forClassOrFilename(classOrFilename) } + /** Called for every test method. */ override suspend fun intercept( testCase: TestCase, From 45f88c9e95c71a3ba716fa0582593966a30a92b1 Mon Sep 17 00:00:00 2001 From: sksamuel Date: Tue, 20 Jan 2026 20:21:04 -0600 Subject: [PATCH 4/9] docs --- selfie.dev/src/pages/jvm/kotest.mdx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/selfie.dev/src/pages/jvm/kotest.mdx b/selfie.dev/src/pages/jvm/kotest.mdx index b748affb1..8dcc5c81f 100644 --- a/selfie.dev/src/pages/jvm/kotest.mdx +++ b/selfie.dev/src/pages/jvm/kotest.mdx @@ -40,6 +40,9 @@ class ProjectConfig : AbstractProjectConfig() { } ``` +Note that your `AbstractProjectConfig` must either have the fully qualified name of `io.kotest.provided.ProjectConfig` or the system property `kotest.framework.config.fqn` must be set. +See [Kotest docs](https://kotest.io/docs/framework/project-config.html) for more info. + ## Selfie and coroutines In a regular JUnit 5 test, you call `Selfie.expectSelfie(...)`, like so From 5ee91c50b7b814b88596b67470c68ab8a273c6c9 Mon Sep 17 00:00:00 2001 From: sksamuel Date: Tue, 20 Jan 2026 22:36:56 -0600 Subject: [PATCH 5/9] tests --- .../kotlin/undertest/kotest/UT_ConcurrencyStressTest.kt | 5 ++++- .../src/jvmTest/kotlin/kotest/KotestProjectConfig.kt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.kt b/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.kt index 995718021..65760c78f 100644 --- a/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.kt +++ b/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.kt @@ -1,12 +1,15 @@ package undertest.kotest import com.diffplug.selfie.coroutines.expectSelfie +import io.kotest.common.ExperimentalKotest import io.kotest.core.spec.style.FunSpec +import io.kotest.engine.concurrency.TestExecutionMode import kotlinx.coroutines.delay +@OptIn(ExperimentalKotest::class) class UT_ConcurrencyStressTest : FunSpec({ - concurrency = 100 + testExecutionMode = TestExecutionMode.LimitedConcurrency(100) for (d in 1..1000) { val digit = d test(String.format("test %04d", digit)) { diff --git a/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/KotestProjectConfig.kt b/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/KotestProjectConfig.kt index c15b38e8b..9632653e2 100644 --- a/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/KotestProjectConfig.kt +++ b/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/KotestProjectConfig.kt @@ -4,5 +4,5 @@ import com.diffplug.selfie.kotest.SelfieExtension import io.kotest.core.config.AbstractProjectConfig object KotestProjectConfig : AbstractProjectConfig() { - override fun extensions() = listOf(SelfieExtension(this)) + override val extensions = listOf(SelfieExtension(this)) } From 4007a791320157afef9c5f968c47054b66e54752 Mon Sep 17 00:00:00 2001 From: sksamuel Date: Sun, 22 Feb 2026 15:09:00 -0600 Subject: [PATCH 6/9] Fix Kotest project config discovery for undertest-kotest Set kotest.framework.config.fqn system property so Kotest 6 can find KotestProjectConfig, enabling SelfieExtension to initialize properly. Without this, all tests failed with "SelfieExtension wasn't added to the AbstractProjectConfig". Co-Authored-By: Claude Sonnet 4.6 --- jvm/settings.gradle | 2 + .../harness/gradle.properties | 2 +- .../harness/settings.gradle | 2 + jvm/undertest-kotest/build.gradle | 2 + .../kotest/UT_ConcurrencyStressTest.ss | 2001 +++++++++++++++++ .../undertest/kotest/UT_StringSpecTest.kt | 11 - .../src/jvmTest/kotlin/kotest/MySpec.kt | 9 + .../kotlin/kotest/UT_StringSpecTest.kt | 10 + 8 files changed, 2027 insertions(+), 12 deletions(-) create mode 100644 jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.ss delete mode 100644 jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_StringSpecTest.kt create mode 100644 jvm/undertest-kotest/src/jvmTest/kotlin/kotest/MySpec.kt create mode 100644 jvm/undertest-kotest/src/jvmTest/kotlin/kotest/UT_StringSpecTest.kt diff --git a/jvm/settings.gradle b/jvm/settings.gradle index 75ab10186..5468a098f 100644 --- a/jvm/settings.gradle +++ b/jvm/settings.gradle @@ -29,6 +29,8 @@ plugins { id 'org.jetbrains.kotlin.multiplatform' version '2.2.20' apply false // https://github.com/adamko-dev/dokkatoo/releases id 'dev.adamko.dokkatoo-html' version '2.4.0' apply false + // https://plugins.gradle.org/plugin/io.kotest + id 'io.kotest' version '6.1.1' apply false } blowdryerSetup { diff --git a/jvm/undertest-junit5-kotest/harness/gradle.properties b/jvm/undertest-junit5-kotest/harness/gradle.properties index b48cfaa78..a8352b77d 100644 --- a/jvm/undertest-junit5-kotest/harness/gradle.properties +++ b/jvm/undertest-junit5-kotest/harness/gradle.properties @@ -9,4 +9,4 @@ ver_JUNIT_PIONEER=2.2.0 ver_OKIO=3.7.0 ver_KOTLIN_TEST=1.9.22 ver_KOTLIN_SERIALIZATION=1.6.3 -ver_KOTEST=6.1.0 \ No newline at end of file +ver_KOTEST=6.1.1 \ No newline at end of file diff --git a/jvm/undertest-junit5-kotest/harness/settings.gradle b/jvm/undertest-junit5-kotest/harness/settings.gradle index c7ff4c283..125f0adff 100644 --- a/jvm/undertest-junit5-kotest/harness/settings.gradle +++ b/jvm/undertest-junit5-kotest/harness/settings.gradle @@ -29,6 +29,8 @@ plugins { id 'org.jetbrains.kotlin.multiplatform' version '2.2.20' apply false // https://github.com/adamko-dev/dokkatoo/releases id 'dev.adamko.dokkatoo-html' version '2.4.0' apply false + // https://plugins.gradle.org/plugin/io.kotest + id 'io.kotest' version '6.1.1' apply false } blowdryerSetup { diff --git a/jvm/undertest-kotest/build.gradle b/jvm/undertest-kotest/build.gradle index 1bce20567..e59c9854b 100644 --- a/jvm/undertest-kotest/build.gradle +++ b/jvm/undertest-kotest/build.gradle @@ -1,6 +1,7 @@ plugins { id 'org.jetbrains.kotlin.multiplatform' id 'com.diffplug.spotless' + id 'io.kotest' } repositories { mavenCentral() @@ -46,6 +47,7 @@ tasks.named('jvmTest').configure { testLogging.showStandardStreams = true // the snapshots are both output and input, for this harness best if the test just always runs outputs.upToDateWhen { false } + systemProperty "kotest.framework.config.fqn", "kotest.KotestProjectConfig" // defaults to 'write' String SELFIE = findProperty('selfie') if (SELFIE != null) { diff --git a/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.ss b/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.ss new file mode 100644 index 000000000..21ee72121 --- /dev/null +++ b/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.ss @@ -0,0 +1,2001 @@ +╔═ test 0001 ═╗ +1 +╔═ test 0002 ═╗ +2 +╔═ test 0003 ═╗ +3 +╔═ test 0004 ═╗ +4 +╔═ test 0005 ═╗ +5 +╔═ test 0006 ═╗ +6 +╔═ test 0007 ═╗ +7 +╔═ test 0008 ═╗ +8 +╔═ test 0009 ═╗ +9 +╔═ test 0010 ═╗ +10 +╔═ test 0011 ═╗ +11 +╔═ test 0012 ═╗ +12 +╔═ test 0013 ═╗ +13 +╔═ test 0014 ═╗ +14 +╔═ test 0015 ═╗ +15 +╔═ test 0016 ═╗ +16 +╔═ test 0017 ═╗ +17 +╔═ test 0018 ═╗ +18 +╔═ test 0019 ═╗ +19 +╔═ test 0020 ═╗ +20 +╔═ test 0021 ═╗ +21 +╔═ test 0022 ═╗ +22 +╔═ test 0023 ═╗ +23 +╔═ test 0024 ═╗ +24 +╔═ test 0025 ═╗ +25 +╔═ test 0026 ═╗ +26 +╔═ test 0027 ═╗ +27 +╔═ test 0028 ═╗ +28 +╔═ test 0029 ═╗ +29 +╔═ test 0030 ═╗ +30 +╔═ test 0031 ═╗ +31 +╔═ test 0032 ═╗ +32 +╔═ test 0033 ═╗ +33 +╔═ test 0034 ═╗ +34 +╔═ test 0035 ═╗ +35 +╔═ test 0036 ═╗ +36 +╔═ test 0037 ═╗ +37 +╔═ test 0038 ═╗ +38 +╔═ test 0039 ═╗ +39 +╔═ test 0040 ═╗ +40 +╔═ test 0041 ═╗ +41 +╔═ test 0042 ═╗ +42 +╔═ test 0043 ═╗ +43 +╔═ test 0044 ═╗ +44 +╔═ test 0045 ═╗ +45 +╔═ test 0046 ═╗ +46 +╔═ test 0047 ═╗ +47 +╔═ test 0048 ═╗ +48 +╔═ test 0049 ═╗ +49 +╔═ test 0050 ═╗ +50 +╔═ test 0051 ═╗ +51 +╔═ test 0052 ═╗ +52 +╔═ test 0053 ═╗ +53 +╔═ test 0054 ═╗ +54 +╔═ test 0055 ═╗ +55 +╔═ test 0056 ═╗ +56 +╔═ test 0057 ═╗ +57 +╔═ test 0058 ═╗ +58 +╔═ test 0059 ═╗ +59 +╔═ test 0060 ═╗ +60 +╔═ test 0061 ═╗ +61 +╔═ test 0062 ═╗ +62 +╔═ test 0063 ═╗ +63 +╔═ test 0064 ═╗ +64 +╔═ test 0065 ═╗ +65 +╔═ test 0066 ═╗ +66 +╔═ test 0067 ═╗ +67 +╔═ test 0068 ═╗ +68 +╔═ test 0069 ═╗ +69 +╔═ test 0070 ═╗ +70 +╔═ test 0071 ═╗ +71 +╔═ test 0072 ═╗ +72 +╔═ test 0073 ═╗ +73 +╔═ test 0074 ═╗ +74 +╔═ test 0075 ═╗ +75 +╔═ test 0076 ═╗ +76 +╔═ test 0077 ═╗ +77 +╔═ test 0078 ═╗ +78 +╔═ test 0079 ═╗ +79 +╔═ test 0080 ═╗ +80 +╔═ test 0081 ═╗ +81 +╔═ test 0082 ═╗ +82 +╔═ test 0083 ═╗ +83 +╔═ test 0084 ═╗ +84 +╔═ test 0085 ═╗ +85 +╔═ test 0086 ═╗ +86 +╔═ test 0087 ═╗ +87 +╔═ test 0088 ═╗ +88 +╔═ test 0089 ═╗ +89 +╔═ test 0090 ═╗ +90 +╔═ test 0091 ═╗ +91 +╔═ test 0092 ═╗ +92 +╔═ test 0093 ═╗ +93 +╔═ test 0094 ═╗ +94 +╔═ test 0095 ═╗ +95 +╔═ test 0096 ═╗ +96 +╔═ test 0097 ═╗ +97 +╔═ test 0098 ═╗ +98 +╔═ test 0099 ═╗ +99 +╔═ test 0100 ═╗ +100 +╔═ test 0101 ═╗ +101 +╔═ test 0102 ═╗ +102 +╔═ test 0103 ═╗ +103 +╔═ test 0104 ═╗ +104 +╔═ test 0105 ═╗ +105 +╔═ test 0106 ═╗ +106 +╔═ test 0107 ═╗ +107 +╔═ test 0108 ═╗ +108 +╔═ test 0109 ═╗ +109 +╔═ test 0110 ═╗ +110 +╔═ test 0111 ═╗ +111 +╔═ test 0112 ═╗ +112 +╔═ test 0113 ═╗ +113 +╔═ test 0114 ═╗ +114 +╔═ test 0115 ═╗ +115 +╔═ test 0116 ═╗ +116 +╔═ test 0117 ═╗ +117 +╔═ test 0118 ═╗ +118 +╔═ test 0119 ═╗ +119 +╔═ test 0120 ═╗ +120 +╔═ test 0121 ═╗ +121 +╔═ test 0122 ═╗ +122 +╔═ test 0123 ═╗ +123 +╔═ test 0124 ═╗ +124 +╔═ test 0125 ═╗ +125 +╔═ test 0126 ═╗ +126 +╔═ test 0127 ═╗ +127 +╔═ test 0128 ═╗ +128 +╔═ test 0129 ═╗ +129 +╔═ test 0130 ═╗ +130 +╔═ test 0131 ═╗ +131 +╔═ test 0132 ═╗ +132 +╔═ test 0133 ═╗ +133 +╔═ test 0134 ═╗ +134 +╔═ test 0135 ═╗ +135 +╔═ test 0136 ═╗ +136 +╔═ test 0137 ═╗ +137 +╔═ test 0138 ═╗ +138 +╔═ test 0139 ═╗ +139 +╔═ test 0140 ═╗ +140 +╔═ test 0141 ═╗ +141 +╔═ test 0142 ═╗ +142 +╔═ test 0143 ═╗ +143 +╔═ test 0144 ═╗ +144 +╔═ test 0145 ═╗ +145 +╔═ test 0146 ═╗ +146 +╔═ test 0147 ═╗ +147 +╔═ test 0148 ═╗ +148 +╔═ test 0149 ═╗ +149 +╔═ test 0150 ═╗ +150 +╔═ test 0151 ═╗ +151 +╔═ test 0152 ═╗ +152 +╔═ test 0153 ═╗ +153 +╔═ test 0154 ═╗ +154 +╔═ test 0155 ═╗ +155 +╔═ test 0156 ═╗ +156 +╔═ test 0157 ═╗ +157 +╔═ test 0158 ═╗ +158 +╔═ test 0159 ═╗ +159 +╔═ test 0160 ═╗ +160 +╔═ test 0161 ═╗ +161 +╔═ test 0162 ═╗ +162 +╔═ test 0163 ═╗ +163 +╔═ test 0164 ═╗ +164 +╔═ test 0165 ═╗ +165 +╔═ test 0166 ═╗ +166 +╔═ test 0167 ═╗ +167 +╔═ test 0168 ═╗ +168 +╔═ test 0169 ═╗ +169 +╔═ test 0170 ═╗ +170 +╔═ test 0171 ═╗ +171 +╔═ test 0172 ═╗ +172 +╔═ test 0173 ═╗ +173 +╔═ test 0174 ═╗ +174 +╔═ test 0175 ═╗ +175 +╔═ test 0176 ═╗ +176 +╔═ test 0177 ═╗ +177 +╔═ test 0178 ═╗ +178 +╔═ test 0179 ═╗ +179 +╔═ test 0180 ═╗ +180 +╔═ test 0181 ═╗ +181 +╔═ test 0182 ═╗ +182 +╔═ test 0183 ═╗ +183 +╔═ test 0184 ═╗ +184 +╔═ test 0185 ═╗ +185 +╔═ test 0186 ═╗ +186 +╔═ test 0187 ═╗ +187 +╔═ test 0188 ═╗ +188 +╔═ test 0189 ═╗ +189 +╔═ test 0190 ═╗ +190 +╔═ test 0191 ═╗ +191 +╔═ test 0192 ═╗ +192 +╔═ test 0193 ═╗ +193 +╔═ test 0194 ═╗ +194 +╔═ test 0195 ═╗ +195 +╔═ test 0196 ═╗ +196 +╔═ test 0197 ═╗ +197 +╔═ test 0198 ═╗ +198 +╔═ test 0199 ═╗ +199 +╔═ test 0200 ═╗ +200 +╔═ test 0201 ═╗ +201 +╔═ test 0202 ═╗ +202 +╔═ test 0203 ═╗ +203 +╔═ test 0204 ═╗ +204 +╔═ test 0205 ═╗ +205 +╔═ test 0206 ═╗ +206 +╔═ test 0207 ═╗ +207 +╔═ test 0208 ═╗ +208 +╔═ test 0209 ═╗ +209 +╔═ test 0210 ═╗ +210 +╔═ test 0211 ═╗ +211 +╔═ test 0212 ═╗ +212 +╔═ test 0213 ═╗ +213 +╔═ test 0214 ═╗ +214 +╔═ test 0215 ═╗ +215 +╔═ test 0216 ═╗ +216 +╔═ test 0217 ═╗ +217 +╔═ test 0218 ═╗ +218 +╔═ test 0219 ═╗ +219 +╔═ test 0220 ═╗ +220 +╔═ test 0221 ═╗ +221 +╔═ test 0222 ═╗ +222 +╔═ test 0223 ═╗ +223 +╔═ test 0224 ═╗ +224 +╔═ test 0225 ═╗ +225 +╔═ test 0226 ═╗ +226 +╔═ test 0227 ═╗ +227 +╔═ test 0228 ═╗ +228 +╔═ test 0229 ═╗ +229 +╔═ test 0230 ═╗ +230 +╔═ test 0231 ═╗ +231 +╔═ test 0232 ═╗ +232 +╔═ test 0233 ═╗ +233 +╔═ test 0234 ═╗ +234 +╔═ test 0235 ═╗ +235 +╔═ test 0236 ═╗ +236 +╔═ test 0237 ═╗ +237 +╔═ test 0238 ═╗ +238 +╔═ test 0239 ═╗ +239 +╔═ test 0240 ═╗ +240 +╔═ test 0241 ═╗ +241 +╔═ test 0242 ═╗ +242 +╔═ test 0243 ═╗ +243 +╔═ test 0244 ═╗ +244 +╔═ test 0245 ═╗ +245 +╔═ test 0246 ═╗ +246 +╔═ test 0247 ═╗ +247 +╔═ test 0248 ═╗ +248 +╔═ test 0249 ═╗ +249 +╔═ test 0250 ═╗ +250 +╔═ test 0251 ═╗ +251 +╔═ test 0252 ═╗ +252 +╔═ test 0253 ═╗ +253 +╔═ test 0254 ═╗ +254 +╔═ test 0255 ═╗ +255 +╔═ test 0256 ═╗ +256 +╔═ test 0257 ═╗ +257 +╔═ test 0258 ═╗ +258 +╔═ test 0259 ═╗ +259 +╔═ test 0260 ═╗ +260 +╔═ test 0261 ═╗ +261 +╔═ test 0262 ═╗ +262 +╔═ test 0263 ═╗ +263 +╔═ test 0264 ═╗ +264 +╔═ test 0265 ═╗ +265 +╔═ test 0266 ═╗ +266 +╔═ test 0267 ═╗ +267 +╔═ test 0268 ═╗ +268 +╔═ test 0269 ═╗ +269 +╔═ test 0270 ═╗ +270 +╔═ test 0271 ═╗ +271 +╔═ test 0272 ═╗ +272 +╔═ test 0273 ═╗ +273 +╔═ test 0274 ═╗ +274 +╔═ test 0275 ═╗ +275 +╔═ test 0276 ═╗ +276 +╔═ test 0277 ═╗ +277 +╔═ test 0278 ═╗ +278 +╔═ test 0279 ═╗ +279 +╔═ test 0280 ═╗ +280 +╔═ test 0281 ═╗ +281 +╔═ test 0282 ═╗ +282 +╔═ test 0283 ═╗ +283 +╔═ test 0284 ═╗ +284 +╔═ test 0285 ═╗ +285 +╔═ test 0286 ═╗ +286 +╔═ test 0287 ═╗ +287 +╔═ test 0288 ═╗ +288 +╔═ test 0289 ═╗ +289 +╔═ test 0290 ═╗ +290 +╔═ test 0291 ═╗ +291 +╔═ test 0292 ═╗ +292 +╔═ test 0293 ═╗ +293 +╔═ test 0294 ═╗ +294 +╔═ test 0295 ═╗ +295 +╔═ test 0296 ═╗ +296 +╔═ test 0297 ═╗ +297 +╔═ test 0298 ═╗ +298 +╔═ test 0299 ═╗ +299 +╔═ test 0300 ═╗ +300 +╔═ test 0301 ═╗ +301 +╔═ test 0302 ═╗ +302 +╔═ test 0303 ═╗ +303 +╔═ test 0304 ═╗ +304 +╔═ test 0305 ═╗ +305 +╔═ test 0306 ═╗ +306 +╔═ test 0307 ═╗ +307 +╔═ test 0308 ═╗ +308 +╔═ test 0309 ═╗ +309 +╔═ test 0310 ═╗ +310 +╔═ test 0311 ═╗ +311 +╔═ test 0312 ═╗ +312 +╔═ test 0313 ═╗ +313 +╔═ test 0314 ═╗ +314 +╔═ test 0315 ═╗ +315 +╔═ test 0316 ═╗ +316 +╔═ test 0317 ═╗ +317 +╔═ test 0318 ═╗ +318 +╔═ test 0319 ═╗ +319 +╔═ test 0320 ═╗ +320 +╔═ test 0321 ═╗ +321 +╔═ test 0322 ═╗ +322 +╔═ test 0323 ═╗ +323 +╔═ test 0324 ═╗ +324 +╔═ test 0325 ═╗ +325 +╔═ test 0326 ═╗ +326 +╔═ test 0327 ═╗ +327 +╔═ test 0328 ═╗ +328 +╔═ test 0329 ═╗ +329 +╔═ test 0330 ═╗ +330 +╔═ test 0331 ═╗ +331 +╔═ test 0332 ═╗ +332 +╔═ test 0333 ═╗ +333 +╔═ test 0334 ═╗ +334 +╔═ test 0335 ═╗ +335 +╔═ test 0336 ═╗ +336 +╔═ test 0337 ═╗ +337 +╔═ test 0338 ═╗ +338 +╔═ test 0339 ═╗ +339 +╔═ test 0340 ═╗ +340 +╔═ test 0341 ═╗ +341 +╔═ test 0342 ═╗ +342 +╔═ test 0343 ═╗ +343 +╔═ test 0344 ═╗ +344 +╔═ test 0345 ═╗ +345 +╔═ test 0346 ═╗ +346 +╔═ test 0347 ═╗ +347 +╔═ test 0348 ═╗ +348 +╔═ test 0349 ═╗ +349 +╔═ test 0350 ═╗ +350 +╔═ test 0351 ═╗ +351 +╔═ test 0352 ═╗ +352 +╔═ test 0353 ═╗ +353 +╔═ test 0354 ═╗ +354 +╔═ test 0355 ═╗ +355 +╔═ test 0356 ═╗ +356 +╔═ test 0357 ═╗ +357 +╔═ test 0358 ═╗ +358 +╔═ test 0359 ═╗ +359 +╔═ test 0360 ═╗ +360 +╔═ test 0361 ═╗ +361 +╔═ test 0362 ═╗ +362 +╔═ test 0363 ═╗ +363 +╔═ test 0364 ═╗ +364 +╔═ test 0365 ═╗ +365 +╔═ test 0366 ═╗ +366 +╔═ test 0367 ═╗ +367 +╔═ test 0368 ═╗ +368 +╔═ test 0369 ═╗ +369 +╔═ test 0370 ═╗ +370 +╔═ test 0371 ═╗ +371 +╔═ test 0372 ═╗ +372 +╔═ test 0373 ═╗ +373 +╔═ test 0374 ═╗ +374 +╔═ test 0375 ═╗ +375 +╔═ test 0376 ═╗ +376 +╔═ test 0377 ═╗ +377 +╔═ test 0378 ═╗ +378 +╔═ test 0379 ═╗ +379 +╔═ test 0380 ═╗ +380 +╔═ test 0381 ═╗ +381 +╔═ test 0382 ═╗ +382 +╔═ test 0383 ═╗ +383 +╔═ test 0384 ═╗ +384 +╔═ test 0385 ═╗ +385 +╔═ test 0386 ═╗ +386 +╔═ test 0387 ═╗ +387 +╔═ test 0388 ═╗ +388 +╔═ test 0389 ═╗ +389 +╔═ test 0390 ═╗ +390 +╔═ test 0391 ═╗ +391 +╔═ test 0392 ═╗ +392 +╔═ test 0393 ═╗ +393 +╔═ test 0394 ═╗ +394 +╔═ test 0395 ═╗ +395 +╔═ test 0396 ═╗ +396 +╔═ test 0397 ═╗ +397 +╔═ test 0398 ═╗ +398 +╔═ test 0399 ═╗ +399 +╔═ test 0400 ═╗ +400 +╔═ test 0401 ═╗ +401 +╔═ test 0402 ═╗ +402 +╔═ test 0403 ═╗ +403 +╔═ test 0404 ═╗ +404 +╔═ test 0405 ═╗ +405 +╔═ test 0406 ═╗ +406 +╔═ test 0407 ═╗ +407 +╔═ test 0408 ═╗ +408 +╔═ test 0409 ═╗ +409 +╔═ test 0410 ═╗ +410 +╔═ test 0411 ═╗ +411 +╔═ test 0412 ═╗ +412 +╔═ test 0413 ═╗ +413 +╔═ test 0414 ═╗ +414 +╔═ test 0415 ═╗ +415 +╔═ test 0416 ═╗ +416 +╔═ test 0417 ═╗ +417 +╔═ test 0418 ═╗ +418 +╔═ test 0419 ═╗ +419 +╔═ test 0420 ═╗ +420 +╔═ test 0421 ═╗ +421 +╔═ test 0422 ═╗ +422 +╔═ test 0423 ═╗ +423 +╔═ test 0424 ═╗ +424 +╔═ test 0425 ═╗ +425 +╔═ test 0426 ═╗ +426 +╔═ test 0427 ═╗ +427 +╔═ test 0428 ═╗ +428 +╔═ test 0429 ═╗ +429 +╔═ test 0430 ═╗ +430 +╔═ test 0431 ═╗ +431 +╔═ test 0432 ═╗ +432 +╔═ test 0433 ═╗ +433 +╔═ test 0434 ═╗ +434 +╔═ test 0435 ═╗ +435 +╔═ test 0436 ═╗ +436 +╔═ test 0437 ═╗ +437 +╔═ test 0438 ═╗ +438 +╔═ test 0439 ═╗ +439 +╔═ test 0440 ═╗ +440 +╔═ test 0441 ═╗ +441 +╔═ test 0442 ═╗ +442 +╔═ test 0443 ═╗ +443 +╔═ test 0444 ═╗ +444 +╔═ test 0445 ═╗ +445 +╔═ test 0446 ═╗ +446 +╔═ test 0447 ═╗ +447 +╔═ test 0448 ═╗ +448 +╔═ test 0449 ═╗ +449 +╔═ test 0450 ═╗ +450 +╔═ test 0451 ═╗ +451 +╔═ test 0452 ═╗ +452 +╔═ test 0453 ═╗ +453 +╔═ test 0454 ═╗ +454 +╔═ test 0455 ═╗ +455 +╔═ test 0456 ═╗ +456 +╔═ test 0457 ═╗ +457 +╔═ test 0458 ═╗ +458 +╔═ test 0459 ═╗ +459 +╔═ test 0460 ═╗ +460 +╔═ test 0461 ═╗ +461 +╔═ test 0462 ═╗ +462 +╔═ test 0463 ═╗ +463 +╔═ test 0464 ═╗ +464 +╔═ test 0465 ═╗ +465 +╔═ test 0466 ═╗ +466 +╔═ test 0467 ═╗ +467 +╔═ test 0468 ═╗ +468 +╔═ test 0469 ═╗ +469 +╔═ test 0470 ═╗ +470 +╔═ test 0471 ═╗ +471 +╔═ test 0472 ═╗ +472 +╔═ test 0473 ═╗ +473 +╔═ test 0474 ═╗ +474 +╔═ test 0475 ═╗ +475 +╔═ test 0476 ═╗ +476 +╔═ test 0477 ═╗ +477 +╔═ test 0478 ═╗ +478 +╔═ test 0479 ═╗ +479 +╔═ test 0480 ═╗ +480 +╔═ test 0481 ═╗ +481 +╔═ test 0482 ═╗ +482 +╔═ test 0483 ═╗ +483 +╔═ test 0484 ═╗ +484 +╔═ test 0485 ═╗ +485 +╔═ test 0486 ═╗ +486 +╔═ test 0487 ═╗ +487 +╔═ test 0488 ═╗ +488 +╔═ test 0489 ═╗ +489 +╔═ test 0490 ═╗ +490 +╔═ test 0491 ═╗ +491 +╔═ test 0492 ═╗ +492 +╔═ test 0493 ═╗ +493 +╔═ test 0494 ═╗ +494 +╔═ test 0495 ═╗ +495 +╔═ test 0496 ═╗ +496 +╔═ test 0497 ═╗ +497 +╔═ test 0498 ═╗ +498 +╔═ test 0499 ═╗ +499 +╔═ test 0500 ═╗ +500 +╔═ test 0501 ═╗ +501 +╔═ test 0502 ═╗ +502 +╔═ test 0503 ═╗ +503 +╔═ test 0504 ═╗ +504 +╔═ test 0505 ═╗ +505 +╔═ test 0506 ═╗ +506 +╔═ test 0507 ═╗ +507 +╔═ test 0508 ═╗ +508 +╔═ test 0509 ═╗ +509 +╔═ test 0510 ═╗ +510 +╔═ test 0511 ═╗ +511 +╔═ test 0512 ═╗ +512 +╔═ test 0513 ═╗ +513 +╔═ test 0514 ═╗ +514 +╔═ test 0515 ═╗ +515 +╔═ test 0516 ═╗ +516 +╔═ test 0517 ═╗ +517 +╔═ test 0518 ═╗ +518 +╔═ test 0519 ═╗ +519 +╔═ test 0520 ═╗ +520 +╔═ test 0521 ═╗ +521 +╔═ test 0522 ═╗ +522 +╔═ test 0523 ═╗ +523 +╔═ test 0524 ═╗ +524 +╔═ test 0525 ═╗ +525 +╔═ test 0526 ═╗ +526 +╔═ test 0527 ═╗ +527 +╔═ test 0528 ═╗ +528 +╔═ test 0529 ═╗ +529 +╔═ test 0530 ═╗ +530 +╔═ test 0531 ═╗ +531 +╔═ test 0532 ═╗ +532 +╔═ test 0533 ═╗ +533 +╔═ test 0534 ═╗ +534 +╔═ test 0535 ═╗ +535 +╔═ test 0536 ═╗ +536 +╔═ test 0537 ═╗ +537 +╔═ test 0538 ═╗ +538 +╔═ test 0539 ═╗ +539 +╔═ test 0540 ═╗ +540 +╔═ test 0541 ═╗ +541 +╔═ test 0542 ═╗ +542 +╔═ test 0543 ═╗ +543 +╔═ test 0544 ═╗ +544 +╔═ test 0545 ═╗ +545 +╔═ test 0546 ═╗ +546 +╔═ test 0547 ═╗ +547 +╔═ test 0548 ═╗ +548 +╔═ test 0549 ═╗ +549 +╔═ test 0550 ═╗ +550 +╔═ test 0551 ═╗ +551 +╔═ test 0552 ═╗ +552 +╔═ test 0553 ═╗ +553 +╔═ test 0554 ═╗ +554 +╔═ test 0555 ═╗ +555 +╔═ test 0556 ═╗ +556 +╔═ test 0557 ═╗ +557 +╔═ test 0558 ═╗ +558 +╔═ test 0559 ═╗ +559 +╔═ test 0560 ═╗ +560 +╔═ test 0561 ═╗ +561 +╔═ test 0562 ═╗ +562 +╔═ test 0563 ═╗ +563 +╔═ test 0564 ═╗ +564 +╔═ test 0565 ═╗ +565 +╔═ test 0566 ═╗ +566 +╔═ test 0567 ═╗ +567 +╔═ test 0568 ═╗ +568 +╔═ test 0569 ═╗ +569 +╔═ test 0570 ═╗ +570 +╔═ test 0571 ═╗ +571 +╔═ test 0572 ═╗ +572 +╔═ test 0573 ═╗ +573 +╔═ test 0574 ═╗ +574 +╔═ test 0575 ═╗ +575 +╔═ test 0576 ═╗ +576 +╔═ test 0577 ═╗ +577 +╔═ test 0578 ═╗ +578 +╔═ test 0579 ═╗ +579 +╔═ test 0580 ═╗ +580 +╔═ test 0581 ═╗ +581 +╔═ test 0582 ═╗ +582 +╔═ test 0583 ═╗ +583 +╔═ test 0584 ═╗ +584 +╔═ test 0585 ═╗ +585 +╔═ test 0586 ═╗ +586 +╔═ test 0587 ═╗ +587 +╔═ test 0588 ═╗ +588 +╔═ test 0589 ═╗ +589 +╔═ test 0590 ═╗ +590 +╔═ test 0591 ═╗ +591 +╔═ test 0592 ═╗ +592 +╔═ test 0593 ═╗ +593 +╔═ test 0594 ═╗ +594 +╔═ test 0595 ═╗ +595 +╔═ test 0596 ═╗ +596 +╔═ test 0597 ═╗ +597 +╔═ test 0598 ═╗ +598 +╔═ test 0599 ═╗ +599 +╔═ test 0600 ═╗ +600 +╔═ test 0601 ═╗ +601 +╔═ test 0602 ═╗ +602 +╔═ test 0603 ═╗ +603 +╔═ test 0604 ═╗ +604 +╔═ test 0605 ═╗ +605 +╔═ test 0606 ═╗ +606 +╔═ test 0607 ═╗ +607 +╔═ test 0608 ═╗ +608 +╔═ test 0609 ═╗ +609 +╔═ test 0610 ═╗ +610 +╔═ test 0611 ═╗ +611 +╔═ test 0612 ═╗ +612 +╔═ test 0613 ═╗ +613 +╔═ test 0614 ═╗ +614 +╔═ test 0615 ═╗ +615 +╔═ test 0616 ═╗ +616 +╔═ test 0617 ═╗ +617 +╔═ test 0618 ═╗ +618 +╔═ test 0619 ═╗ +619 +╔═ test 0620 ═╗ +620 +╔═ test 0621 ═╗ +621 +╔═ test 0622 ═╗ +622 +╔═ test 0623 ═╗ +623 +╔═ test 0624 ═╗ +624 +╔═ test 0625 ═╗ +625 +╔═ test 0626 ═╗ +626 +╔═ test 0627 ═╗ +627 +╔═ test 0628 ═╗ +628 +╔═ test 0629 ═╗ +629 +╔═ test 0630 ═╗ +630 +╔═ test 0631 ═╗ +631 +╔═ test 0632 ═╗ +632 +╔═ test 0633 ═╗ +633 +╔═ test 0634 ═╗ +634 +╔═ test 0635 ═╗ +635 +╔═ test 0636 ═╗ +636 +╔═ test 0637 ═╗ +637 +╔═ test 0638 ═╗ +638 +╔═ test 0639 ═╗ +639 +╔═ test 0640 ═╗ +640 +╔═ test 0641 ═╗ +641 +╔═ test 0642 ═╗ +642 +╔═ test 0643 ═╗ +643 +╔═ test 0644 ═╗ +644 +╔═ test 0645 ═╗ +645 +╔═ test 0646 ═╗ +646 +╔═ test 0647 ═╗ +647 +╔═ test 0648 ═╗ +648 +╔═ test 0649 ═╗ +649 +╔═ test 0650 ═╗ +650 +╔═ test 0651 ═╗ +651 +╔═ test 0652 ═╗ +652 +╔═ test 0653 ═╗ +653 +╔═ test 0654 ═╗ +654 +╔═ test 0655 ═╗ +655 +╔═ test 0656 ═╗ +656 +╔═ test 0657 ═╗ +657 +╔═ test 0658 ═╗ +658 +╔═ test 0659 ═╗ +659 +╔═ test 0660 ═╗ +660 +╔═ test 0661 ═╗ +661 +╔═ test 0662 ═╗ +662 +╔═ test 0663 ═╗ +663 +╔═ test 0664 ═╗ +664 +╔═ test 0665 ═╗ +665 +╔═ test 0666 ═╗ +666 +╔═ test 0667 ═╗ +667 +╔═ test 0668 ═╗ +668 +╔═ test 0669 ═╗ +669 +╔═ test 0670 ═╗ +670 +╔═ test 0671 ═╗ +671 +╔═ test 0672 ═╗ +672 +╔═ test 0673 ═╗ +673 +╔═ test 0674 ═╗ +674 +╔═ test 0675 ═╗ +675 +╔═ test 0676 ═╗ +676 +╔═ test 0677 ═╗ +677 +╔═ test 0678 ═╗ +678 +╔═ test 0679 ═╗ +679 +╔═ test 0680 ═╗ +680 +╔═ test 0681 ═╗ +681 +╔═ test 0682 ═╗ +682 +╔═ test 0683 ═╗ +683 +╔═ test 0684 ═╗ +684 +╔═ test 0685 ═╗ +685 +╔═ test 0686 ═╗ +686 +╔═ test 0687 ═╗ +687 +╔═ test 0688 ═╗ +688 +╔═ test 0689 ═╗ +689 +╔═ test 0690 ═╗ +690 +╔═ test 0691 ═╗ +691 +╔═ test 0692 ═╗ +692 +╔═ test 0693 ═╗ +693 +╔═ test 0694 ═╗ +694 +╔═ test 0695 ═╗ +695 +╔═ test 0696 ═╗ +696 +╔═ test 0697 ═╗ +697 +╔═ test 0698 ═╗ +698 +╔═ test 0699 ═╗ +699 +╔═ test 0700 ═╗ +700 +╔═ test 0701 ═╗ +701 +╔═ test 0702 ═╗ +702 +╔═ test 0703 ═╗ +703 +╔═ test 0704 ═╗ +704 +╔═ test 0705 ═╗ +705 +╔═ test 0706 ═╗ +706 +╔═ test 0707 ═╗ +707 +╔═ test 0708 ═╗ +708 +╔═ test 0709 ═╗ +709 +╔═ test 0710 ═╗ +710 +╔═ test 0711 ═╗ +711 +╔═ test 0712 ═╗ +712 +╔═ test 0713 ═╗ +713 +╔═ test 0714 ═╗ +714 +╔═ test 0715 ═╗ +715 +╔═ test 0716 ═╗ +716 +╔═ test 0717 ═╗ +717 +╔═ test 0718 ═╗ +718 +╔═ test 0719 ═╗ +719 +╔═ test 0720 ═╗ +720 +╔═ test 0721 ═╗ +721 +╔═ test 0722 ═╗ +722 +╔═ test 0723 ═╗ +723 +╔═ test 0724 ═╗ +724 +╔═ test 0725 ═╗ +725 +╔═ test 0726 ═╗ +726 +╔═ test 0727 ═╗ +727 +╔═ test 0728 ═╗ +728 +╔═ test 0729 ═╗ +729 +╔═ test 0730 ═╗ +730 +╔═ test 0731 ═╗ +731 +╔═ test 0732 ═╗ +732 +╔═ test 0733 ═╗ +733 +╔═ test 0734 ═╗ +734 +╔═ test 0735 ═╗ +735 +╔═ test 0736 ═╗ +736 +╔═ test 0737 ═╗ +737 +╔═ test 0738 ═╗ +738 +╔═ test 0739 ═╗ +739 +╔═ test 0740 ═╗ +740 +╔═ test 0741 ═╗ +741 +╔═ test 0742 ═╗ +742 +╔═ test 0743 ═╗ +743 +╔═ test 0744 ═╗ +744 +╔═ test 0745 ═╗ +745 +╔═ test 0746 ═╗ +746 +╔═ test 0747 ═╗ +747 +╔═ test 0748 ═╗ +748 +╔═ test 0749 ═╗ +749 +╔═ test 0750 ═╗ +750 +╔═ test 0751 ═╗ +751 +╔═ test 0752 ═╗ +752 +╔═ test 0753 ═╗ +753 +╔═ test 0754 ═╗ +754 +╔═ test 0755 ═╗ +755 +╔═ test 0756 ═╗ +756 +╔═ test 0757 ═╗ +757 +╔═ test 0758 ═╗ +758 +╔═ test 0759 ═╗ +759 +╔═ test 0760 ═╗ +760 +╔═ test 0761 ═╗ +761 +╔═ test 0762 ═╗ +762 +╔═ test 0763 ═╗ +763 +╔═ test 0764 ═╗ +764 +╔═ test 0765 ═╗ +765 +╔═ test 0766 ═╗ +766 +╔═ test 0767 ═╗ +767 +╔═ test 0768 ═╗ +768 +╔═ test 0769 ═╗ +769 +╔═ test 0770 ═╗ +770 +╔═ test 0771 ═╗ +771 +╔═ test 0772 ═╗ +772 +╔═ test 0773 ═╗ +773 +╔═ test 0774 ═╗ +774 +╔═ test 0775 ═╗ +775 +╔═ test 0776 ═╗ +776 +╔═ test 0777 ═╗ +777 +╔═ test 0778 ═╗ +778 +╔═ test 0779 ═╗ +779 +╔═ test 0780 ═╗ +780 +╔═ test 0781 ═╗ +781 +╔═ test 0782 ═╗ +782 +╔═ test 0783 ═╗ +783 +╔═ test 0784 ═╗ +784 +╔═ test 0785 ═╗ +785 +╔═ test 0786 ═╗ +786 +╔═ test 0787 ═╗ +787 +╔═ test 0788 ═╗ +788 +╔═ test 0789 ═╗ +789 +╔═ test 0790 ═╗ +790 +╔═ test 0791 ═╗ +791 +╔═ test 0792 ═╗ +792 +╔═ test 0793 ═╗ +793 +╔═ test 0794 ═╗ +794 +╔═ test 0795 ═╗ +795 +╔═ test 0796 ═╗ +796 +╔═ test 0797 ═╗ +797 +╔═ test 0798 ═╗ +798 +╔═ test 0799 ═╗ +799 +╔═ test 0800 ═╗ +800 +╔═ test 0801 ═╗ +801 +╔═ test 0802 ═╗ +802 +╔═ test 0803 ═╗ +803 +╔═ test 0804 ═╗ +804 +╔═ test 0805 ═╗ +805 +╔═ test 0806 ═╗ +806 +╔═ test 0807 ═╗ +807 +╔═ test 0808 ═╗ +808 +╔═ test 0809 ═╗ +809 +╔═ test 0810 ═╗ +810 +╔═ test 0811 ═╗ +811 +╔═ test 0812 ═╗ +812 +╔═ test 0813 ═╗ +813 +╔═ test 0814 ═╗ +814 +╔═ test 0815 ═╗ +815 +╔═ test 0816 ═╗ +816 +╔═ test 0817 ═╗ +817 +╔═ test 0818 ═╗ +818 +╔═ test 0819 ═╗ +819 +╔═ test 0820 ═╗ +820 +╔═ test 0821 ═╗ +821 +╔═ test 0822 ═╗ +822 +╔═ test 0823 ═╗ +823 +╔═ test 0824 ═╗ +824 +╔═ test 0825 ═╗ +825 +╔═ test 0826 ═╗ +826 +╔═ test 0827 ═╗ +827 +╔═ test 0828 ═╗ +828 +╔═ test 0829 ═╗ +829 +╔═ test 0830 ═╗ +830 +╔═ test 0831 ═╗ +831 +╔═ test 0832 ═╗ +832 +╔═ test 0833 ═╗ +833 +╔═ test 0834 ═╗ +834 +╔═ test 0835 ═╗ +835 +╔═ test 0836 ═╗ +836 +╔═ test 0837 ═╗ +837 +╔═ test 0838 ═╗ +838 +╔═ test 0839 ═╗ +839 +╔═ test 0840 ═╗ +840 +╔═ test 0841 ═╗ +841 +╔═ test 0842 ═╗ +842 +╔═ test 0843 ═╗ +843 +╔═ test 0844 ═╗ +844 +╔═ test 0845 ═╗ +845 +╔═ test 0846 ═╗ +846 +╔═ test 0847 ═╗ +847 +╔═ test 0848 ═╗ +848 +╔═ test 0849 ═╗ +849 +╔═ test 0850 ═╗ +850 +╔═ test 0851 ═╗ +851 +╔═ test 0852 ═╗ +852 +╔═ test 0853 ═╗ +853 +╔═ test 0854 ═╗ +854 +╔═ test 0855 ═╗ +855 +╔═ test 0856 ═╗ +856 +╔═ test 0857 ═╗ +857 +╔═ test 0858 ═╗ +858 +╔═ test 0859 ═╗ +859 +╔═ test 0860 ═╗ +860 +╔═ test 0861 ═╗ +861 +╔═ test 0862 ═╗ +862 +╔═ test 0863 ═╗ +863 +╔═ test 0864 ═╗ +864 +╔═ test 0865 ═╗ +865 +╔═ test 0866 ═╗ +866 +╔═ test 0867 ═╗ +867 +╔═ test 0868 ═╗ +868 +╔═ test 0869 ═╗ +869 +╔═ test 0870 ═╗ +870 +╔═ test 0871 ═╗ +871 +╔═ test 0872 ═╗ +872 +╔═ test 0873 ═╗ +873 +╔═ test 0874 ═╗ +874 +╔═ test 0875 ═╗ +875 +╔═ test 0876 ═╗ +876 +╔═ test 0877 ═╗ +877 +╔═ test 0878 ═╗ +878 +╔═ test 0879 ═╗ +879 +╔═ test 0880 ═╗ +880 +╔═ test 0881 ═╗ +881 +╔═ test 0882 ═╗ +882 +╔═ test 0883 ═╗ +883 +╔═ test 0884 ═╗ +884 +╔═ test 0885 ═╗ +885 +╔═ test 0886 ═╗ +886 +╔═ test 0887 ═╗ +887 +╔═ test 0888 ═╗ +888 +╔═ test 0889 ═╗ +889 +╔═ test 0890 ═╗ +890 +╔═ test 0891 ═╗ +891 +╔═ test 0892 ═╗ +892 +╔═ test 0893 ═╗ +893 +╔═ test 0894 ═╗ +894 +╔═ test 0895 ═╗ +895 +╔═ test 0896 ═╗ +896 +╔═ test 0897 ═╗ +897 +╔═ test 0898 ═╗ +898 +╔═ test 0899 ═╗ +899 +╔═ test 0900 ═╗ +900 +╔═ test 0901 ═╗ +901 +╔═ test 0902 ═╗ +902 +╔═ test 0903 ═╗ +903 +╔═ test 0904 ═╗ +904 +╔═ test 0905 ═╗ +905 +╔═ test 0906 ═╗ +906 +╔═ test 0907 ═╗ +907 +╔═ test 0908 ═╗ +908 +╔═ test 0909 ═╗ +909 +╔═ test 0910 ═╗ +910 +╔═ test 0911 ═╗ +911 +╔═ test 0912 ═╗ +912 +╔═ test 0913 ═╗ +913 +╔═ test 0914 ═╗ +914 +╔═ test 0915 ═╗ +915 +╔═ test 0916 ═╗ +916 +╔═ test 0917 ═╗ +917 +╔═ test 0918 ═╗ +918 +╔═ test 0919 ═╗ +919 +╔═ test 0920 ═╗ +920 +╔═ test 0921 ═╗ +921 +╔═ test 0922 ═╗ +922 +╔═ test 0923 ═╗ +923 +╔═ test 0924 ═╗ +924 +╔═ test 0925 ═╗ +925 +╔═ test 0926 ═╗ +926 +╔═ test 0927 ═╗ +927 +╔═ test 0928 ═╗ +928 +╔═ test 0929 ═╗ +929 +╔═ test 0930 ═╗ +930 +╔═ test 0931 ═╗ +931 +╔═ test 0932 ═╗ +932 +╔═ test 0933 ═╗ +933 +╔═ test 0934 ═╗ +934 +╔═ test 0935 ═╗ +935 +╔═ test 0936 ═╗ +936 +╔═ test 0937 ═╗ +937 +╔═ test 0938 ═╗ +938 +╔═ test 0939 ═╗ +939 +╔═ test 0940 ═╗ +940 +╔═ test 0941 ═╗ +941 +╔═ test 0942 ═╗ +942 +╔═ test 0943 ═╗ +943 +╔═ test 0944 ═╗ +944 +╔═ test 0945 ═╗ +945 +╔═ test 0946 ═╗ +946 +╔═ test 0947 ═╗ +947 +╔═ test 0948 ═╗ +948 +╔═ test 0949 ═╗ +949 +╔═ test 0950 ═╗ +950 +╔═ test 0951 ═╗ +951 +╔═ test 0952 ═╗ +952 +╔═ test 0953 ═╗ +953 +╔═ test 0954 ═╗ +954 +╔═ test 0955 ═╗ +955 +╔═ test 0956 ═╗ +956 +╔═ test 0957 ═╗ +957 +╔═ test 0958 ═╗ +958 +╔═ test 0959 ═╗ +959 +╔═ test 0960 ═╗ +960 +╔═ test 0961 ═╗ +961 +╔═ test 0962 ═╗ +962 +╔═ test 0963 ═╗ +963 +╔═ test 0964 ═╗ +964 +╔═ test 0965 ═╗ +965 +╔═ test 0966 ═╗ +966 +╔═ test 0967 ═╗ +967 +╔═ test 0968 ═╗ +968 +╔═ test 0969 ═╗ +969 +╔═ test 0970 ═╗ +970 +╔═ test 0971 ═╗ +971 +╔═ test 0972 ═╗ +972 +╔═ test 0973 ═╗ +973 +╔═ test 0974 ═╗ +974 +╔═ test 0975 ═╗ +975 +╔═ test 0976 ═╗ +976 +╔═ test 0977 ═╗ +977 +╔═ test 0978 ═╗ +978 +╔═ test 0979 ═╗ +979 +╔═ test 0980 ═╗ +980 +╔═ test 0981 ═╗ +981 +╔═ test 0982 ═╗ +982 +╔═ test 0983 ═╗ +983 +╔═ test 0984 ═╗ +984 +╔═ test 0985 ═╗ +985 +╔═ test 0986 ═╗ +986 +╔═ test 0987 ═╗ +987 +╔═ test 0988 ═╗ +988 +╔═ test 0989 ═╗ +989 +╔═ test 0990 ═╗ +990 +╔═ test 0991 ═╗ +991 +╔═ test 0992 ═╗ +992 +╔═ test 0993 ═╗ +993 +╔═ test 0994 ═╗ +994 +╔═ test 0995 ═╗ +995 +╔═ test 0996 ═╗ +996 +╔═ test 0997 ═╗ +997 +╔═ test 0998 ═╗ +998 +╔═ test 0999 ═╗ +999 +╔═ test 1000 ═╗ +1000 +╔═ [end of file] ═╗ diff --git a/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_StringSpecTest.kt b/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_StringSpecTest.kt deleted file mode 100644 index 105a5206b..000000000 --- a/jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_StringSpecTest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package undertest.kotest - -import com.diffplug.selfie.coroutines.expectSelfie -import io.kotest.core.spec.style.StringSpec - -class UT_StringSpecTest : - StringSpec({ - "a" { expectSelfie("a").toMatchDisk() } - "b" { expectSelfie("b").toMatchDisk() } - "c" { expectSelfie("c").toMatchDisk() } - }) diff --git a/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/MySpec.kt b/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/MySpec.kt new file mode 100644 index 000000000..5ec24de8e --- /dev/null +++ b/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/MySpec.kt @@ -0,0 +1,9 @@ +package kotest + +import io.kotest.core.spec.style.FunSpec + +class MySpec : FunSpec() { + init { + test("foo") {} + } +} \ No newline at end of file diff --git a/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/UT_StringSpecTest.kt b/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/UT_StringSpecTest.kt new file mode 100644 index 000000000..e7db061de --- /dev/null +++ b/jvm/undertest-kotest/src/jvmTest/kotlin/kotest/UT_StringSpecTest.kt @@ -0,0 +1,10 @@ +package kotest + +import com.diffplug.selfie.coroutines.expectSelfie +import io.kotest.core.spec.style.StringSpec + +class UTStringSpecTest : StringSpec({ + "a" { expectSelfie("a").toMatchDisk() } + "b" { expectSelfie("b").toMatchDisk() } + "c" { expectSelfie("c").toMatchDisk() } +}) \ No newline at end of file From edc0ebe17dd4d32af323c3c6b0f4b20858eb2574 Mon Sep 17 00:00:00 2001 From: sksamuel Date: Sun, 22 Feb 2026 15:09:15 -0600 Subject: [PATCH 7/9] Add UTStringSpecTest snapshot Co-Authored-By: Claude Sonnet 4.6 --- .../src/commonTest/kotlin/kotest/UTStringSpecTest.ss | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 jvm/undertest-kotest/src/commonTest/kotlin/kotest/UTStringSpecTest.ss diff --git a/jvm/undertest-kotest/src/commonTest/kotlin/kotest/UTStringSpecTest.ss b/jvm/undertest-kotest/src/commonTest/kotlin/kotest/UTStringSpecTest.ss new file mode 100644 index 000000000..920d2f796 --- /dev/null +++ b/jvm/undertest-kotest/src/commonTest/kotlin/kotest/UTStringSpecTest.ss @@ -0,0 +1,7 @@ +╔═ a ═╗ +a +╔═ b ═╗ +b +╔═ c ═╗ +c +╔═ [end of file] ═╗ From ae2d0134e6a02c0b1c7b4d588c722687d38eb024 Mon Sep 17 00:00:00 2001 From: sksamuel Date: Sun, 22 Feb 2026 15:25:30 -0600 Subject: [PATCH 8/9] Refactor: centralize test name extraction logic in SelfieExtension --- .../kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt | 7 ++++--- .../kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt | 5 +++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt b/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt index b15fb563e..843c7e2a3 100644 --- a/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt +++ b/jvm/selfie-runner-junit5/src/main/kotlin/com/diffplug/selfie/junit5/SelfieExtension.kt @@ -43,11 +43,12 @@ class SelfieExtension(projectConfig: AbstractProjectConfig) : execute: suspend (TestCase) -> TestResult ): TestResult { val file = SnapshotSystemJUnit5.forClass(testCase.spec::class.java.name) - val coroutineLocal = CoroutineDiskStorage(DiskStorageJUnit5(file, testCase.name.name)) + val name = testCase.name.name + val coroutineLocal = CoroutineDiskStorage(DiskStorageJUnit5(file, name)) return withContext(currentCoroutineContext() + coroutineLocal) { - file.startTest(testCase.name.name, false) + file.startTest(name, false) val result = execute(testCase) - file.finishedTestWithSuccess(testCase.name.name, false, result.isSuccess) + file.finishedTestWithSuccess(name, false, result.isSuccess) result } } diff --git a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt index 3ee9a74b5..255e9f00c 100644 --- a/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt +++ b/jvm/selfie-runner-kotest/src/commonMain/kotlin/com/diffplug/selfie/kotest/SelfieExtension.kt @@ -90,8 +90,9 @@ class SelfieExtension( val file = results.keys.map { snapshotFileFor(it) }.firstOrNull() ?: return results.entries.forEach { if (it.value.isIgnored) { - file.startTest(it.key.name.name) - file.finishedTestWithSuccess(it.key.name.name, false) + val name = it.key.name.name + file.startTest(name) + file.finishedTestWithSuccess(name, false) } } file.finishedClassWithSuccess(results.entries.all { it.value.isSuccess }) From a17899bf1c06eb63ce3ec5de9187b49f0000773d Mon Sep 17 00:00:00 2001 From: sksamuel Date: Tue, 24 Feb 2026 03:44:30 -0600 Subject: [PATCH 9/9] Remove unused test files, update copyright year, and refactor code formatting in `HarnessKotest`. --- .../diffplug/selfie/kotest/HarnessKotest.kt | 26 +- .../kotlin/kotest/UTStringSpecTest.ss | 7 - .../kotest/UT_ConcurrencyStressTest.ss | 2001 ----------------- .../kotlin/kotest/UT_StringSpecTest.kt | 2 +- 4 files changed, 23 insertions(+), 2013 deletions(-) delete mode 100644 jvm/undertest-kotest/src/commonTest/kotlin/kotest/UTStringSpecTest.ss delete mode 100644 jvm/undertest-kotest/src/commonTest/kotlin/undertest/kotest/UT_ConcurrencyStressTest.ss diff --git a/jvm/selfie-runner-kotest/src/commonTest/kotlin/com/diffplug/selfie/kotest/HarnessKotest.kt b/jvm/selfie-runner-kotest/src/commonTest/kotlin/com/diffplug/selfie/kotest/HarnessKotest.kt index ae9c7c675..6936e7183 100644 --- a/jvm/selfie-runner-kotest/src/commonTest/kotlin/com/diffplug/selfie/kotest/HarnessKotest.kt +++ b/jvm/selfie-runner-kotest/src/commonTest/kotlin/com/diffplug/selfie/kotest/HarnessKotest.kt @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023-2025 DiffPlug + * Copyright (C) 2023-2026 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -177,13 +177,13 @@ open class HarnessKotest() : FunSpec() { fun content() = lines.subList(startInclusive, endInclusive + 1).joinToString("\n") fun setContent(mustBe: String) { FS_SYSTEM.write(subprojectFolder.resolve(subpath)) { - for (i in 0 ..< startInclusive) { + for (i in 0..