aboutsummaryrefslogtreecommitdiff
path: root/pyfakefs/pytest_plugin.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyfakefs/pytest_plugin.py')
-rw-r--r--pyfakefs/pytest_plugin.py59
1 files changed, 54 insertions, 5 deletions
diff --git a/pyfakefs/pytest_plugin.py b/pyfakefs/pytest_plugin.py
index 3d3306c..37b055f 100644
--- a/pyfakefs/pytest_plugin.py
+++ b/pyfakefs/pytest_plugin.py
@@ -8,22 +8,29 @@ def my_fakefs_test(fs):
fs.create_file('/var/data/xx1.txt')
assert os.path.exists('/var/data/xx1.txt')
"""
-import _pytest
+
import py
import pytest
+from _pytest import capture
from pyfakefs.fake_filesystem_unittest import Patcher
+try:
+ from _pytest import pathlib
+except ImportError:
+ pathlib = None # type:ignore[assignment]
+
Patcher.SKIPMODULES.add(py)
Patcher.SKIPMODULES.add(pytest)
-if hasattr(_pytest, "pathlib"):
- Patcher.SKIPMODULES.add(_pytest.pathlib)
+Patcher.SKIPMODULES.add(capture)
+if pathlib is not None:
+ Patcher.SKIPMODULES.add(pathlib)
@pytest.fixture
def fs(request):
- """ Fake filesystem. """
- if hasattr(request, 'param'):
+ """Fake filesystem."""
+ if hasattr(request, "param"):
# pass optional parameters via @pytest.mark.parametrize
patcher = Patcher(*request.param)
else:
@@ -31,3 +38,45 @@ def fs(request):
patcher.setUp()
yield patcher.fs
patcher.tearDown()
+
+
+@pytest.fixture(scope="class")
+def fs_class(request):
+ """Class-scoped fake filesystem fixture."""
+ if hasattr(request, "param"):
+ patcher = Patcher(*request.param)
+ else:
+ patcher = Patcher()
+ patcher.setUp()
+ yield patcher.fs
+ patcher.tearDown()
+
+
+@pytest.fixture(scope="module")
+def fs_module(request):
+ """Module-scoped fake filesystem fixture."""
+ if hasattr(request, "param"):
+ patcher = Patcher(*request.param)
+ else:
+ patcher = Patcher()
+ patcher.setUp()
+ yield patcher.fs
+ patcher.tearDown()
+
+
+@pytest.fixture(scope="session")
+def fs_session(request):
+ """Session-scoped fake filesystem fixture."""
+ if hasattr(request, "param"):
+ patcher = Patcher(*request.param)
+ else:
+ patcher = Patcher()
+ patcher.setUp()
+ yield patcher.fs
+ patcher.tearDown()
+
+
+@pytest.hookimpl(tryfirst=True)
+def pytest_sessionfinish(session, exitstatus):
+ """Make sure that the cache is cleared before the final test shutdown."""
+ Patcher.clear_fs_cache()