Skip to content

Commit

Permalink
refactor(analysis): adjust tests #3483
Browse files Browse the repository at this point in the history
  • Loading branch information
BenediktMehl committed Feb 17, 2025
1 parent 2743e82 commit 2c42e57
Show file tree
Hide file tree
Showing 36 changed files with 1,646 additions and 1,566 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package de.maibornwolff.codecharta.exporter.csv

import com.varabyte.kotter.foundation.session
import com.varabyte.kotter.runtime.RunScope
import com.varabyte.kotter.runtime.Session
import de.maibornwolff.codecharta.serialization.FileExtension
Expand All @@ -11,34 +10,24 @@ import de.maibornwolff.codecharta.tools.interactiveparser.ParserDialogInterface

class ParserDialog {
companion object : ParserDialogInterface {
override fun collectParserArgs(): List<String> {
var res = listOf<String>()
session { res = myCollectParserArgs() }
return res
}

internal fun Session.myCollectParserArgs(
fileCallback: suspend RunScope.() -> Unit = {},
outFileCallback: suspend RunScope.() -> Unit = {},
hierarchyCallback: suspend RunScope.() -> Unit = {}
): List<String> {
val inputFileName: String = myPromptDefaultFileFolderInput(
override fun collectParserArgs(session: Session): List<String> {
val inputFileName: String = session.myPromptDefaultFileFolderInput(
inputType = de.maibornwolff.codecharta.tools.inquirer.InputType.FOLDER_AND_FILE,
fileExtensionList = listOf(FileExtension.CCJSON, FileExtension.CCGZ),
onInputReady = fileCallback
onInputReady = fileCallback()
)

val outputFileName: String = myPromptInput(
val outputFileName: String = session.myPromptInput(
message = "What is the name of the output file?",
allowEmptyInput = true,
onInputReady = outFileCallback
onInputReady = outFileCallback()
)

val maxHierarchy: String =
myPromptInputNumber(
session.myPromptInputNumber(
message = "What is the maximum depth of hierarchy",
hint = "10",
onInputReady = hierarchyCallback
onInputReady = hierarchyCallback()
)

return listOfNotNull(
Expand All @@ -47,5 +36,11 @@ class ParserDialog {
"--depth-of-hierarchy=$maxHierarchy"
)
}

internal fun fileCallback(): suspend RunScope.() -> Unit = {}

internal fun outFileCallback(): suspend RunScope.() -> Unit = {}

internal fun hierarchyCallback(): suspend RunScope.() -> Unit = {}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ import com.varabyte.kotter.runtime.terminal.inmemory.press
import com.varabyte.kotter.runtime.terminal.inmemory.type
import com.varabyte.kotterx.test.foundation.testSession
import de.maibornwolff.codecharta.exporter.csv.CSVExporter
import de.maibornwolff.codecharta.exporter.csv.ParserDialog.Companion.myCollectParserArgs
import de.maibornwolff.codecharta.exporter.csv.ParserDialog
import de.maibornwolff.codecharta.exporter.csv.ParserDialog.Companion.collectParserArgs
import io.mockk.every
import io.mockk.mockkObject
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
Expand All @@ -24,21 +27,23 @@ class ParserDialogTest {
fun `should output correct arguments when provided with valid input`() {
val hierarchy = 5

mockkObject(ParserDialog.Companion)

testSession { terminal ->
val parserArguments = myCollectParserArgs(
fileCallback = {
terminal.type(inputFileName)
terminal.press(Keys.ENTER)
},
outFileCallback = {
terminal.type(outputFileName)
terminal.press(Keys.ENTER)
},
hierarchyCallback = {
terminal.type(hierarchy.toString())
terminal.press(Keys.ENTER)
}
)
every { ParserDialog.Companion.fileCallback() } returns {
terminal.type(inputFileName)
terminal.press(Keys.ENTER)
}
every { ParserDialog.Companion.outFileCallback() } returns {
terminal.type(outputFileName)
terminal.press(Keys.ENTER)
}
every { ParserDialog.Companion.hierarchyCallback() } returns {
terminal.type(hierarchy.toString())
terminal.press(Keys.ENTER)
}

val parserArguments = collectParserArgs(this)

val commandLine = CommandLine(CSVExporter())
val parseResult = commandLine.parseArgs(*parserArguments.toTypedArray())
Expand All @@ -54,24 +59,26 @@ class ParserDialogTest {
fun `should prompt user twice for input file when first input file is invalid`() {
val invalidFileName = "inv"

mockkObject(ParserDialog.Companion)

testSession { terminal ->
val parserArguments = myCollectParserArgs(
fileCallback = {
terminal.type(invalidFileName)
terminal.press(Keys.ENTER)
terminal.press(Keys.BACKSPACE, Keys.BACKSPACE, Keys.BACKSPACE)
terminal.type(inputFileName)
terminal.press(Keys.ENTER)
},
outFileCallback = {
terminal.type(outputFileName)
terminal.press(Keys.ENTER)
},
hierarchyCallback = {
terminal.press(Keys.RIGHT)
terminal.press(Keys.ENTER)
}
)
every { ParserDialog.Companion.fileCallback() } returns {
terminal.type(invalidFileName)
terminal.press(Keys.ENTER)
terminal.press(Keys.BACKSPACE, Keys.BACKSPACE, Keys.BACKSPACE)
terminal.type(inputFileName)
terminal.press(Keys.ENTER)
}
every { ParserDialog.Companion.outFileCallback() } returns {
terminal.type(outputFileName)
terminal.press(Keys.ENTER)
}
every { ParserDialog.Companion.hierarchyCallback() } returns {
terminal.press(Keys.RIGHT)
terminal.press(Keys.ENTER)
}

val parserArguments = collectParserArgs(this)

val commandLine = CommandLine(CSVExporter())
val parseResult = commandLine.parseArgs(*parserArguments.toTypedArray())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package de.maibornwolff.codecharta.filter.edgefilter

import com.varabyte.kotter.foundation.session
import com.varabyte.kotter.runtime.RunScope
import com.varabyte.kotter.runtime.Session
import de.maibornwolff.codecharta.serialization.FileExtension
Expand All @@ -12,42 +11,38 @@ import de.maibornwolff.codecharta.util.Logger

class ParserDialog {
companion object : ParserDialogInterface {
override fun collectParserArgs(): List<String> {
var res = listOf<String>()
session { res = myCollectParserArgs() }
return res
}

internal fun Session.myCollectParserArgs(
fileCallback: suspend RunScope.() -> Unit = {},
outFileCallback: suspend RunScope.() -> Unit = {},
separatorCallback: suspend RunScope.() -> Unit = {}
): List<String> {
val inputFileName: String = myPromptDefaultFileFolderInput(
override fun collectParserArgs(session: Session): List<String> {
val inputFileName: String = session.myPromptDefaultFileFolderInput(
inputType = InputType.FILE,
fileExtensionList = listOf(FileExtension.CCJSON, FileExtension.CCGZ),
onInputReady = fileCallback
onInputReady = fileCallback()
)

Logger.info {
"File path: $inputFileName"
}

val outputFileName: String = myPromptInput(
val outputFileName: String = session.myPromptInput(
message = "What is the name of the output file?",
allowEmptyInput = true,
onInputReady = outFileCallback
onInputReady = outFileCallback()
)

val defaultPathSeparator = "/"
val pathSeparator: String = myPromptInput(
val pathSeparator: String = session.myPromptInput(
message = "What is the path separator?",
hint = defaultPathSeparator,
invalidInputMessage = "Please specify a valid path separator like '/' or '\\'",
onInputReady = separatorCallback
onInputReady = separatorCallback()
)

return listOf(inputFileName, "--output-file=$outputFileName", "--path-separator=$pathSeparator")
}

internal fun fileCallback(): suspend RunScope.() -> Unit = {}

internal fun outFileCallback(): suspend RunScope.() -> Unit = {}

internal fun separatorCallback(): suspend RunScope.() -> Unit = {}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import com.varabyte.kotter.foundation.input.Keys
import com.varabyte.kotter.runtime.terminal.inmemory.press
import com.varabyte.kotter.runtime.terminal.inmemory.type
import com.varabyte.kotterx.test.foundation.testSession
import de.maibornwolff.codecharta.filter.edgefilter.ParserDialog.Companion.myCollectParserArgs
import de.maibornwolff.codecharta.filter.edgefilter.ParserDialog.Companion.collectParserArgs
import io.mockk.every
import io.mockk.mockkObject
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
Expand All @@ -22,21 +24,23 @@ class ParserDialogTest {

@Test
fun `should output correct arguments when provided with valid input`() {
mockkObject(ParserDialog.Companion)

testSession { terminal ->
val parserArguments = myCollectParserArgs(
fileCallback = {
terminal.type(inputFileName)
terminal.press(Keys.ENTER)
},
outFileCallback = {
terminal.type(outputFileName)
terminal.press(Keys.ENTER)
},
separatorCallback = {
terminal.type(separator)
terminal.press(Keys.ENTER)
}
)
every { ParserDialog.Companion.fileCallback() } returns {
terminal.type(inputFileName)
terminal.press(Keys.ENTER)
}
every { ParserDialog.Companion.outFileCallback() } returns {
terminal.type(outputFileName)
terminal.press(Keys.ENTER)
}
every { ParserDialog.Companion.separatorCallback() } returns {
terminal.type(separator)
terminal.press(Keys.ENTER)
}

val parserArguments = collectParserArgs(this)

val cmdLine = CommandLine(EdgeFilter())
val parseResult = cmdLine.parseArgs(*parserArguments.toTypedArray())
Expand All @@ -48,27 +52,28 @@ class ParserDialogTest {
}

@Test
fun `should prompt user twice for input file when first input file is invalid`() { // given
fun `should prompt user twice for input file when first input file is invalid`() {
val invalidFileName = ""

mockkObject(ParserDialog.Companion)

testSession { terminal ->
val parserArguments = myCollectParserArgs(
fileCallback = {
terminal.type(invalidFileName)
terminal.press(Keys.ENTER)
terminal.type(inputFileName)
terminal.press(Keys.ENTER)
},
outFileCallback = {
terminal.type(outputFileName)
terminal.press(Keys.ENTER)
},
separatorCallback = {
// accept hint value
terminal.press(Keys.RIGHT)
terminal.press(Keys.ENTER)
}
)
every { ParserDialog.Companion.fileCallback() } returns {
terminal.type(invalidFileName)
terminal.press(Keys.ENTER)
terminal.type(inputFileName)
terminal.press(Keys.ENTER)
}
every { ParserDialog.Companion.outFileCallback() } returns {
terminal.type(outputFileName)
terminal.press(Keys.ENTER)
}
every { ParserDialog.Companion.separatorCallback() } returns {
terminal.press(Keys.RIGHT)
terminal.press(Keys.ENTER)
}

val parserArguments = collectParserArgs(this)

val cmdLine = CommandLine(EdgeFilter())
val parseResult = cmdLine.parseArgs(*parserArguments.toTypedArray())
Expand Down
Loading

0 comments on commit 2c42e57

Please sign in to comment.