[pycharm] Fixed PY-54972.

The fix allows getTestSpec function to properly construct the testSpec for rerunning failed Django tests.


Merge-request: IJ-MR-128262
Merged-by: Sergey Karpov <sergey.karpov@jetbrains.com>

GitOrigin-RevId: 96f0fed93b347291d8dd49535a5417687d6d0a5b
This commit is contained in:
Sergey Karpov
2024-03-09 11:26:46 +00:00
committed by intellij-monorepo-bot
parent ee35416f38
commit da982277a1

View File

@@ -8,15 +8,18 @@ import com.intellij.execution.configurations.RuntimeConfigurationWarning
import com.intellij.execution.target.TargetEnvironmentRequest
import com.intellij.execution.target.value.*
import com.intellij.execution.testframework.AbstractTestProxy
import com.intellij.openapi.application.ReadAction
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiManager
import com.intellij.psi.util.PsiTreeUtil
import com.jetbrains.python.PyBundle
import com.jetbrains.python.extensions.getQName
import com.jetbrains.python.packaging.PyPackageManager
import com.jetbrains.python.psi.PyClass
import com.jetbrains.python.psi.PyFile
import com.jetbrains.python.psi.PyFunction
import com.jetbrains.python.run.AbstractPythonRunConfiguration
import java.nio.file.Path
/**
* Parent of all test configurations
@@ -66,11 +69,15 @@ protected constructor(project: Project, factory: ConfigurationFactory, private v
pyClass = location.fixedClass
}
val pyFunction = PsiTreeUtil.getParentOfType(element, PyFunction::class.java, false)
val virtualFile = location.virtualFile
return virtualFile?.canonicalPath?.let { localPath ->
val targetPath = targetPath(Path.of(localPath))
(listOf(targetPath) + listOfNotNull(pyClass?.name, pyFunction?.name).map(::constant))
.joinToStringFunction(separator = TEST_NAME_PARTS_SPLITTER)
val virtualFile = location.virtualFile ?: return null
val testSpec = ReadAction.compute<String?, IllegalStateException> {
val pythonFile = PsiManager.getInstance(project).findFile(virtualFile) as? PyFile ?: return@compute null
val qName = pythonFile.getQName() ?: return@compute null
(listOf(qName) + listOfNotNull(pyClass?.name, pyFunction?.name)).joinToString(".")
} ?: return null
return TargetEnvironmentFunction {
testSpec
}
}