diff --git a/distutils/tests/test_dir_util.py b/distutils/tests/test_dir_util.py index 12e643ab..ee76d053 100644 --- a/distutils/tests/test_dir_util.py +++ b/distutils/tests/test_dir_util.py @@ -1,6 +1,7 @@ """Tests for distutils.dir_util.""" import os +import pathlib import stat import unittest.mock as mock from distutils import dir_util, errors @@ -110,3 +111,25 @@ def test_copy_tree_exception_in_listdir(self): ): src = self.tempdirs[-1] dir_util.copy_tree(src, None) + + @pytest.mark.xfail(reason="#304") + def test_mkpath_exception_uncached(self, monkeypatch, tmp_path): + """ + Caching should not remember failed attempts. + + pypa/distutils#304 + """ + + class FailPath(pathlib.Path): + def mkdir(self, *args, **kwargs): + raise OSError("Failed to create directory") + + target = tmp_path / 'foodir' + + with pytest.raises(errors.DistutilsFileError): + mkpath(FailPath(target)) + + assert not target.exists() + + mkpath(target) + assert target.exists()