PY-22556, PY-23233, PY-23217: Packages with out of init.py not discoverable even by py3 unittest

This commit is contained in:
Ilya.Kazakevich
2017-03-23 17:17:31 +03:00
parent 95bc58d947
commit 7401004904
3 changed files with 7 additions and 3 deletions
@@ -61,7 +61,7 @@ class PyUniversalNoseTestConfiguration(project: Project, factory: PyUniversalNos
override fun isFrameworkInstalled() = VFSTestFrameworkListener.getInstance().isNoseTestInstalled(sdk)
//https://github.com/nose-devs/nose/issues/1042
override fun treatFoldersAsPackages(anchor: PsiElement) = true
override fun packageOnlyIfInitPy(anchor: PsiElement) = true
}
object PyUniversalNoseTestFactory : PyUniversalTestFactory<PyUniversalNoseTestConfiguration>() {
@@ -529,7 +529,7 @@ abstract class PyUniversalTestConfiguration(project: Project,
/**
* When checking if configuration is ok we need to know if folders could be packages: i.e. if foo.bar requires init.py in foo to work
*/
open fun treatFoldersAsPackages(anchor: PsiElement) = (!LanguageLevel.forElement(anchor).isPy3K)
open fun packageOnlyIfInitPy(anchor: PsiElement) = (!LanguageLevel.forElement(anchor).isPy3K)
}
private fun isTestFile(file: PyFile): Boolean {
@@ -595,7 +595,7 @@ object PyUniversalTestsConfigurationProducer : AbstractPythonTestConfigurationPr
private fun getTargetForConfig(configuration: PyUniversalTestConfiguration,
baseElement: PsiElement, fixConfiguration: Boolean = false): ConfigurationTarget? {
val setRelative = (fixConfiguration && configuration.treatFoldersAsPackages(baseElement))
val setRelative = (fixConfiguration && configuration.packageOnlyIfInitPy(baseElement))
var element = baseElement
// Go up until we reach top of the file
@@ -24,6 +24,7 @@ import com.intellij.execution.runners.ExecutionEnvironment
import com.intellij.openapi.options.SettingsEditor
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.psi.PsiElement
import com.jetbrains.python.PythonHelper
import com.jetbrains.python.testing.PythonTestConfigurationsModel
@@ -74,6 +75,9 @@ class PyUniversalUnitTestConfiguration(project: Project, factory: PyUniversalUni
}
override fun isFrameworkInstalled() = true //Unittest is always available
// See loader.py: is_not_importable = not os.path.isfile(os.path.join(start_dir, '__init__.py'))
override fun packageOnlyIfInitPy(anchor: PsiElement) = true
}
object PyUniversalUnitTestFactory : PyUniversalTestFactory<PyUniversalUnitTestConfiguration>() {