meanas/meanas/test/test_import_fallbacks.py

51 lines
1.6 KiB
Python

import builtins
import importlib
import pathlib
import meanas
from ..fdfd import bloch
from .utils import assert_close
def _reload(module):
return importlib.reload(module)
def _restore_reloaded(monkeypatch, module):
monkeypatch.undo()
return _reload(module)
def test_meanas_import_survives_readme_open_failure(monkeypatch) -> None: # type: ignore[no-untyped-def]
original_open = pathlib.Path.open
def failing_open(self: pathlib.Path, *args, **kwargs): # type: ignore[no-untyped-def]
if self.name == 'README.md':
raise FileNotFoundError('forced README failure')
return original_open(self, *args, **kwargs)
monkeypatch.setattr(pathlib.Path, 'open', failing_open)
reloaded = _reload(meanas)
assert reloaded.__version__ == '0.10'
assert reloaded.__author__ == 'Jan Petykiewicz'
assert reloaded.__doc__ is not None
_restore_reloaded(monkeypatch, meanas)
def test_bloch_reloads_with_numpy_fft_when_pyfftw_is_unavailable(monkeypatch) -> None: # type: ignore[no-untyped-def]
original_import = builtins.__import__
def fake_import(name: str, globals=None, locals=None, fromlist=(), level: int = 0): # type: ignore[no-untyped-def]
if name.startswith('pyfftw'):
raise ImportError('forced pyfftw failure')
return original_import(name, globals, locals, fromlist, level)
monkeypatch.setattr(builtins, '__import__', fake_import)
reloaded = _reload(bloch)
assert reloaded.fftn.__module__ == 'numpy.fft'
assert reloaded.ifftn.__module__ == 'numpy.fft'
_restore_reloaded(monkeypatch, bloch)