Skip to content

Commit 3c69b77

Browse files
committed
feat(auto-test): refactor and optimize auto-test service implementations #100
The auto-test service implementations for Python, Java, and Kotlin have been refactored and optimized. The Python implementation now returns an empty list for `lookupRelevantClass`, indicating that the feature is not yet implemented. The Java and Kotlin implementations have been significantly refactored to improve code readability and maintainability. The `createConfiguration` method in the Java and Kotlin services has been extracted into a companion object function for better organization. Additionally, the `runConfigurationClass` method in the Kotlin service has been simplified. These changes aim to enhance the performance and maintainability of the auto-test service.
1 parent 620a4cc commit 3c69b77

File tree

3 files changed

+43
-36
lines changed

3 files changed

+43
-36
lines changed

java/src/main/kotlin/cc/unitmesh/idea/service/JavaAutoTestService.kt

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -30,36 +30,7 @@ class JavaAutoTestService : AutoTestService() {
3030
override fun isApplicable(element: PsiElement): Boolean = element.language is JavaLanguage
3131

3232
override fun createConfiguration(project: Project, virtualFile: VirtualFile): RunConfiguration? {
33-
val name = virtualFile.name
34-
35-
val psiFile: PsiJavaFile = PsiManager.getInstance(project).findFile(virtualFile) as? PsiJavaFile ?: return null
36-
val canonicalName = psiFile.packageName + "." + virtualFile.nameWithoutExtension
37-
38-
val runManager = RunManager.getInstance(project)
39-
40-
var moduleName = ""
41-
val moduleForFile = ProjectFileIndex.getInstance(project).getModuleForFile(virtualFile)
42-
// a moduleForFile.name will be like <project>.<module>.<testModule>, so we need to remove the last part and first part
43-
if (moduleForFile != null) {
44-
val moduleNameSplit = moduleForFile.name.split(".").drop(1).dropLast(1).joinToString(":")
45-
if (moduleNameSplit.isNotEmpty()) {
46-
moduleName = "$moduleNameSplit:"
47-
}
48-
}
49-
50-
// todo: add maven ??
51-
val configuration = runManager.createConfiguration(name, GradleExternalTaskConfigurationType::class.java)
52-
val runConfiguration = configuration.configuration as GradleRunConfiguration
53-
54-
runConfiguration.isDebugServerProcess = false
55-
runConfiguration.settings.externalProjectPath = project.guessProjectDir()?.path
56-
// todo: add module for test
57-
runConfiguration.rawCommandLine = moduleName + "test --tests \"${canonicalName}\""
58-
59-
runManager.addConfiguration(configuration)
60-
runManager.selectedConfiguration = configuration
61-
62-
return runConfiguration
33+
return createConfigForGradle(virtualFile, project)
6334
}
6435

6536
override fun findOrCreateTestFile(sourceFile: PsiFile, project: Project, element: PsiElement): TestFileContext? {
@@ -183,5 +154,40 @@ class JavaAutoTestService : AutoTestService() {
183154

184155
companion object {
185156
val log = logger<JavaAutoTestService>()
157+
fun createConfigForGradle(
158+
virtualFile: VirtualFile,
159+
project: Project
160+
): GradleRunConfiguration? {
161+
val name = virtualFile.name
162+
163+
val psiFile: PsiJavaFile = PsiManager.getInstance(project).findFile(virtualFile) as? PsiJavaFile ?: return null
164+
val canonicalName = psiFile.packageName + "." + virtualFile.nameWithoutExtension
165+
166+
val runManager = RunManager.getInstance(project)
167+
168+
var moduleName = ""
169+
val moduleForFile = ProjectFileIndex.getInstance(project).getModuleForFile(virtualFile)
170+
// a moduleForFile.name will be like <project>.<module>.<testModule>, so we need to remove the last part and first part
171+
if (moduleForFile != null) {
172+
val moduleNameSplit = moduleForFile.name.split(".").drop(1).dropLast(1).joinToString(":")
173+
if (moduleNameSplit.isNotEmpty()) {
174+
moduleName = "$moduleNameSplit:"
175+
}
176+
}
177+
178+
// todo: add maven ??
179+
val configuration = runManager.createConfiguration(name, GradleExternalTaskConfigurationType::class.java)
180+
val runConfiguration = configuration.configuration as GradleRunConfiguration
181+
182+
runConfiguration.isDebugServerProcess = false
183+
runConfiguration.settings.externalProjectPath = project.guessProjectDir()?.path
184+
// todo: add module for test
185+
runConfiguration.rawCommandLine = moduleName + "test --tests \"${canonicalName}\""
186+
187+
runManager.addConfiguration(configuration)
188+
runManager.selectedConfiguration = configuration
189+
190+
return runConfiguration
191+
}
186192
}
187193
}

kotlin/src/main/kotlin/cc/unitmesh/kotlin/provider/KotlinAutoTestService.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import cc.unitmesh.devti.context.ClassContext
44
import cc.unitmesh.devti.context.ClassContextProvider
55
import cc.unitmesh.devti.provider.context.TestFileContext
66
import cc.unitmesh.devti.provider.AutoTestService
7+
import cc.unitmesh.idea.service.JavaAutoTestService.Companion.createConfigForGradle
78
import cc.unitmesh.kotlin.util.KotlinPsiUtil
89
import cc.unitmesh.kotlin.util.getReturnTypeReferences
10+
import com.intellij.execution.configurations.RunConfiguration
911
import com.intellij.execution.configurations.RunProfile
1012
import com.intellij.openapi.application.ReadAction
1113
import com.intellij.openapi.application.runReadAction
@@ -32,12 +34,11 @@ class KotlinAutoTestService : AutoTestService() {
3234
val log = logger<KotlinAutoTestService>()
3335
}
3436

35-
override fun runConfigurationClass(project: Project): Class<out RunProfile> {
36-
return GradleRunConfiguration::class.java
37-
}
37+
override fun runConfigurationClass(project: Project): Class<out RunProfile> = GradleRunConfiguration::class.java
38+
override fun isApplicable(element: PsiElement): Boolean = element.language is KotlinLanguage
3839

39-
override fun isApplicable(element: PsiElement): Boolean {
40-
return element.language is KotlinLanguage
40+
override fun createConfiguration(project: Project, virtualFile: VirtualFile): RunConfiguration? {
41+
return createConfigForGradle(virtualFile, project)
4142
}
4243

4344
override fun findOrCreateTestFile(sourceFile: PsiFile, project: Project, element: PsiElement): TestFileContext? {

pycharm/src/main/kotlin/cc/unitmesh/python/provider/PythonAutoTestService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class PythonAutoTestService : AutoTestService() {
4545
}
4646

4747
override fun lookupRelevantClass(project: Project, element: PsiElement): List<ClassContext> {
48-
TODO("Not yet implemented")
48+
return listOf()
4949
}
5050

5151
}

0 commit comments

Comments
 (0)