From b5e00855d09eb58173d3aa1c3242ed95e73ae216 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauld.mccarthy@gmail.com> Date: Fri, 2 Sep 2016 15:19:59 +0100 Subject: [PATCH] Test cases for fsl.utils.path functions. --- tests/test_fsl_utils_path.py | 282 +++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 tests/test_fsl_utils_path.py diff --git a/tests/test_fsl_utils_path.py b/tests/test_fsl_utils_path.py new file mode 100644 index 000000000..bb6b9cb17 --- /dev/null +++ b/tests/test_fsl_utils_path.py @@ -0,0 +1,282 @@ +#!/usr/bin/env python +# +# test_fsl_utils_path.py - Tests functions in the fsl.utils.path module. +# +# Author: Paul McCarthy <pauldmccarthy@gmail.com> +# + +import os.path as op + +import pytest + +import fsl.utils.path as fslpath + + +def test_addExt_exists_shouldPass(testdir): + """Tests the addExt function where the path exists, and the inputs + are valid. + """ + + # If we have a .hdr/.img pair, the .img should take precedence + replacements = {'.hdr' : ['.img', '.img.gz']} + allowedExts = ['.hdr', '.img', '.nii', '.nii.gz', '.img.gz'] + + tests = [ + ('compressed', 'compressed.nii.gz'), + ('compressed.nii.gz', 'compressed.nii.gz'), + ('uncompressed', 'uncompressed.nii'), + ('uncompressed.nii', 'uncompressed.nii'), + ('img_hdr_pair', 'img_hdr_pair.img'), + ('img_hdr_pair.hdr', 'img_hdr_pair.hdr'), + ('img_hdr_pair.img', 'img_hdr_pair.img'), + ('compressed_img_hdr_pair', 'compressed_img_hdr_pair.img.gz'), + ('compressed_img_hdr_pair.hdr', 'compressed_img_hdr_pair.hdr'), + ('compressed_img_hdr_pair.img.gz', 'compressed_img_hdr_pair.img.gz'), + ] + + for test in tests: + prefix = op.join(testdir, 'nifti_formats', test[0]) + output = op.join(testdir, 'nifti_formats', test[1]) + + assert fslpath.addExt(prefix, + allowedExts, + mustExist=True, + replace=replacements) == output + + +def test_addExt_exists_shouldFail(testdir): + """Tests the addExt function with inputs that should cause it to raise an + error. + """ + + replacements = {'.hdr' : ['.img', '.img.gz']} + allowedExts = ['.hdr', '.img', '.nii', '.nii.gz', '.img.gz'] + + shouldFail = [ + + # For tests of length 1, allowedExts/replacements are set from above + # + # For tests of length 2, replacements is set from above, allowedExts + # is set from the tuple (unless False) + # + # For tests of length 3, replacements and allowedExts are set + # from the tuple (unless False) + ('compressed', []), + ('compressed', ['.badsuf']), + + ('img_hdr_pair'), + ('img_hdr_pair', []), + + ('ambiguous'), + ('ambiguous', []), + ('ambiguous', False, {'.hdr' : ['.img']}), + ('ambiguous', [], {'.hdr' : ['.img']}), + ('ambiguous', False, {'.hdr' : ['.img.gz']}), + ('ambiguous', [], {'.hdr' : ['.img.gz']}), + + ('badpath'), + ('badpath.nii.gz'), + ] + + for test in shouldFail: + prefix = op.join(testdir, 'nifti_formats', test[0]) + allowed = allowedExts + replace = replacements + + if len(test) >= 2: + if not (test[1] == False): + allowed = test[1] + + if len(test) == 3: + if not (test[2] == False): + replace = test[2] + + with pytest.raises(fslpath.PathError): + + fslpath.addExt(prefix, + allowed, + mustExist=True, + replace=replace) + + +def test_addExt_noExist(testdir): + + allowedExts = ['.hdr', '.img', '.nii', '.nii.gz', '.img.gz'] + + # Prefix, output, defaultExt, allowedExts + tests = [ + ('blah', 'blahblah', 'blah'), + ('blah', 'blah.blah', '.blah'), + ('blah', None, None), + ('blah.nii', None, None, ['blah']), + ('blah.nii', 'blah.nii', 'blah'), + ('blah', 'blah.nii', '.nii'), + ('blah', 'blah.nii', '.nii', []), + ('blah.nii.gz', 'blah.nii.gz', 'blah'), + ('blah', 'blah.nii', '.nii'), + ('blah', 'blah.nii', '.nii', []), + ] + + for test in tests: + + prefix = test[0] + output = test[1] + + if len(test) >= 3: default = test[2] + else: default = None + if len(test) >= 4: allowed = test[3] + else: allowed = allowedExts + + assert fslpath.addExt(prefix, + allowed, + defaultExt=default, + mustExist=False) == output + + + +def test_removeExt(testdir): + + allowedExts = ['.hdr', '.img', '.nii', '.nii.gz', '.img.gz'] + + # If len(test) == 2, allowedExts is set from above + # Otherwise, it is set from the test tuple + tests = [ + ('blah', 'blah'), + ('blah.blah', 'blah.blah'), + ('blah.blah', 'blah', ['.blah']), + ('blah.blah', 'blah.', ['blah']), + ('blah.nii', 'blah'), + ('blah.nii.gz', 'blah'), + ('blah.img', 'blah'), + ('blah.hdr', 'blah'), + ('blah.img.gz', 'blah'), + ('blah.nii.gz', 'blah.nii.gz', []), + ('blah.nii.gz', 'blah.nii', ['.gz']), + ('blah.nii.gz', 'blah.nii.gz', ['.nii']), + ('blah.nii.gz', 'blah', ['.nii.gz']), + ('blah.nii.gz', 'blah.', ['nii.gz']), + ] + + for test in tests: + + path = test[0] + output = test[1] + + if len(test) == 2: allowed = allowedExts + else: allowed = test[2] + + assert fslpath.removeExt(path, allowed) == output + + +def test_getExt(testdir): + + allowedExts = ['.hdr', '.img', '.nii', '.nii.gz', '.img.gz'] + + # len(test) == 2 -> allowedExts set from above + # Otherwise, allowedExts set from test tuple + shouldPass = [ + ('blah.blah', '.blah', None), + ('blah.blah', '.blah', ['.blah']), + ('blah.blah', 'blah', ['blah']), + ('blah', '', None), + ('blah.nii', '.nii', None), + ('blah.nii.gz', '.gz', None), + + ('blah.nii', '.nii'), + ('blah.nii.gz', '.nii.gz'), + ('blah.hdr', '.hdr'), + ('blah.img', '.img'), + ('blah.img.gz', '.img.gz'), + ] + + shouldRaise = [ + ('blah', ''), + ('blah.blah', ''), + ('blah.blah', '', ['bla']), + ('blah.nii.gz', '', ['.nii']), + ] + + for test in shouldPass: + filename = test[0] + output = test[1] + + if len(test) == 2: allowed = allowedExts + else: allowed = test[2] + + print filename, '==', output + assert fslpath.getExt(filename, allowed) == output + + + for test in shouldRaise: + filename = test[0] + output = test[1] + + if len(test) == 2: allowed = allowedExts + else: allowed = test[2] + + with pytest.raises(fslpath.PathError): + fslpath.getExt(filename, allowed) + + +def test_deepest(): + + # path, suffixes, output + tests = [ + + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.feat'], '/blah.feat'), + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.feat', '.gfeat'], '/blah.feat/foo.ica/fum.gfeat'), + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.gfeat'], '/blah.feat/foo.ica/fum.gfeat'), + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.ica'], '/blah.feat/foo.ica/fum.gfeat/moo.ica'), + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.bob'], None), + ('/blah.feat/foo.ica/fum.gfeat/moo.bob', ['.ica'], '/blah.feat/foo.ica'), + ('/blah.feat/foo.ica/fum.gfeat/moo.bob', ['.bob'], '/blah.feat/foo.ica/fum.gfeat/moo.bob'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.feat'], 'blah.feat'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.feat', '.gfeat'], 'blah.feat/foo.ica/fum.gfeat'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.gfeat'], 'blah.feat/foo.ica/fum.gfeat'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.ica'], 'blah.feat/foo.ica/fum.gfeat/moo.ica'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.bob'], None), + ( 'blah.feat/foo.ica/fum.gfeat/moo.bob', ['.ica'], 'blah.feat/foo.ica'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.bob', ['.ica', '.bob'], 'blah.feat/foo.ica/fum.gfeat/moo.bob'), + + ('/', [], None), + ('', [], None), + ('///', [], None), + ('/', ['blah'], None), + ('', ['blah'], None), + ('///', ['blah'], None), + ] + + for path, suffixes, output in tests: + assert fslpath.deepest(path, suffixes) == output + + +def test_shallowest(): + # path, suffixes, output + tests = [ + + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.feat'], '/blah.feat'), + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.feat', '.gfeat'], '/blah.feat'), + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.gfeat'], '/blah.feat/foo.ica/fum.gfeat'), + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.ica'], '/blah.feat/foo.ica'), + ('/blah.feat/foo.ica/fum.gfeat/moo.ica', ['.bob'], None), + ('/blah.feat/foo.ica/fum.gfeat/moo.bob', ['.ica'], '/blah.feat/foo.ica'), + ('/blah.feat/foo.ica/fum.gfeat/moo.bob', ['.bob'], '/blah.feat/foo.ica/fum.gfeat/moo.bob'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.feat'], 'blah.feat'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.feat', '.gfeat'], 'blah.feat'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.gfeat'], 'blah.feat/foo.ica/fum.gfeat'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.ica'], 'blah.feat/foo.ica'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.ica', ['.bob'], None), + ( 'blah.feat/foo.ica/fum.gfeat/moo.bob', ['.ica'], 'blah.feat/foo.ica'), + ( 'blah.feat/foo.ica/fum.gfeat/moo.bob', ['.ica', '.bob'], 'blah.feat/foo.ica'), + (' blah.feat/foo.ica/fum.gfeat/moo.bob', ['.ica', '.bob'], 'blah.feat/foo.ica'), + + ('/', [], None), + ('', [], None), + ('///', [], None), + ('/', ['blah'], None), + ('', ['blah'], None), + ('///', ['blah'], None), + ] + + for path, suffixes, output in tests: + assert fslpath.shallowest(path, suffixes) == output -- GitLab