@@ -40,6 +40,9 @@ import com.intellij.openapi.project.Project
4040import com.intellij.openapi.util.UserDataHolderBase
4141import com.intellij.openapi.vfs.VirtualFile
4242import com.intellij.openapi.vfs.VirtualFileManager
43+ import com.intellij.psi.JavaPsiFacade
44+ import com.intellij.psi.PsiClass
45+ import com.intellij.psi.search.GlobalSearchScope
4346import com.intellij.ui.components.JBPanel
4447import java.awt.BorderLayout
4548import 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