From 8ff01dc5f6ab9aabb4ad3a265ce486710791927c Mon Sep 17 00:00:00 2001 From: "Egor.Eliseev" Date: Mon, 15 May 2023 13:06:54 +0300 Subject: [PATCH] PY-60568 Resolving for reserved fixtures from pytest is not working GitOrigin-RevId: 2b013f95e337695c220e75cdbe18b866aa165b6f --- .../testing/pyTestFixtures/PyTestFixture.kt | 16 +++- .../pyTestFixtures/PyTestFixtureUtils.kt | 31 ++++++++ .../_pytest/reserved_fixtures.py | 73 +++++++++++++++++++ .../test_cache_fixture.py | 4 + .../test_capfd_fixture.py | 4 + .../test_capfdbinary_fixture.py | 4 + .../test_caplog_fixture.py | 4 + .../test_capsys_fixture.py | 4 + .../test_capsysbinary_fixture.py | 4 + .../test_doctest_namespace_fixture.py | 4 + .../test_monkeypatch_fixture.py | 4 + .../test_override_cache_fixture.py | 8 ++ .../test_override_capfd_fixture.py | 8 ++ .../test_override_capfdbinary_fixture.py | 8 ++ .../test_override_caplog_fixture.py | 8 ++ .../test_override_capsys_fixture.py | 8 ++ .../test_override_capsysbinary_fixture.py | 8 ++ ...test_override_doctest_namespace_fixture.py | 8 ++ .../test_override_monkeypatch_fixture.py | 8 ++ .../test_override_pytestconfig_fixture.py | 8 ++ .../test_override_pytester_fixture.py | 8 ++ .../test_override_record_property_fixture.py | 8 ++ ...rride_record_testsuite_property_fixture.py | 8 ++ .../test_override_recwarn_fixture.py | 8 ++ .../test_override_testdir_fixture.py | 8 ++ .../test_override_tmp_path_factory_fixture.py | 8 ++ .../test_override_tmp_path_fixture.py | 8 ++ .../test_override_tmpdir_factory_fixture.py | 8 ++ .../test_override_tmpdir_fixture.py | 8 ++ .../test_pytestconfig_fixture.py | 4 + .../test_pytester_fixture.py | 4 + .../test_record_property_fixture.py | 4 + .../test_record_testsuite_property_fixture.py | 4 + .../test_recwarn_fixture.py | 4 + .../test_request_in_fixture.py | 0 .../test_request_in_test.py | 0 .../test_request_usages.py | 0 .../test_testdir_fixture.py | 4 + .../test_tmp_path_factory_fixture.py | 4 + .../test_tmp_path_fixture.py | 4 + .../test_tmpdir_factory_fixture.py | 4 + .../test_tmpdir_fixture.py | 4 + .../testing/PyTestFixtureOverridingTest.kt | 61 +++++++++++++--- 43 files changed, 382 insertions(+), 15 deletions(-) create mode 100644 python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixtureUtils.kt create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/_pytest/reserved_fixtures.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_cache_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capfd_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capfdbinary_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_caplog_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capsys_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capsysbinary_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_doctest_namespace_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_monkeypatch_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_cache_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capfd_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capfdbinary_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_caplog_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capsys_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capsysbinary_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_doctest_namespace_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_monkeypatch_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_pytestconfig_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_pytester_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_record_property_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_record_testsuite_property_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_recwarn_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_testdir_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmp_path_factory_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmp_path_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmpdir_factory_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmpdir_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_pytestconfig_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_pytester_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_record_property_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_record_testsuite_property_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_recwarn_fixture.py rename python/testData/testPytestFixtureOverriding/{testRequest => testReservedFixtures}/test_request_in_fixture.py (100%) rename python/testData/testPytestFixtureOverriding/{testRequest => testReservedFixtures}/test_request_in_test.py (100%) rename python/testData/testPytestFixtureOverriding/{testRequest => testReservedFixtures}/test_request_usages.py (100%) create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_testdir_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmp_path_factory_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmp_path_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmpdir_factory_fixture.py create mode 100644 python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmpdir_fixture.py diff --git a/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixture.kt b/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixture.kt index a7da27ab7bc2..6d73ec23c376 100644 --- a/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixture.kt +++ b/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixture.kt @@ -21,9 +21,6 @@ import com.jetbrains.python.testing.TestRunnerService import com.jetbrains.python.testing.autoDetectTests.PyAutoDetectionConfigurationFactory import com.jetbrains.python.testing.isTestElement -private const val CONFTEST_PY = "conftest.py" -private const val REQUEST_FIXTURE = "request" - private val decoratorNames = arrayOf("pytest.fixture", "fixture") private val PyFunction.asFixture: PyTestFixture? @@ -122,6 +119,19 @@ private fun findRightFixture(fixtureCandidates: List, } } + // search reserved fixture in "_pytest" dir + if (!fixtureCandidates.isEmpty()) { + fixtureCandidates.find { fixtureCandidate -> + fixtureCandidate.function?.containingFile?.containingDirectory?.name == _PYTEST_DIR && fixtureNamedParameter.name in reservedFixturesSet + }?.let { return NamedFixtureParameterLink(it, null) } + } + + // search reserved fixture class in "_pytest" dir + if (fixtureNamedParameter.name in reservedFixtureClassSet) { + fixtureNamedParameter.name?.let { + return NamedFixtureParameterLink(PyTestFixture(null, null, it), null) + } + } return null } diff --git a/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixtureUtils.kt b/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixtureUtils.kt new file mode 100644 index 000000000000..ff2a4031fc87 --- /dev/null +++ b/python/src/com/jetbrains/python/testing/pyTestFixtures/PyTestFixtureUtils.kt @@ -0,0 +1,31 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.jetbrains.python.testing.pyTestFixtures + + +const val CONFTEST_PY = "conftest.py" +const val REQUEST_FIXTURE = "request" +const val _PYTEST_DIR = "_pytest" + +val reservedFixturesSet = setOf( + "capfd", + "capfdbinary", + "caplog", + "capsys", + "capsysbinary", + "cache", + "doctest_namespace", + "monkeypatch", + "pytestconfig", + "pytester", + "record_property", + "record_testsuite_property", + "recwarn", + "tmp_path", + "tmp_path_factory" +) + +val reservedFixtureClassSet = setOf( + "testdir", + "tmpdir", + "tmpdir_factory" +) \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/_pytest/reserved_fixtures.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/_pytest/reserved_fixtures.py new file mode 100644 index 000000000000..8e61d407daa9 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/_pytest/reserved_fixtures.py @@ -0,0 +1,73 @@ +@fixture +def cache(): + pass + + +@fixture +def capfd(): + pass + + +@fixture +def capfdbinary(): + pass + + +@fixture +def caplog(): + pass + + +@fixture +def capsys(): + pass + + +@fixture +def capsysbinary(): + pass + + +@fixture +def doctest_namespace(): + pass + + +@fixture +def monkeypatch(): + pass + + +@fixture +def pytestconfig(): + pass + + +@fixture +def pytester(): + pass + + +@fixture +def record_property(): + pass + + +@fixture +def record_testsuite_property(): + pass + + +@fixture +def recwarn(): + pass + + +@fixture +def tmp_path(): + pass + + +@fixture +def tmp_path_factory(): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_cache_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_cache_fixture.py new file mode 100644 index 000000000000..55e1823c7878 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_cache_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(cache): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capfd_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capfd_fixture.py new file mode 100644 index 000000000000..1bba0f03e492 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capfd_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(capfd): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capfdbinary_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capfdbinary_fixture.py new file mode 100644 index 000000000000..2decc47afaad --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capfdbinary_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(capfdbinary): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_caplog_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_caplog_fixture.py new file mode 100644 index 000000000000..69cad7e7b3e1 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_caplog_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(caplog): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capsys_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capsys_fixture.py new file mode 100644 index 000000000000..8beb15e18ff6 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capsys_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(capsys): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capsysbinary_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capsysbinary_fixture.py new file mode 100644 index 000000000000..cace7fed74bf --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_capsysbinary_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(capsysbinary): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_doctest_namespace_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_doctest_namespace_fixture.py new file mode 100644 index 000000000000..4f2683eac65f --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_doctest_namespace_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(doctest_namespace): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_monkeypatch_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_monkeypatch_fixture.py new file mode 100644 index 000000000000..7127dce3cd14 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_monkeypatch_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(monkeypatch): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_cache_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_cache_fixture.py new file mode 100644 index 000000000000..8e569932e072 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_cache_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def cache(): + return 1 + +def test_(cache): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capfd_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capfd_fixture.py new file mode 100644 index 000000000000..c7bef98710f9 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capfd_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def capfd(): + return 1 + +def test_(capfd): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capfdbinary_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capfdbinary_fixture.py new file mode 100644 index 000000000000..7657c0007a16 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capfdbinary_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def capfdbinary(): + return 1 + +def test_(capfdbinary): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_caplog_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_caplog_fixture.py new file mode 100644 index 000000000000..4e2ac65086e9 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_caplog_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def caplog(): + return 1 + +def test_(caplog): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capsys_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capsys_fixture.py new file mode 100644 index 000000000000..3f3bc0f7746a --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capsys_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def capsys(): + return 1 + +def test_(capsys): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capsysbinary_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capsysbinary_fixture.py new file mode 100644 index 000000000000..06e0d38be67d --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_capsysbinary_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def capsysbinary(): + return 1 + +def test_(capsysbinary): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_doctest_namespace_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_doctest_namespace_fixture.py new file mode 100644 index 000000000000..95ed07ca71da --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_doctest_namespace_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def doctest_namespace(): + return 1 + +def test_(doctest_namespace): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_monkeypatch_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_monkeypatch_fixture.py new file mode 100644 index 000000000000..814e968c517f --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_monkeypatch_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def monkeypatch(): + return 1 + +def test_(monkeypatch): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_pytestconfig_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_pytestconfig_fixture.py new file mode 100644 index 000000000000..201431340584 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_pytestconfig_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def pytestconfig(): + return 1 + +def test_(pytestconfig): +pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_pytester_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_pytester_fixture.py new file mode 100644 index 000000000000..67ffcc003522 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_pytester_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def pytester(): + return 1 + +def test_(pytester): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_record_property_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_record_property_fixture.py new file mode 100644 index 000000000000..7f66a8e995b4 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_record_property_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def record_property(): + return 1 + +def test_(record_property): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_record_testsuite_property_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_record_testsuite_property_fixture.py new file mode 100644 index 000000000000..cff0cf8b5bfa --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_record_testsuite_property_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def record_testsuite_property(): + return 1 + +def test_(record_testsuite_property): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_recwarn_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_recwarn_fixture.py new file mode 100644 index 000000000000..4e341e107e34 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_recwarn_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def recwarn(): + return 1 + +def test_(recwarn): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_testdir_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_testdir_fixture.py new file mode 100644 index 000000000000..aad570a13cd3 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_testdir_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def testdir(): + return 1 + +def test_(testdir): +pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmp_path_factory_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmp_path_factory_fixture.py new file mode 100644 index 000000000000..50207130819e --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmp_path_factory_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def tmp_path_factory(): + return 1 + +def test_(tmp_path_factory): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmp_path_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmp_path_fixture.py new file mode 100644 index 000000000000..407cc3affa02 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmp_path_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def tmp_path(): + return 1 + +def test_(tmp_path): +pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmpdir_factory_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmpdir_factory_fixture.py new file mode 100644 index 000000000000..15dc9562661f --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmpdir_factory_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def tmpdir_factory(): + return 1 + +def test_(tmpdir_factory): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmpdir_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmpdir_fixture.py new file mode 100644 index 000000000000..b1c0a4a725f9 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_override_tmpdir_fixture.py @@ -0,0 +1,8 @@ +import pytest + +@pytest.fixture +def tmpdir(): + return 1 + +def test_(tmpdir): + pass diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_pytestconfig_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_pytestconfig_fixture.py new file mode 100644 index 000000000000..c1132c37ecf7 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_pytestconfig_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(pytestconfig): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_pytester_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_pytester_fixture.py new file mode 100644 index 000000000000..2193c775a217 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_pytester_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(pytester): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_record_property_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_record_property_fixture.py new file mode 100644 index 000000000000..7f2576f4e67d --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_record_property_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(record_property): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_record_testsuite_property_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_record_testsuite_property_fixture.py new file mode 100644 index 000000000000..4a4cbe77ae87 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_record_testsuite_property_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(record_testsuite_property): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_recwarn_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_recwarn_fixture.py new file mode 100644 index 000000000000..478519b9ea7e --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_recwarn_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(recwarn): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testRequest/test_request_in_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_request_in_fixture.py similarity index 100% rename from python/testData/testPytestFixtureOverriding/testRequest/test_request_in_fixture.py rename to python/testData/testPytestFixtureOverriding/testReservedFixtures/test_request_in_fixture.py diff --git a/python/testData/testPytestFixtureOverriding/testRequest/test_request_in_test.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_request_in_test.py similarity index 100% rename from python/testData/testPytestFixtureOverriding/testRequest/test_request_in_test.py rename to python/testData/testPytestFixtureOverriding/testReservedFixtures/test_request_in_test.py diff --git a/python/testData/testPytestFixtureOverriding/testRequest/test_request_usages.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_request_usages.py similarity index 100% rename from python/testData/testPytestFixtureOverriding/testRequest/test_request_usages.py rename to python/testData/testPytestFixtureOverriding/testReservedFixtures/test_request_usages.py diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_testdir_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_testdir_fixture.py new file mode 100644 index 000000000000..bac29d9047fe --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_testdir_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(testdir): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmp_path_factory_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmp_path_factory_fixture.py new file mode 100644 index 000000000000..a55a24ebb6d0 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmp_path_factory_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(tmp_path_factory): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmp_path_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmp_path_fixture.py new file mode 100644 index 000000000000..a795e44fd4d4 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmp_path_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(tmp_path): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmpdir_factory_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmpdir_factory_fixture.py new file mode 100644 index 000000000000..876cfe04d0f1 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmpdir_factory_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(tmpdir_factory): + pass \ No newline at end of file diff --git a/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmpdir_fixture.py b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmpdir_fixture.py new file mode 100644 index 000000000000..ad73354e5b55 --- /dev/null +++ b/python/testData/testPytestFixtureOverriding/testReservedFixtures/test_tmpdir_fixture.py @@ -0,0 +1,4 @@ +import pytest + +def test_(tmpdir): + pass \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/testing/PyTestFixtureOverridingTest.kt b/python/testSrc/com/jetbrains/python/testing/PyTestFixtureOverridingTest.kt index 43b27ad88495..82a3305b4222 100644 --- a/python/testSrc/com/jetbrains/python/testing/PyTestFixtureOverridingTest.kt +++ b/python/testSrc/com/jetbrains/python/testing/PyTestFixtureOverridingTest.kt @@ -5,14 +5,13 @@ import com.intellij.psi.* import com.jetbrains.python.fixture.PythonCommonTestCase import com.jetbrains.python.fixtures.PyTestCase import com.jetbrains.python.psi.resolve.ImportedResolveResult -import com.jetbrains.python.testing.pyTestFixtures.PyTestFixtureReference +import com.jetbrains.python.testing.pyTestFixtures.* import junit.framework.TestCase class PyTestFixtureOverridingTest : PyTestCase() { companion object { const val TESTS_SUBDIR = "/testPytestFixtureOverriding" - const val CONFTEST_FILE = "conftest.py" const val SIMPLE_TEST_DIR = "/testSimple" const val SIMPLE_TEST_CONFTEST_FIXTURE = "/test_conftest_fixture.py" @@ -40,11 +39,12 @@ class PyTestFixtureOverridingTest : PyTestCase() { const val COMPLEX_STRUCTURE_TEST_NEW_CONFTEST = "/$COMPLEX_STRUCTURE_TEST_DIR_WITH_CONFTEST_NAME/test_new_conftest.py" const val COMPLEX_STRUCTURE_TEST_ROOT_CONFTEST = "/dir_without_conftest/test_root_conftest.py" - const val REQUEST_TEST_DIR = "/testRequest" - const val REQUEST_FIXTURE = "request" + const val RESERVED_FIXTURES_TEST_DIR = "/testReservedFixtures" + const val RESERVED_FIXTURES_TEST_FILE = "reserved_fixtures.py" + const val REQUEST_TEST_IN_FIXTURE = "/test_request_in_fixture.py" const val REQUEST_TEST_IN_TEST = "/test_request_in_test.py" - const val REQUEST_USAGES_TEST = "${REQUEST_TEST_DIR}/test_request_usages.py" + const val REQUEST_USAGES_TEST = "${RESERVED_FIXTURES_TEST_DIR}/test_request_usages.py" } override fun getTestDataPath() = super.getTestDataPath() + TESTS_SUBDIR @@ -53,10 +53,10 @@ class PyTestFixtureOverridingTest : PyTestCase() { super.setUp() TestRunnerService.getInstance(myFixture.module).selectedFactory = PythonTestConfigurationType.getInstance().pyTestFactory + myFixture.copyDirectoryToProject("", "") } private fun getCaretReference(dirName: String, fileName: String): PsiReference? { - myFixture.copyDirectoryToProject("", "") val psiFile = myFixture.configureByFile(dirName + fileName) return psiFile?.findReferenceAt(myFixture.caretOffset) } @@ -94,8 +94,24 @@ class PyTestFixtureOverridingTest : PyTestCase() { TestCase.assertTrue(hasImportedFixtureStatement) } + private fun getReservedFixturesFiles(fixturesSet: Set): Set { + val result = mutableSetOf() + for (fixture in fixturesSet) { + result.add("/test_${fixture}_fixture.py") + } + return result + } + + private fun getReservedOverrideFixturesFiles(fixturesSet: Set): Set { + val result = mutableSetOf() + for (fixture in fixturesSet) { + result.add("test_override_${fixture}_fixture.py") + } + return result + } + fun testSimpleFixtureFromConftest() { - assertCorrectFile(SIMPLE_TEST_DIR, SIMPLE_TEST_CONFTEST_FIXTURE, CONFTEST_FILE) + assertCorrectFile(SIMPLE_TEST_DIR, SIMPLE_TEST_CONFTEST_FIXTURE, CONFTEST_PY) } fun testSimpleNotResolve() { @@ -115,7 +131,7 @@ class PyTestFixtureOverridingTest : PyTestCase() { } fun testClassConftestFixture() { - assertCorrectFile(CLASS_TEST_DIR, CLASS_TEST_SUBDIR, CONFTEST_FILE) + assertCorrectFile(CLASS_TEST_DIR, CLASS_TEST_SUBDIR, CONFTEST_PY) } fun testImportFixture() { @@ -131,21 +147,21 @@ class PyTestFixtureOverridingTest : PyTestCase() { } fun testComplexStructureNewConftest() { - assertCorrectFile(COMPLEX_STRUCTURE_TEST_DIR, COMPLEX_STRUCTURE_TEST_NEW_CONFTEST, CONFTEST_FILE, COMPLEX_STRUCTURE_TEST_DIR_WITH_CONFTEST_NAME) + assertCorrectFile(COMPLEX_STRUCTURE_TEST_DIR, COMPLEX_STRUCTURE_TEST_NEW_CONFTEST, CONFTEST_PY, COMPLEX_STRUCTURE_TEST_DIR_WITH_CONFTEST_NAME) } fun testComplexStructureRootConftest() { - assertCorrectFile(COMPLEX_STRUCTURE_TEST_DIR, COMPLEX_STRUCTURE_TEST_ROOT_CONFTEST, CONFTEST_FILE, COMPLEX_STRUCTURE_TEST_DIR_NAME) + assertCorrectFile(COMPLEX_STRUCTURE_TEST_DIR, COMPLEX_STRUCTURE_TEST_ROOT_CONFTEST, CONFTEST_PY, COMPLEX_STRUCTURE_TEST_DIR_NAME) } fun testRequestInFixture() { - val fixtureReference = getCaretReference(REQUEST_TEST_DIR, REQUEST_TEST_IN_FIXTURE) as? PyTestFixtureReference + val fixtureReference = getCaretReference(RESERVED_FIXTURES_TEST_DIR, REQUEST_TEST_IN_FIXTURE) as? PyTestFixtureReference TestCase.assertNotNull(fixtureReference) assertEquals(REQUEST_FIXTURE, fixtureReference?.element?.text) } fun testRequestInTest() { - val fixtureReference = getCaretReference(REQUEST_TEST_DIR, REQUEST_TEST_IN_TEST) as? PyTestFixtureReference + val fixtureReference = getCaretReference(RESERVED_FIXTURES_TEST_DIR, REQUEST_TEST_IN_TEST) as? PyTestFixtureReference TestCase.assertNull(fixtureReference) } @@ -153,4 +169,25 @@ class PyTestFixtureOverridingTest : PyTestCase() { val usages = myFixture.testFindUsages(REQUEST_USAGES_TEST) assertEquals(0, usages.size) } + + fun testReservedFixtures() { + for (file in getReservedFixturesFiles(reservedFixturesSet)) { + assertCorrectFile(RESERVED_FIXTURES_TEST_DIR, "/${file}", RESERVED_FIXTURES_TEST_FILE, _PYTEST_DIR) + } + } + + fun testReservedOverrideFixtures() { + val expectedDirName = RESERVED_FIXTURES_TEST_DIR.substring(1) + for (file in getReservedOverrideFixturesFiles(reservedFixturesSet + reservedFixtureClassSet)) { + assertCorrectFile(RESERVED_FIXTURES_TEST_DIR, "/${file}", file, expectedDirName) + } + } + + fun testReservedFixtureClasses() { + for (fixture in reservedFixtureClassSet) { + val fixtureReference = getCaretReference(RESERVED_FIXTURES_TEST_DIR, "/test_${fixture}_fixture.py") as? PyTestFixtureReference + TestCase.assertNotNull(fixtureReference) + assertEquals(fixture, fixtureReference?.element?.text) + } + } } \ No newline at end of file