diff --git a/analysis/filter/MergeFilter/src/test/kotlin/de/maibornwolff/codecharta/filter/mergefilter/MergeFilterTest.kt b/analysis/filter/MergeFilter/src/test/kotlin/de/maibornwolff/codecharta/filter/mergefilter/MergeFilterTest.kt index 4d71b5f630..0f7a882ec2 100644 --- a/analysis/filter/MergeFilter/src/test/kotlin/de/maibornwolff/codecharta/filter/mergefilter/MergeFilterTest.kt +++ b/analysis/filter/MergeFilter/src/test/kotlin/de/maibornwolff/codecharta/filter/mergefilter/MergeFilterTest.kt @@ -1,13 +1,10 @@ package de.maibornwolff.codecharta.filter.mergefilter -import com.varabyte.kotter.runtime.Session -import com.varabyte.kotterx.test.foundation.testSession import de.maibornwolff.codecharta.filter.mergefilter.MergeFilter.Companion.main import de.maibornwolff.codecharta.serialization.ProjectDeserializer -import de.maibornwolff.codecharta.tools.interactiveparser.startSession +import de.maibornwolff.codecharta.tools.interactiveparser.SessionMock import io.mockk.every import io.mockk.mockkObject -import io.mockk.mockkStatic import io.mockk.unmockkAll import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach @@ -28,7 +25,7 @@ class MergeFilterTest { @BeforeEach fun beforeTest() { - mockStartSession() + SessionMock.mockStartSession() } @AfterEach @@ -612,19 +609,4 @@ class MergeFilterTest { ).contains("Input project structure doesn't have '/root/' as a base folder. If that's intended open an issue.") } } - - private fun mockStartSession() { - mockkStatic("de.maibornwolff.codecharta.tools.interactiveparser.ParserDialogInterfaceKt") - every { startSession(any Any>()) } answers { - startTestSession { firstArg Any>()(this) } - } - } - - private fun startTestSession(block: Session.() -> T): T { - var returnValue: T? = null - testSession { - returnValue = block() - } - return returnValue ?: throw IllegalStateException("Session did not return a value.") - } } diff --git a/analysis/tools/InteractiveParser/build.gradle.kts b/analysis/tools/InteractiveParser/build.gradle.kts index 0810a5ca16..f25a64f836 100644 --- a/analysis/tools/InteractiveParser/build.gradle.kts +++ b/analysis/tools/InteractiveParser/build.gradle.kts @@ -4,4 +4,11 @@ repositories { dependencies { implementation(libs.kotter) + implementation(libs.kotter.test) + implementation(libs.picocli) + + testImplementation(libs.kotlin.test) + testRuntimeOnly(libs.kotlin.reflect) + testImplementation(libs.assertj.core) + testImplementation(libs.mockk) } diff --git a/analysis/tools/InteractiveParser/src/test/kotlin/de/maibornwolff/codecharta/tools/interactiveparser/SessionMock.kt b/analysis/tools/InteractiveParser/src/test/kotlin/de/maibornwolff/codecharta/tools/interactiveparser/SessionMock.kt new file mode 100644 index 0000000000..15357f76f2 --- /dev/null +++ b/analysis/tools/InteractiveParser/src/test/kotlin/de/maibornwolff/codecharta/tools/interactiveparser/SessionMock.kt @@ -0,0 +1,25 @@ +package de.maibornwolff.codecharta.tools.interactiveparser + +import com.varabyte.kotter.runtime.Session +import com.varabyte.kotterx.test.foundation.testSession +import io.mockk.every +import io.mockk.mockkStatic + +class SessionMock { + companion object { + fun mockStartSession() { + mockkStatic("de.maibornwolff.codecharta.tools.interactiveparser.ParserDialogInterfaceKt") + every { startSession(any Any>()) } answers { + startTestSession { firstArg Any>()(this) } + } + } + + private fun startTestSession(block: Session.() -> T): T { + var returnValue: T? = null + testSession { + returnValue = block() + } + return returnValue ?: throw IllegalStateException("Session did not return a value.") + } + } +} diff --git a/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/CcshTest.kt b/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/CcshTest.kt index c8a81bce8f..d8919acea8 100644 --- a/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/CcshTest.kt +++ b/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/CcshTest.kt @@ -1,16 +1,13 @@ package de.maibornwolff.codecharta.ccsh -import com.varabyte.kotter.runtime.Session -import com.varabyte.kotterx.test.foundation.testSession import de.maibornwolff.codecharta.tools.ccsh.Ccsh import de.maibornwolff.codecharta.tools.ccsh.parser.InteractiveDialog import de.maibornwolff.codecharta.tools.ccsh.parser.InteractiveParserSuggestion import de.maibornwolff.codecharta.tools.ccsh.parser.ParserService -import de.maibornwolff.codecharta.tools.interactiveparser.startSession +import de.maibornwolff.codecharta.tools.interactiveparser.SessionMock.Companion.mockStartSession import de.maibornwolff.codecharta.util.Logger import io.mockk.every import io.mockk.mockkObject -import io.mockk.mockkStatic import io.mockk.unmockkAll import io.mockk.verify import org.assertj.core.api.Assertions.assertThat @@ -394,19 +391,4 @@ class CcshTest { assertThat(exitCode).isZero() assertThat(mergedOutputFile).exists() } - - private fun mockStartSession() { - mockkStatic("de.maibornwolff.codecharta.tools.interactiveparser.ParserDialogInterfaceKt") - every { startSession(any Any>()) } answers { - startTestSession { firstArg Any>()(this) } - } - } - - private fun startTestSession(block: Session.() -> T): T { - var returnValue: T? = null - testSession { - returnValue = block() - } - return returnValue ?: throw IllegalStateException("Session did not return a value.") - } } diff --git a/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/parser/InteractiveParserSuggestionTest.kt b/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/parser/InteractiveParserSuggestionTest.kt index 68911eadd5..a4b07a380e 100644 --- a/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/parser/InteractiveParserSuggestionTest.kt +++ b/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/parser/InteractiveParserSuggestionTest.kt @@ -1,15 +1,12 @@ package de.maibornwolff.codecharta.ccsh.parser -import com.varabyte.kotter.runtime.Session -import com.varabyte.kotterx.test.foundation.testSession import de.maibornwolff.codecharta.tools.ccsh.Ccsh import de.maibornwolff.codecharta.tools.ccsh.parser.InteractiveDialog import de.maibornwolff.codecharta.tools.ccsh.parser.InteractiveParserSuggestion import de.maibornwolff.codecharta.tools.ccsh.parser.ParserService -import de.maibornwolff.codecharta.tools.interactiveparser.startSession +import de.maibornwolff.codecharta.tools.interactiveparser.SessionMock import io.mockk.every import io.mockk.mockkObject -import io.mockk.mockkStatic import io.mockk.unmockkAll import io.mockk.verify import org.assertj.core.api.Assertions @@ -47,7 +44,7 @@ class InteractiveParserSuggestionTest { @BeforeEach fun beforeTest() { - mockStartSession() + SessionMock.mockStartSession() } @AfterEach @@ -162,19 +159,4 @@ class InteractiveParserSuggestionTest { Assertions.assertThat(selectedParsers).isEmpty() Assertions.assertThat(errorOut.toString()).contains("Specified invalid or empty path to analyze! Aborting...") } - - private fun mockStartSession() { - mockkStatic("de.maibornwolff.codecharta.tools.interactiveparser.ParserDialogInterfaceKt") - every { startSession(any Any>()) } answers { - startTestSession { firstArg Any>()(this) } - } - } - - private fun startTestSession(block: Session.() -> T): T { - var returnValue: T? = null - testSession { - returnValue = block() - } - return returnValue ?: throw IllegalStateException("Session did not return a value.") - } } diff --git a/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/parser/ParserServiceTest.kt b/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/parser/ParserServiceTest.kt index 3be8e5849c..b1c566b7d5 100644 --- a/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/parser/ParserServiceTest.kt +++ b/analysis/tools/ccsh/src/test/kotlin/de/maibornwolff/codecharta/ccsh/parser/ParserServiceTest.kt @@ -1,6 +1,5 @@ package de.maibornwolff.codecharta.ccsh.parser -import com.varabyte.kotter.runtime.Session import com.varabyte.kotterx.test.foundation.testSession import de.maibornwolff.codecharta.tools.ccsh.Ccsh import de.maibornwolff.codecharta.tools.ccsh.parser.InteractiveDialog @@ -8,12 +7,11 @@ import de.maibornwolff.codecharta.tools.ccsh.parser.ParserService import de.maibornwolff.codecharta.tools.ccsh.parser.repository.PicocliParserRepository import de.maibornwolff.codecharta.tools.interactiveparser.InteractiveParser import de.maibornwolff.codecharta.tools.interactiveparser.ParserDialogInterface -import de.maibornwolff.codecharta.tools.interactiveparser.startSession +import de.maibornwolff.codecharta.tools.interactiveparser.SessionMock import io.mockk.every import io.mockk.mockkClass import io.mockk.mockkConstructor import io.mockk.mockkObject -import io.mockk.mockkStatic import io.mockk.unmockkAll import io.mockk.verify import org.assertj.core.api.Assertions @@ -88,7 +86,7 @@ class ParserServiceTest { val expectedParserCommand = "ccsh " + selectedParser + " " + collectedArgs.map { x -> '"' + x + '"' }.joinToString(" ") - mockStartSession() + SessionMock.mockStartSession() val selectedParserList = listOf(selectedParser) val mockPicocliParserRepository = mockParserRepository(selectedParser, emptyList()) @@ -113,7 +111,7 @@ class ParserServiceTest { mockkObject(InteractiveDialog) every { InteractiveDialog.askParserToExecute(any(), any()) } returns "$fakeParser $fakeParserDescription" - mockStartSession() + SessionMock.mockStartSession() val selectedParser = ParserService.selectParser(cmdLine, PicocliParserRepository()) @@ -178,7 +176,7 @@ class ParserServiceTest { "csvimport" ) - mockStartSession() + SessionMock.mockStartSession() val mockPicocliParserRepository = mockParserRepository(selectedParserList[0], emptyList()) @@ -198,7 +196,7 @@ class ParserServiceTest { @MethodSource("providerParserArguments") fun `should execute parser`(parser: String) { mockParserObject(parser) - mockStartSession() + SessionMock.mockStartSession() ParserService.executeSelectedParser(cmdLine, parser) @@ -234,7 +232,7 @@ class ParserServiceTest { @ParameterizedTest @MethodSource("providerParserArguments") fun `should output message informing about which parser is being configured`(parser: String) { - mockStartSession() + SessionMock.mockStartSession() val mockParserRepository = mockParserRepository(parser, listOf(parser)) @@ -243,13 +241,6 @@ class ParserServiceTest { assertThat(outContent.toString()).contains("Now configuring $parser.") } - private fun mockStartSession() { - mockkStatic("de.maibornwolff.codecharta.tools.interactiveparser.ParserDialogInterfaceKt") - every { startSession(any Any>()) } answers { - startTestSession { firstArg Any>()(this) } - } - } - private fun mockParserObject(name: String): InteractiveParser { val obj = cmdLine.subcommands[name]!!.commandSpec.userObject() as InteractiveParser mockkObject(obj) @@ -284,12 +275,4 @@ class ParserServiceTest { return obj } - - private fun startTestSession(block: Session.() -> T): T { - var returnValue: T? = null - testSession { - returnValue = block() - } - return returnValue ?: throw IllegalStateException("Session did not return a value.") - } }