Skip to content

Commit 8cd83c2

Browse files
committed
TEST: Test GIFTI external file fallback and failure scenarios
1 parent 7e7b800 commit 8cd83c2

File tree

1 file changed

+47
-14
lines changed

1 file changed

+47
-14
lines changed

nibabel/gifti/tests/test_parse_gifti_fast.py

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,18 @@
77
#
88
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
99

10-
from os.path import join as pjoin, dirname
10+
from os.path import join as pjoin, dirname, basename
1111
import sys
1212
import warnings
13+
import shutil
14+
from unittest import mock
1315

1416
import numpy as np
1517

1618
from .. import gifti as gi
1719
from ..util import gifti_endian_codes
18-
from ..parse_gifti_fast import Outputter, parse_gifti_file
20+
from ..parse_gifti_fast import (Outputter, parse_gifti_file, GiftiParseError,
21+
GiftiImageParser)
1922
from ...loadsave import load, save
2023
from ...nifti1 import xform_codes
2124
from ...tmpdirs import InTemporaryDirectory
@@ -417,15 +420,45 @@ def test_parse_with_memmmap():
417420
img1 = load(DATA_FILE7)
418421
img2 = load(DATA_FILE7, mmap=True)
419422
img3 = load(DATA_FILE7, mmap=False)
420-
expect = [DATA_FILE7_darr1, DATA_FILE7_darr2]
421-
assert len(img1.darrays) == len(img2.darrays) == len(expect)
422-
for da1, da2, da3, exp in zip(img1.darrays,
423-
img2.darrays,
424-
img3.darrays,
425-
expect):
426-
assert isinstance(da1.data, np.memmap)
427-
assert isinstance(da2.data, np.memmap)
428-
assert not isinstance(da3.data, np.memmap)
429-
assert_array_almost_equal(da1.data, exp)
430-
assert_array_almost_equal(da2.data, exp)
431-
assert_array_almost_equal(da3.data, exp)
423+
assert len(img1.darrays) == len(img2.darrays) == 2
424+
assert isinstance(img1.darrays[0].data, np.memmap)
425+
assert isinstance(img1.darrays[1].data, np.memmap)
426+
assert isinstance(img2.darrays[0].data, np.memmap)
427+
assert isinstance(img2.darrays[1].data, np.memmap)
428+
assert not isinstance(img3.darrays[0].data, np.memmap)
429+
assert not isinstance(img3.darrays[1].data, np.memmap)
430+
assert_array_almost_equal(img1.darrays[0].data, DATA_FILE7_darr1)
431+
assert_array_almost_equal(img1.darrays[1].data, DATA_FILE7_darr2)
432+
assert_array_almost_equal(img2.darrays[0].data, DATA_FILE7_darr1)
433+
assert_array_almost_equal(img2.darrays[1].data, DATA_FILE7_darr2)
434+
assert_array_almost_equal(img3.darrays[0].data, DATA_FILE7_darr1)
435+
assert_array_almost_equal(img3.darrays[1].data, DATA_FILE7_darr2)
436+
437+
438+
def test_parse_with_memmap_fallback():
439+
img1 = load(DATA_FILE7, mmap=True)
440+
with mock.patch('numpy.memmap', side_effect=ValueError):
441+
img2 = load(DATA_FILE7, mmap=True)
442+
assert isinstance(img1.darrays[0].data, np.memmap)
443+
assert isinstance(img1.darrays[1].data, np.memmap)
444+
assert not isinstance(img2.darrays[0].data, np.memmap)
445+
assert not isinstance(img2.darrays[1].data, np.memmap)
446+
assert_array_almost_equal(img1.darrays[0].data, DATA_FILE7_darr1)
447+
assert_array_almost_equal(img1.darrays[1].data, DATA_FILE7_darr2)
448+
assert_array_almost_equal(img2.darrays[0].data, DATA_FILE7_darr1)
449+
assert_array_almost_equal(img2.darrays[1].data, DATA_FILE7_darr2)
450+
451+
452+
def test_external_file_failure_cases():
453+
# external file cannot be found
454+
with InTemporaryDirectory() as tmpdir:
455+
shutil.copy(DATA_FILE7, '.')
456+
filename = pjoin(tmpdir, basename(DATA_FILE7))
457+
with pytest.raises(GiftiParseError):
458+
img = load(filename)
459+
# load from in-memory xml string (parser requires it as bytes)
460+
with open(DATA_FILE7, 'rb') as f:
461+
xmldata = f.read()
462+
parser = GiftiImageParser()
463+
with pytest.raises(GiftiParseError):
464+
img = parser.parse(xmldata)

0 commit comments

Comments
 (0)