From 48aa4b3af2394c76c177e90b9332ccdca39605ab Mon Sep 17 00:00:00 2001 From: Franck Charras <29153872+fcharras@users.noreply.github.com> Date: Tue, 19 Dec 2023 13:47:30 +0100 Subject: [PATCH] Add a non regression test for 9765 --- testing/test_pluginmanager.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/testing/test_pluginmanager.py b/testing/test_pluginmanager.py index e5773412f..b01d36d1a 100644 --- a/testing/test_pluginmanager.py +++ b/testing/test_pluginmanager.py @@ -98,6 +98,37 @@ class TestPytestPluginInteractions: 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_hook_tracing(self, _config_for_test: Config) -> None: pytestpm = _config_for_test.pluginmanager # fully initialized with plugins saveindent = []