Skip to content

Commit b687994

Browse files
committed
feat(devins-scala): add support for Scala run configurations and test context provider #100
1 parent 802d634 commit b687994

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package cc.unitmesh.scala.provider
2+
3+
import cc.unitmesh.devti.context.ClassContext
4+
import cc.unitmesh.devti.provider.AutoTestService
5+
import cc.unitmesh.devti.provider.context.TestFileContext
6+
import com.intellij.execution.RunManager
7+
import com.intellij.execution.configurations.RunConfiguration
8+
import com.intellij.execution.configurations.RunProfile
9+
import com.intellij.openapi.module.ModuleUtilCore
10+
import com.intellij.openapi.project.Project
11+
import com.intellij.openapi.vfs.VirtualFile
12+
import com.intellij.psi.PsiElement
13+
import com.intellij.psi.PsiFile
14+
import com.intellij.psi.PsiManager
15+
import org.jetbrains.plugins.scala.lang.psi.api.ScalaFile
16+
import org.jetbrains.plugins.scala.lang.psi.api.ScalaPsiElement
17+
import org.jetbrains.plugins.scala.testingSupport.test.scalatest.ScalaTestConfigurationType
18+
import org.jetbrains.plugins.scala.testingSupport.test.scalatest.ScalaTestRunConfiguration
19+
import org.jetbrains.plugins.scala.testingSupport.test.testdata.AllInPackageTestData
20+
21+
class ScalaTestService : AutoTestService() {
22+
override fun isApplicable(element: PsiElement): Boolean = element is ScalaPsiElement
23+
override fun runConfigurationClass(project: Project): Class<out RunProfile>? = ScalaTestRunConfiguration::class.java
24+
25+
override fun createConfiguration(project: Project, virtualFile: VirtualFile): RunConfiguration? {
26+
val scalaFile = PsiManager.getInstance(project).findFile(virtualFile) as? ScalaFile ?: return null
27+
val settings = RunManager.getInstance(project).createConfiguration("Scala tests", ScalaTestConfigurationType().confFactory())
28+
val configuration = settings.configuration as ScalaTestRunConfiguration
29+
val packageTestData = AllInPackageTestData(configuration)
30+
packageTestData.workingDirectory = scalaFile.project.basePath
31+
configuration.`testConfigurationData_$eq`(packageTestData)
32+
configuration.testKind = packageTestData.kind
33+
configuration.module = ModuleUtilCore.findModuleForPsiElement(scalaFile)
34+
35+
return settings.configuration
36+
}
37+
38+
override fun findOrCreateTestFile(sourceFile: PsiFile, project: Project, element: PsiElement): TestFileContext? {
39+
TODO("Not yet implemented")
40+
}
41+
42+
override fun lookupRelevantClass(project: Project, element: PsiElement): List<ClassContext> {
43+
TODO("Not yet implemented")
44+
}
45+
46+
}

scala/src/main/resources/cc.unitmesh.scala.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,9 @@
99
language="Scala"
1010
implementationClass="cc.unitmesh.scala.context.ScalaClassContextBuilder"
1111
/>
12+
13+
<testContextProvider
14+
language="Scala"
15+
implementation="cc.unitmesh.scala.provider.ScalaTestService" />
1216
</extensions>
1317
</idea-plugin>

0 commit comments

Comments
 (0)