From 079b1080cf6571587fc3dfe501634043cd6b8da5 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauldmccarthy@gmail.com>
Date: Tue, 27 Feb 2018 16:33:15 +0000
Subject: [PATCH] Unit tests for assertions

---
 tests/test_assertions.py | 173 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 173 insertions(+)
 create mode 100644 tests/test_assertions.py

diff --git a/tests/test_assertions.py b/tests/test_assertions.py
new file mode 100644
index 000000000..40d9cf5cf
--- /dev/null
+++ b/tests/test_assertions.py
@@ -0,0 +1,173 @@
+#!/usr/bin/env python
+#
+# test_assertions.py -
+#
+# Author: Paul McCarthy <pauldmccarthy@gmail.com>
+#
+
+
+import            os
+import os.path as op
+
+import pytest
+
+import fsl.utils.assertions as assertions
+import fsl.utils.tempdir    as tempdir
+
+from . import make_random_image
+from . import testdir
+
+
+def test_assertFileExists():
+
+
+    with tempdir.tempdir():
+        open('file.txt', 'wt').close()
+        os.makedirs(op.join('path', 'to', 'some', 'dir'))
+        open(op.join('path', 'to', 'file.txt'), 'wt').close()
+
+
+        assertions.assertFileExists('file.txt')
+        assertions.assertFileExists(op.join('path', 'to', 'some', 'dir'))
+        assertions.assertFileExists(op.join('path', 'to', 'file.txt'))
+        assertions.assertFileExists('file.txt', op.join('path'))
+
+        with pytest.raises(AssertionError):
+            assertions.assertFileExists(op.join('not', 'a', 'directory'))
+        with pytest.raises(AssertionError):
+            assertions.assertFileExists('notafile.txt')
+        with pytest.raises(AssertionError):
+            assertions.assertFileExists('file.txt', 'notafile.txt')
+
+
+def test_assertIsNifti3D():
+    _test_assertIsNiftiND(3)
+
+def test_assertIsNifti4D():
+    _test_assertIsNiftiND(4)
+
+def _test_assertIsNiftiND(ndims):
+
+    if   ndims == 3: assertFunc = assertions.assertIsNifti3D
+    elif ndims == 4: assertFunc = assertions.assertIsNifti4D
+
+    tests = [((10, ),               False),
+             ((10, 10),             False),
+             ((10, 10, 10),         ndims == 3),
+             ((10, 10, 10, 10),     ndims == 4),
+             ((10, 10, 10, 10, 10), False)]
+
+    with tempdir.tempdir():
+
+        for shape, expected in tests:
+            img = make_random_image('test.nii', dims=shape)
+
+            if expected:
+                assertFunc(img)
+                assertFunc('test.nii')
+            else:
+                with pytest.raises(AssertionError):
+                    assertFunc(img)
+                with pytest.raises(AssertionError):
+                    assertFunc('test.nii')
+
+
+def test_assertIsNifti():
+
+    with tempdir.tempdir():
+        analyze = make_random_image('analyze.img', imgtype=0)
+        nifti1  = make_random_image('nifti1.nii',  imgtype=1)
+        nifti2  = make_random_image('nifti2.nii',  imgtype=2)
+
+        with pytest.raises(AssertionError):
+            assertions.assertIsNifti(analyze)
+        with pytest.raises(AssertionError):
+            assertions.assertIsNifti('analyze.img')
+
+        assertions.assertIsNifti(nifti1)
+        assertions.assertIsNifti('nifti1.nii')
+        assertions.assertIsNifti(nifti2)
+        assertions.assertIsNifti('nifti2.nii')
+        assertions.assertIsNifti(nifti1, nifti2)
+
+
+def test_assertNiftiShape():
+    with tempdir.tempdir():
+        shape3d = (10, 11, 12)
+        shape4d = (10, 11, 12, 13)
+
+        img3d = make_random_image('3d.nii', dims=shape3d)
+        img4d = make_random_image('4d.nii', dims=shape4d)
+
+        assertions.assertNiftiShape(shape3d, img3d)
+        assertions.assertNiftiShape(shape3d, '3d.nii')
+        assertions.assertNiftiShape(shape4d, img4d)
+        assertions.assertNiftiShape(shape4d, '4d.nii')
+
+        assertions.assertNiftiShape(shape3d, img3d, '3d.nii')
+        assertions.assertNiftiShape(shape4d, img4d, '4d.nii')
+
+        with pytest.raises(AssertionError):
+            assertions.assertNiftiShape(shape3d, img4d)
+        with pytest.raises(AssertionError):
+            assertions.assertNiftiShape(shape3d, '4d.nii')
+        with pytest.raises(AssertionError):
+            assertions.assertNiftiShape(shape4d, img3d)
+        with pytest.raises(AssertionError):
+            assertions.assertNiftiShape(shape4d, '3d.nii')
+
+
+def test_assertIsSurfGifti():
+    tests = [
+        ('blah.surf.gii',    True),
+        ('lh.pial.surf.gii', True),
+        ('blah.func.gii',    False),
+        ('blah.nii',         False),
+    ]
+
+    for test, expected in tests:
+
+        if expected:
+            assertions.assertIsSurfGifti(test)
+        else:
+            with pytest.raises(AssertionError):
+                assertions.assertIsSurfGifti(test)
+
+
+def test_assertIsFuncGifti():
+    tests = [
+        ('blah.func.gii',    True),
+        ('lh.pial.func.gii', True),
+        ('blah.surf.gii',    False),
+        ('blah.nii',         False),
+    ]
+
+    for test, expected in tests:
+
+        if expected:
+            assertions.assertIsFuncGifti(test)
+        else:
+            with pytest.raises(AssertionError):
+                assertions.assertIsFuncGifti(test)
+
+
+def test_assertIsMelodicDir():
+
+    # dirname suffix, contents, expected result
+    tests = [
+        ('analysis.ica', ['melodic_IC.nii.gz',  'melodic_mix', 'melodic_FTmix'], True),
+        ('analysis.ica', ['melodic_oIC.nii.gz', 'melodic_mix', 'melodic_FTmix'], True),
+        ('analysis.ica', [                      'melodic_mix', 'melodic_FTmix'], False),
+        ('analysis.ica', ['melodic_IC.nii.gz',                 'melodic_FTmix'], False),
+        ('analysis.ica', ['melodic_IC.nii.gz',  'melodic_mix'],                  False),
+        ('analysis',     ['melodic_IC.nii.gz',  'melodic_mix', 'melodic_FTmix'], False),
+        ('analysis',     ['melodic_oIC.nii.gz', 'melodic_mix', 'melodic_FTmix'], False),
+    ]
+
+    for dirname, paths, expected in tests:
+        with testdir(paths, dirname):
+            if expected:
+                assertions.assertIsMelodicDir(dirname)
+            else:
+                with pytest.raises(AssertionError):
+                    assertions.assertIsMelodicDir(dirname)
-- 
GitLab