PY-30806: "request" is implicit fixture

Although it is not declared as fixture, it could be used.
This commit is contained in:
Ilya.Kazakevich
2018-07-17 23:37:37 +03:00
parent c289cec5d2
commit 2c30378c64
2 changed files with 6 additions and 11 deletions
@@ -27,12 +27,7 @@ private const val decoratorName: String = "pytest.fixture"
internal fun getFixture(element: PyNamedParameter, typeEvalContext: TypeEvalContext): PyTestFixture? {
val module = ModuleUtilCore.findModuleForPsiElement(element) ?: return null
val func = PsiTreeUtil.getParentOfType(element, PyFunction::class.java) ?: return null
return getFixtures(module, func, typeEvalContext)
.filter { o -> o.name == element.name }
.sortedBy {
ModuleUtilCore.findModuleForPsiElement(it.function) != module
}
.firstOrNull()
return getFixtures(module, func, typeEvalContext).firstOrNull { o -> o.name == element.name }
}
/**
@@ -51,7 +46,7 @@ internal fun PyFunction.isFixture() = decoratorList?.findDecorator(decoratorName
* @property resolveTarget PyElement where this fixture is resolved
* @property name String fixture name
*/
data class PyTestFixture(val function: PyFunction, val resolveTarget: PyElement, val name: String)
data class PyTestFixture(val function: PyFunction? = null, val resolveTarget: PyElement? = function, val name: String)
fun findDecoratorsByName(module: Module, name: String): Iterable<PyDecorator> =
@@ -14,12 +14,12 @@ import com.jetbrains.python.psi.types.PyTypeProviderBase
import com.jetbrains.python.psi.types.TypeEvalContext
class PyTestFixtureReference(namedParameter: PyNamedParameter, fixture: PyTestFixture) : BaseReference(namedParameter) {
private val functionRef = SmartPointerManager.createPointer(fixture.function)
private val resolveRef = SmartPointerManager.createPointer(fixture.resolveTarget)
private val functionRef = fixture.function?.let { SmartPointerManager.createPointer(it) }
private val resolveRef = fixture.resolveTarget?.let { SmartPointerManager.createPointer(it) }
override fun resolve() = resolveRef.element
override fun resolve() = resolveRef?.element
fun getFunction() = functionRef.element
fun getFunction() = functionRef?.element
override fun getVariants() = emptyArray<Any>()