diff --git a/AUTHORS b/AUTHORS index 14bb4e3c18f..7ae2b50d9c6 100644 --- a/AUTHORS +++ b/AUTHORS @@ -87,3 +87,4 @@ Russel Winder Ben Webb Alexei Kozlenok Cal Leeming +Feng Ma diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2b6780ad8a8..f6025bfe88a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,7 +5,8 @@ * -* +* Fix win32 path issue when puttinging custom config file with absolute path + in ``pytest.main("-c your_absolute_path")``. * Fix maximum recursion depth detection when raised error class is not aware of unicode/encoded bytes. diff --git a/_pytest/config.py b/_pytest/config.py index fb7b1774f68..a458e957383 100644 --- a/_pytest/config.py +++ b/_pytest/config.py @@ -104,7 +104,7 @@ def _prepareconfig(args=None, plugins=None): elif not isinstance(args, (tuple, list)): if not isinstance(args, str): raise ValueError("not a string or argument list: %r" % (args,)) - args = shlex.split(args) + args = shlex.split(args, posix=sys.platform == "win32") config = get_config() pluginmanager = config.pluginmanager try: diff --git a/testing/test_config.py b/testing/test_config.py index 92c9bdb8b08..fe06540173e 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -79,7 +79,7 @@ def test_confcutdir(self, testdir): """) result = testdir.inline_run("--confcutdir=.") assert result.ret == 0 - + class TestConfigCmdlineParsing: def test_parsing_again_fails(self, testdir): config = testdir.parseconfig() @@ -101,6 +101,16 @@ def pytest_addoption(parser): config = testdir.parseconfig("-c", "custom.cfg") assert config.getini("custom") == "1" + def test_absolute_win32_path(self, testdir): + temp_cfg_file = testdir.makefile(".cfg", custom=""" + [pytest] + addopts = --version + """) + from os.path import normpath + temp_cfg_file = normpath(str(temp_cfg_file)) + ret = pytest.main("-c " + temp_cfg_file) + assert ret == _pytest.main.EXIT_OK + class TestConfigAPI: def test_config_trace(self, testdir): config = testdir.parseconfig()