51 lines
1.6 KiB
Python
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)
|