From 2ecccbabb9b7e43be895a093f45884b88281052c Mon Sep 17 00:00:00 2001 From: Chris Markiewicz Date: Thu, 3 Oct 2024 10:00:42 -0400 Subject: [PATCH 1/2] TEST: Clear registry before and after every doctest --- sdcflows/conftest.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/sdcflows/conftest.py b/sdcflows/conftest.py index c0d03c1535..e8f2e709be 100644 --- a/sdcflows/conftest.py +++ b/sdcflows/conftest.py @@ -27,6 +27,7 @@ import nibabel import pytest from bids.layout import BIDSLayout +from .fieldmaps import clear_registry # disable ET os.environ['NO_ET'] = '1' @@ -59,18 +60,27 @@ def pytest_report_header(config): @pytest.fixture(autouse=True) -def add_np(doctest_namespace): - doctest_namespace["np"] = numpy - doctest_namespace["nb"] = nibabel - doctest_namespace["os"] = os - doctest_namespace["Path"] = Path - doctest_namespace["layouts"] = layouts - for key, val in list(layouts.items()): - doctest_namespace[key] = Path(val.root) - - doctest_namespace["dsA_dir"] = data_dir / "dsA" - doctest_namespace["dsB_dir"] = data_dir / "dsB" - doctest_namespace["dsC_dir"] = data_dir / "dsC" +def doctest_fixture(doctest_namespace, request): + doctest_plugin = request.config.pluginmanager.getplugin("doctest") + if isinstance(request.node, doctest_plugin.DoctestItem): + doctest_namespace.update( + np=numpy, + nb=nibabel, + os=os, + Path=Path, + layouts=layouts, + dsA_dir=data_dir / "dsA", + dsB_dir=data_dir / "dsB", + dsC_dir=data_dir / "dsC", + ) + doctest_namespace.update((key, Path(val.root)) for key, val in layouts.items()) + + # Start every doctest clean, and clean up after ourselves + clear_registry() + yield + clear_registry() + else: + yield @pytest.fixture From aee2c921efe6a863dd8cd12b19d9644c77aaa7af Mon Sep 17 00:00:00 2001 From: Chris Markiewicz Date: Thu, 3 Oct 2024 10:01:13 -0400 Subject: [PATCH 2/2] TEST: Remove redundant raises check, autoclear registry --- sdcflows/tests/test_fieldmaps.py | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/sdcflows/tests/test_fieldmaps.py b/sdcflows/tests/test_fieldmaps.py index e4f0db155f..1cd1073219 100644 --- a/sdcflows/tests/test_fieldmaps.py +++ b/sdcflows/tests/test_fieldmaps.py @@ -28,6 +28,13 @@ from .. import fieldmaps as fm +@pytest.fixture(autouse=True) +def clear_registry(): + fm.clear_registry() + yield + fm.clear_registry() + + def test_FieldmapFile(dsA_dir): """Test one existing file.""" f1 = fm.FieldmapFile(dsA_dir / "sub-01" / "anat" / "sub-01_T1w.nii.gz") @@ -45,13 +52,12 @@ def test_FieldmapFile(dsA_dir): @pytest.mark.parametrize( - "inputfiles,method,nsources,raises", + "inputfiles,method,nsources", [ ( ("fmap/sub-01_fieldmap.nii.gz", "fmap/sub-01_magnitude.nii.gz"), fm.EstimatorType.MAPPED, 2, - False, ), ( ( @@ -62,51 +68,37 @@ def test_FieldmapFile(dsA_dir): ), fm.EstimatorType.PHASEDIFF, 4, - False, ), ( ("fmap/sub-01_phase1.nii.gz", "fmap/sub-01_phase2.nii.gz"), fm.EstimatorType.PHASEDIFF, 4, - True, ), - (("fmap/sub-01_phase2.nii.gz",), fm.EstimatorType.PHASEDIFF, 4, True), - (("fmap/sub-01_phase1.nii.gz",), fm.EstimatorType.PHASEDIFF, 4, True), + (("fmap/sub-01_phase2.nii.gz",), fm.EstimatorType.PHASEDIFF, 4), + (("fmap/sub-01_phase1.nii.gz",), fm.EstimatorType.PHASEDIFF, 4), ( ("fmap/sub-01_dir-LR_epi.nii.gz", "fmap/sub-01_dir-RL_epi.nii.gz"), fm.EstimatorType.PEPOLAR, 2, - False, ), ( ("fmap/sub-01_dir-LR_epi.nii.gz", "dwi/sub-01_dir-RL_sbref.nii.gz"), fm.EstimatorType.PEPOLAR, 2, - False, ), ( ("anat/sub-01_T1w.nii.gz", "dwi/sub-01_dir-RL_sbref.nii.gz"), fm.EstimatorType.ANAT, 2, - False, ), ], ) -def test_FieldmapEstimation(dsA_dir, inputfiles, method, nsources, raises): +def test_FieldmapEstimation(dsA_dir, inputfiles, method, nsources): """Test errors.""" sub_dir = dsA_dir / "sub-01" sources = [sub_dir / f for f in inputfiles] - if raises is True: - # Ensure that _estimators is still holding values from previous - # parameter set of this parametrized execution. - with pytest.raises(ValueError): - fm.FieldmapEstimation(sources) - - # Clean up so this parameter set can be tested. - fm.clear_registry() - fe = fm.FieldmapEstimation(sources) assert fe.method == method assert len(fe.sources) == nsources