Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions testing/test_pluginmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,63 @@ def pytest_configure(self):
config.pluginmanager.register(A())
assert len(values) == 2

@pytest.mark.skipif(
not sys.platform.startswith("win"),
reason="requires a case-insensitive file system",
)
def test_conftestpath_case_sensitivity(self, pytester: Pytester) -> None:
"""Non-regression test for https://github.com/pytest-dev/pytest/issues/9765

Ensures that the conftests are registered in the plugin dictionary with a key
that does not depend on the case of the input path if the filesystem is
case-insensitive.
"""

config = pytester.parseconfig()
pytester.makepyfile(**{"tests/conftest.py": ""})

conftest = pytester.path.joinpath("tests/conftest.py")
conftest_lower = pytester.path.joinpath("TESTS/conftest.py")

mod = config.pluginmanager._importconftest(
conftest, importmode="prepend", rootpath=pytester.path
)

# Those two calls should succeed because the conftest should be registered
# independently of the casing of conftestpath.
assert mod is config.pluginmanager._importconftest(
conftest, importmode="prepend", rootpath=pytester.path
)
assert mod is config.pluginmanager._importconftest(
conftest_lower, importmode="prepend", rootpath=pytester.path
)

def test_conftestpath_no_normalization(self, pytester: Pytester) -> None:
"""Non-regression test for https://github.com/pytest-dev/pytest/issues/9765

Ensures that the conftests are registered in the plugin dictionary with a key
that does not depend on the normalization of the input path.
"""

config = pytester.parseconfig()
pytester.makepyfile(**{"tests/conftest.py": ""})

conftest = pytester.path.joinpath("tests/conftest.py")
contest_similar = pytester.path.joinpath("tests/../tests/conftest.py")

mod = config.pluginmanager._importconftest(
conftest, importmode="prepend", rootpath=pytester.path
)

# Those two calls should succeed because the conftest should be registered
# independently of the normalization of conftestpath.
assert mod is config.pluginmanager._importconftest(
conftest, importmode="prepend", rootpath=pytester.path
)
assert mod is config.pluginmanager._importconftest(
contest_similar, importmode="prepend", rootpath=pytester.path
)

def test_hook_tracing(self, _config_for_test: Config) -> None:
pytestpm = _config_for_test.pluginmanager # fully initialized with plugins
saveindent = []
Expand Down