diff --git a/src/main/kotlin/org/jetbrains/research/testspark/services/CommandLineService.kt b/src/main/kotlin/org/jetbrains/research/testspark/services/CommandLineService.kt index 230074b69..6a8015d39 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/services/CommandLineService.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/services/CommandLineService.kt @@ -4,12 +4,12 @@ import com.intellij.execution.configurations.GeneralCommandLine import com.intellij.execution.process.ScriptRunnerUtil import com.intellij.openapi.components.service import com.intellij.openapi.diagnostic.Logger -import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.util.io.FileUtilRt +import org.jetbrains.research.testspark.editor.Workspace import java.io.File import java.util.* import kotlin.collections.ArrayList @@ -135,8 +135,6 @@ class CommandLineService(private val project: Project) { fun createXmlFromJacoco( className: String, dataFileName: String, - cutModule: Module, - classFQN: String, testCaseName: String, projectBuildPath: String, generatedTestPackage: String, @@ -146,13 +144,13 @@ class CommandLineService(private val project: Project) { // JaCoCo libs val jacocoAgentDir = project.service().getLibrary("jacocoagent.jar") val jacocoCLIDir = project.service().getLibrary("jacococli.jar") - val sourceRoots = ModuleRootManager.getInstance(cutModule).getSourceRoots(false) + val sourceRoots = ModuleRootManager.getInstance(project.service().cutModule!!).getSourceRoots(false) // run the test method with jacoco agent val testExecutionError = runCommandLine( arrayListOf( javaRunner.absolutePath, - "-javaagent:$jacocoAgentDir=destfile=$dataFileName.exec,append=false,includes=$classFQN", + "-javaagent:$jacocoAgentDir=destfile=$dataFileName.exec,append=false,includes=${project.service().classFQN}", "-cp", "${project.service().getPath(projectBuildPath)}${project.service().getLibrary("JUnitRunner.jar")}:$resultPath", "org.jetbrains.research.SingleJUnitTestRunner", @@ -178,7 +176,7 @@ class CommandLineService(private val project: Project) { // for classpath containing cut command.add("--classfiles") - command.add(CompilerModuleExtension.getInstance(cutModule)?.compilerOutputPath!!.path) + command.add(CompilerModuleExtension.getInstance(project.service().cutModule!!)?.compilerOutputPath!!.path) // for each source folder sourceRoots.forEach { root -> diff --git a/src/main/kotlin/org/jetbrains/research/testspark/services/TestCaseDisplayService.kt b/src/main/kotlin/org/jetbrains/research/testspark/services/TestCaseDisplayService.kt index 6e53576df..68c5bbbf8 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/services/TestCaseDisplayService.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/services/TestCaseDisplayService.kt @@ -221,7 +221,7 @@ class TestCaseDisplayService(private val project: Project) { val resetButton = createResetButton(document, textFieldEditor, testCodeFormatted, testCase.testName) // Enable reset button when editor is changed - addListenerToTestDocument(document, resetButton, textFieldEditor, checkbox, testCase.testCode) + addListenerToTestDocument(document, resetButton, textFieldEditor, checkbox, testCase.testCode, testCase.testName) // Set border textFieldEditor.border = getBorder(testCase.testName) @@ -266,8 +266,8 @@ class TestCaseDisplayService(private val project: Project) { settingsProjectState.colorRed, settingsProjectState.colorGreen, settingsProjectState.colorBlue, - 30 - ) + 30, + ), ) if (editor.background.equals(highlightColor)) return defaultEditorColor = editor.background @@ -374,14 +374,14 @@ class TestCaseDisplayService(private val project: Project) { // Apply filter with folders and java files with main class descriptor.withFileFilter { file -> file.isDirectory || ( - file.extension?.lowercase(Locale.getDefault()) == "java" && ( - PsiManager.getInstance(project).findFile(file!!) as PsiJavaFile - ).classes.stream().map { it.name } - .toArray() - .contains( - (PsiManager.getInstance(project).findFile(file) as PsiJavaFile).name.removeSuffix(".java"), - ) + file.extension?.lowercase(Locale.getDefault()) == "java" && ( + PsiManager.getInstance(project).findFile(file!!) as PsiJavaFile + ).classes.stream().map { it.name } + .toArray() + .contains( + (PsiManager.getInstance(project).findFile(file) as PsiJavaFile).name.removeSuffix(".java"), ) + ) } val fileChooser = FileChooser.chooseFiles( @@ -770,7 +770,7 @@ class TestCaseDisplayService(private val project: Project) { document: Document, textFieldEditor: EditorTextField, testCode: String, - testCaseName: String + testCaseName: String, ): JButton { val resetButton = JButton(TestSparkLabelsBundle.defaultValue("resetButton")) resetButton.isEnabled = false @@ -800,75 +800,69 @@ class TestCaseDisplayService(private val project: Project) { textFieldEditor: EditorTextField, checkbox: JCheckBox, testCaseCode: String, + testCaseName: String, ) { document.addDocumentListener(object : DocumentListener { override fun documentChanged(event: DocumentEvent) { - SwingUtilities.invokeLater { - val fileName: String = ('A'..'Z').toList().random().toString() + - (List(20) { ('a'..'z').toList().random() }.joinToString("")) + - ".java" - - val code = project.service().generateCode( - fileName.split(".")[0], - document.text, - project.service().testGenerationData.importsCode, - project.service().testGenerationData.packageLine, - project.service().testGenerationData.runWith, - project.service().testGenerationData.otherInfo, - ) - - var buildPath: String = ProjectRootManager.getInstance(project).contentRoots.first().path - if (project.service().state.buildPath.isEmpty()) { - // User did not set own path - buildPath = getBuildPath(project) - } - - val generatedTestPath: String = project.service().saveGeneratedTests( - project.service().testGenerationData.packageLine, - code, - project.service().resultPath, - fileName, - ) + val fileName: String = ('A'..'Z').toList().random().toString() + + (List(20) { ('a'..'z').toList().random() }.joinToString("")) + + ".java" + + val code = project.service().generateCode( + fileName.split(".")[0], + document.text, + project.service().testGenerationData.importsCode, + project.service().testGenerationData.packageLine, + project.service().testGenerationData.runWith, + project.service().testGenerationData.otherInfo, + ) - println(project.service().compileCode(generatedTestPath, buildPath).first) + var buildPath: String = ProjectRootManager.getInstance(project).contentRoots.first().path + if (project.service().state.buildPath.isEmpty()) { + // User did not set own path + buildPath = getBuildPath(project) + } - val javaHomeDirectory = ProjectRootManager.getInstance(project).projectSdk!!.homeDirectory!! + val generatedTestPath: String = project.service().saveGeneratedTests( + project.service().testGenerationData.packageLine, + code, + project.service().resultPath!!, + fileName, + ) - val javaRunner = - File(javaHomeDirectory.path).walk().filter { it.name.equals("java") && it.isFile }.first() + project.service().compileCode(generatedTestPath, buildPath).first -// val testExecutionError = project.service().createXmlFromJacoco( -// generatedTestFile.name.split('.')[0], -// dataFileName, -// cutModule, -// classFQN, -// testCase.name, -// buildPath, -// generatedTestPackage, -// ) + val dataFileName = "${project.service().resultPath!!}/jacoco-${(List(20) { ('a'..'z').toList().random() }.joinToString(""))}" - textFieldEditor.editor!!.markupModel.removeAllHighlighters() + project.service().createXmlFromJacoco( + fileName.split(".")[0], + dataFileName, + testCaseName, + buildPath, + project.service().testGenerationData.packageLine, + ) -// textFieldEditor.border = getBorder(testCase.name) + textFieldEditor.editor!!.markupModel.removeAllHighlighters() - resetButton.isEnabled = document.text != testCaseCode + textFieldEditor.border = getBorder(testCaseName) - val modifiedLineIndexes = getModifiedLines( - testCaseCode.split("\n"), - document.text.split("\n"), - ) + resetButton.isEnabled = document.text != testCaseCode - for (index in modifiedLineIndexes) { - textFieldEditor.editor!!.markupModel.addLineHighlighter( - DiffColors.DIFF_MODIFIED, - index, - HighlighterLayer.FIRST, - ) - } + val modifiedLineIndexes = getModifiedLines( + testCaseCode.split("\n"), + document.text.split("\n"), + ) - // select checkbox - checkbox.isSelected = true + for (index in modifiedLineIndexes) { + textFieldEditor.editor!!.markupModel.addLineHighlighter( + DiffColors.DIFF_MODIFIED, + index, + HighlighterLayer.FIRST, + ) } + + // select checkbox + checkbox.isSelected = true } }) } diff --git a/src/main/kotlin/org/jetbrains/research/testspark/tools/llm/generation/LLMProcessManager.kt b/src/main/kotlin/org/jetbrains/research/testspark/tools/llm/generation/LLMProcessManager.kt index 4508dcead..765b5604d 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/tools/llm/generation/LLMProcessManager.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/tools/llm/generation/LLMProcessManager.kt @@ -73,7 +73,7 @@ class LLMProcessManager( project.service().key = getKey( project, "${project.service().classFQN}#${codeType.objectDescription}", - ) + ) } // update build path diff --git a/src/main/kotlin/org/jetbrains/research/testspark/tools/llm/generation/TestCoverageCollector.kt b/src/main/kotlin/org/jetbrains/research/testspark/tools/llm/generation/TestCoverageCollector.kt index 830673e4d..3685fa873 100644 --- a/src/main/kotlin/org/jetbrains/research/testspark/tools/llm/generation/TestCoverageCollector.kt +++ b/src/main/kotlin/org/jetbrains/research/testspark/tools/llm/generation/TestCoverageCollector.kt @@ -81,13 +81,11 @@ class TestCoverageCollector( // Execute each test method separately for (testCase in testCases) { // name of .exec and .xml files - val dataFileName = "${generatedTestFile.parentFile.absolutePath}/jacoco-${(List(20) { ('a'..'z').toList().random() }.joinToString(""))}" + val dataFileName = "${project.service().resultPath!!}/jacoco-${(List(20) { ('a'..'z').toList().random() }.joinToString(""))}" val testExecutionError = project.service().createXmlFromJacoco( generatedTestFile.name.split('.')[0], dataFileName, - project.service().cutModule!!, - project.service().classFQN!!, testCase.name, projectBuildPath, generatedTestPackage,