Skip to content

Commit 445d94c

Browse files
authored
Improve plugin logic (#1296)
1 parent 9e1303e commit 445d94c

File tree

1 file changed

+43
-24
lines changed

1 file changed

+43
-24
lines changed

pkl-internal-intellij-plugin/src/main/kotlin/org/pkl/internal/intellij/SnippetTestSplitEditor.kt

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ import com.intellij.openapi.project.Project
4040
import com.intellij.openapi.util.UserDataHolderBase
4141
import com.intellij.openapi.vfs.VirtualFile
4242
import com.intellij.openapi.vfs.VirtualFileManager
43+
import com.intellij.psi.JavaPsiFacade
44+
import com.intellij.psi.PsiClass
45+
import com.intellij.psi.search.GlobalSearchScope
4346
import com.intellij.ui.components.JBPanel
4447
import java.awt.BorderLayout
4548
import java.beans.PropertyChangeListener
@@ -328,11 +331,25 @@ class SnippetTestSplitEditor(
328331
return uniqueId
329332
}
330333

331-
private fun executeAllTests(
332-
project: Project,
333-
executor: Executor,
334-
envVars: Map<String, String> = emptyMap(),
335-
) {
334+
private fun getTestClass(project: Project, file: VirtualFile): PsiClass {
335+
val path = file.path
336+
// Pattern: .../LanguageSnippetTests/input/lambdas/lambdaStackTrace2.pkl
337+
val pattern = Regex(".*/([^/]+)/src/test/files/(\\w+)/input/(.+)$")
338+
val match = pattern.find(path)!!
339+
val folder = match.groupValues[2]
340+
val className =
341+
when (folder) {
342+
"LanguageSnippetTests" -> "org.pkl.core.LanguageSnippetTests"
343+
"FormatterSnippetTests" -> "org.pkl.formatter.FormatterSnippetTests"
344+
// legacy; doesn't exist on main branch
345+
"SnippetTests" -> "org.pkl.server.SnippetTests"
346+
else -> throw IllegalStateException("")
347+
}
348+
return JavaPsiFacade.getInstance(project)
349+
.findClass(className, GlobalSearchScope.allScope(project))!!
350+
}
351+
352+
private fun executeAllTests(project: Project, executor: Executor) {
336353
val file = inputEditor.file ?: return
337354

338355
val path = file.path
@@ -341,8 +358,10 @@ class SnippetTestSplitEditor(
341358
val match = pattern.find(path) ?: return
342359

343360
val testType = match.groupValues[2] // e.g., "LanguageSnippetTests"
344-
val uniqueId = "[engine:${testType}Engine]"
345-
executeTest(project, executor, uniqueId, envVars)
361+
executeTest(project, executor, testType) { data ->
362+
data.TEST_OBJECT = JUnitConfiguration.TEST_CLASS
363+
data.setMainClass(getTestClass(project, file))
364+
}
346365
}
347366

348367
private fun executeTest(
@@ -352,14 +371,22 @@ class SnippetTestSplitEditor(
352371
) {
353372
val file = inputEditor.file ?: return
354373
val uniqueId = buildUniqueId(file) ?: return
355-
executeTest(project, executor, uniqueId, envVars)
374+
executeTest(project, executor, file.name) { data ->
375+
data.TEST_OBJECT = JUnitConfiguration.TEST_UNIQUE_ID
376+
data.setUniqueIds(uniqueId)
377+
378+
if (envVars.isNotEmpty()) {
379+
data.envs = envVars.toMutableMap()
380+
data.PASS_PARENT_ENVS = true
381+
}
382+
}
356383
}
357384

358385
private fun executeTest(
359386
project: Project,
360387
executor: Executor,
361-
uniqueId: String,
362-
envVars: Map<String, String> = emptyMap(),
388+
title: String,
389+
configure: (JUnitConfiguration.Data) -> Unit,
363390
) {
364391
val file = inputEditor.file ?: return
365392
val module = ModuleUtil.findModuleForFile(file, project) ?: return
@@ -368,25 +395,17 @@ class SnippetTestSplitEditor(
368395
val configurationType = JUnitConfigurationType.getInstance()
369396
val configurationFactory = configurationType.configurationFactories.first()
370397

371-
val settings =
372-
runManager.createConfiguration(
373-
"Snippet Test: ${file.nameWithoutExtension}",
374-
configurationFactory,
375-
)
398+
val settings = runManager.createConfiguration(title, configurationFactory)
376399

377400
val configuration = settings.configuration as? JUnitConfiguration ?: return
378-
val data = configuration.persistentData
379-
380-
data.TEST_OBJECT = JUnitConfiguration.TEST_UNIQUE_ID
381-
data.setUniqueIds(uniqueId)
382-
383-
if (envVars.isNotEmpty()) {
384-
data.envs = envVars.toMutableMap()
385-
data.PASS_PARENT_ENVS = true
386-
}
401+
configure(configuration.persistentData)
387402

388403
configuration.setModule(module)
389404

405+
// Add the configuration to the RunManager so it appears in recent configurations
406+
runManager.addConfiguration(settings)
407+
runManager.selectedConfiguration = settings
408+
390409
// Add listener to refresh output editor after test completes
391410
val messageBus = project.messageBus.connect()
392411
messageBus.subscribe(

0 commit comments

Comments
 (0)