Improve plugin logic (#1296)

This commit is contained in:
Daniel Chao
2025-11-04 07:33:54 -08:00
committed by GitHub
parent 9e1303ed57
commit 445d94ccff

View File

@@ -40,6 +40,9 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.UserDataHolderBase import com.intellij.openapi.util.UserDataHolderBase
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiClass
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.ui.components.JBPanel import com.intellij.ui.components.JBPanel
import java.awt.BorderLayout import java.awt.BorderLayout
import java.beans.PropertyChangeListener import java.beans.PropertyChangeListener
@@ -328,11 +331,25 @@ class SnippetTestSplitEditor(
return uniqueId return uniqueId
} }
private fun executeAllTests( private fun getTestClass(project: Project, file: VirtualFile): PsiClass {
project: Project, val path = file.path
executor: Executor, // Pattern: .../LanguageSnippetTests/input/lambdas/lambdaStackTrace2.pkl
envVars: Map<String, String> = emptyMap(), val pattern = Regex(".*/([^/]+)/src/test/files/(\\w+)/input/(.+)$")
) { val match = pattern.find(path)!!
val folder = match.groupValues[2]
val className =
when (folder) {
"LanguageSnippetTests" -> "org.pkl.core.LanguageSnippetTests"
"FormatterSnippetTests" -> "org.pkl.formatter.FormatterSnippetTests"
// legacy; doesn't exist on main branch
"SnippetTests" -> "org.pkl.server.SnippetTests"
else -> throw IllegalStateException("")
}
return JavaPsiFacade.getInstance(project)
.findClass(className, GlobalSearchScope.allScope(project))!!
}
private fun executeAllTests(project: Project, executor: Executor) {
val file = inputEditor.file ?: return val file = inputEditor.file ?: return
val path = file.path val path = file.path
@@ -341,8 +358,10 @@ class SnippetTestSplitEditor(
val match = pattern.find(path) ?: return val match = pattern.find(path) ?: return
val testType = match.groupValues[2] // e.g., "LanguageSnippetTests" val testType = match.groupValues[2] // e.g., "LanguageSnippetTests"
val uniqueId = "[engine:${testType}Engine]" executeTest(project, executor, testType) { data ->
executeTest(project, executor, uniqueId, envVars) data.TEST_OBJECT = JUnitConfiguration.TEST_CLASS
data.setMainClass(getTestClass(project, file))
}
} }
private fun executeTest( private fun executeTest(
@@ -352,14 +371,22 @@ class SnippetTestSplitEditor(
) { ) {
val file = inputEditor.file ?: return val file = inputEditor.file ?: return
val uniqueId = buildUniqueId(file) ?: return val uniqueId = buildUniqueId(file) ?: return
executeTest(project, executor, uniqueId, envVars) executeTest(project, executor, file.name) { data ->
data.TEST_OBJECT = JUnitConfiguration.TEST_UNIQUE_ID
data.setUniqueIds(uniqueId)
if (envVars.isNotEmpty()) {
data.envs = envVars.toMutableMap()
data.PASS_PARENT_ENVS = true
}
}
} }
private fun executeTest( private fun executeTest(
project: Project, project: Project,
executor: Executor, executor: Executor,
uniqueId: String, title: String,
envVars: Map<String, String> = emptyMap(), configure: (JUnitConfiguration.Data) -> Unit,
) { ) {
val file = inputEditor.file ?: return val file = inputEditor.file ?: return
val module = ModuleUtil.findModuleForFile(file, project) ?: return val module = ModuleUtil.findModuleForFile(file, project) ?: return
@@ -368,25 +395,17 @@ class SnippetTestSplitEditor(
val configurationType = JUnitConfigurationType.getInstance() val configurationType = JUnitConfigurationType.getInstance()
val configurationFactory = configurationType.configurationFactories.first() val configurationFactory = configurationType.configurationFactories.first()
val settings = val settings = runManager.createConfiguration(title, configurationFactory)
runManager.createConfiguration(
"Snippet Test: ${file.nameWithoutExtension}",
configurationFactory,
)
val configuration = settings.configuration as? JUnitConfiguration ?: return val configuration = settings.configuration as? JUnitConfiguration ?: return
val data = configuration.persistentData configure(configuration.persistentData)
data.TEST_OBJECT = JUnitConfiguration.TEST_UNIQUE_ID
data.setUniqueIds(uniqueId)
if (envVars.isNotEmpty()) {
data.envs = envVars.toMutableMap()
data.PASS_PARENT_ENVS = true
}
configuration.setModule(module) configuration.setModule(module)
// Add the configuration to the RunManager so it appears in recent configurations
runManager.addConfiguration(settings)
runManager.selectedConfiguration = settings
// Add listener to refresh output editor after test completes // Add listener to refresh output editor after test completes
val messageBus = project.messageBus.connect() val messageBus = project.messageBus.connect()
messageBus.subscribe( messageBus.subscribe(