test_If_cnt_passed_uses_NeuroscanFile()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
import unittest
2
from mock import Mock, patch
3
4
class FileFactoryTests(unittest.TestCase):
5
6
    def setUp(self):
7
        self.log = Mock()
8
        self.libs = Mock()
9
        self.libs.hasDependency.return_value = True
10
        self.log = Mock()
11
        self.location = Mock()
12
        self.location.toDictionary.return_value = {'path':''}
13
        self.locationFactory = Mock()
14
        self.locationFactory.fromString.return_value = self.location
15
        self.dependencies = Mock()
16
        self.dependencies.getLocationFactory.return_value = self.locationFactory
17
        self.dependencies.getListener.return_value = self.log
18
        self.dependencies.getLibraries.return_value = self.libs
19
20
    def test_BaseFile(self):
21
        from niprov.files import FileFactory
22
        from niprov.basefile import BaseFile
23
        factory = FileFactory(dependencies=self.dependencies)
24
        fileCreated = factory.locatedAt('example.f')
25
        self.assertIsInstance(fileCreated, BaseFile)
26
27
    def test_If_parrec_passed_uses_ParrecFile(self):
28
        from niprov.files import FileFactory
29
        from niprov.parrec import ParrecFile
30
        factory = FileFactory(dependencies=self.dependencies)
31
        fileCreated = factory.locatedAt('example.PAR')
32
        self.assertIsInstance(fileCreated, ParrecFile)
33
34
    def test_If_nii_passed_uses_NiftiFile(self):
35
        from niprov.files import FileFactory
36
        from niprov.nifti import NiftiFile
37
        factory = FileFactory(dependencies=self.dependencies)
38
        fileCreated = factory.locatedAt('example.nii')
39
        self.assertIsInstance(fileCreated, NiftiFile)
40
41
    def test_If_compressed_nii_passed_uses_NiftiFile(self):
42
        from niprov.files import FileFactory
43
        from niprov.nifti import NiftiFile
44
        factory = FileFactory(dependencies=self.dependencies)
45
        fileCreated = factory.locatedAt('example.nii.gz')
46
        self.assertIsInstance(fileCreated, NiftiFile)
47
48
    def test_If_dicom_passed_uses_DicomFile(self):
49
        from niprov.files import FileFactory
50
        from niprov.dcm import DicomFile
51
        factory = FileFactory(dependencies=self.dependencies)
52
        fileCreated = factory.locatedAt('example.dcm')
53
        self.assertIsInstance(fileCreated, DicomFile)
54
55
    def test_If_fif_passed_uses_FifFile(self):
56
        from niprov.files import FileFactory
57
        from niprov.fif import FifFile
58
        factory = FileFactory(dependencies=self.dependencies)
59
        fileCreated = factory.locatedAt('example.fif')
60
        self.assertIsInstance(fileCreated, FifFile)
61
62
    def test_If_dcm_passed_but_pydicom_not_installed_tells_listener(self):
63
        from niprov.files import FileFactory
64
        from niprov.basefile import BaseFile
65
        self.libs.hasDependency.return_value = False
66
        factory = FileFactory(dependencies=self.dependencies)
67
        fileCreated = factory.locatedAt('example.dcm')
68
        self.assertIsInstance(fileCreated, BaseFile)
69
        self.log.missingDependencyForImage.assert_called_with('dicom','example.dcm')
70
71
    def test_If_parrec_passed_but_nibabel_not_installed_tells_listener(self):
72
        from niprov.files import FileFactory
73
        from niprov.basefile import BaseFile
74
        self.libs.hasDependency.return_value = False
75
        factory = FileFactory(dependencies=self.dependencies)
76
        fileCreated = factory.locatedAt('example.PAR')
77
        self.assertIsInstance(fileCreated, BaseFile)
78
        self.log.missingDependencyForImage.assert_called_with('nibabel','example.PAR')
79
80
    def test_If_fif_passed_but_mne_not_installed_tells_listener(self):
81
        from niprov.files import FileFactory
82
        from niprov.basefile import BaseFile
83
        self.libs.hasDependency.return_value = False
84
        factory = FileFactory(dependencies=self.dependencies)
85
        fileCreated = factory.locatedAt('example.fif')
86
        self.assertIsInstance(fileCreated, BaseFile)
87
        self.log.missingDependencyForImage.assert_called_with('mne','example.fif')
88
89
    def test_If_extensions_are_not_case_sensitive(self):
90
        from niprov.files import FileFactory
91
        from niprov.dcm import DicomFile
92
        factory = FileFactory(dependencies=self.dependencies)
93
        fileCreated = factory.locatedAt('example.dCm')
94
        self.assertIsInstance(fileCreated, DicomFile)
95
96
    def test_fromProvenance_inserts_existing_provenance(self):
97
        import niprov.files
98
        niprov.files.BaseFile = Mock()
99
        niprov.files.DicomFile = Mock()
100
        niprov.files.FileFactory.formats['.dcm'] = ('dicom', niprov.files.DicomFile)
101
        factory = niprov.files.FileFactory(dependencies=self.dependencies)
102
        inProvenance = {'location':'some.file','aproperty':'avalue'}
103
        inProvenanceDcm = {'location':'some.dcm','aproperty':'avalue'}
104
        fileCreated = factory.fromProvenance(inProvenance)
105
        niprov.files.BaseFile.assert_called_with('some.file', 
106
            provenance=inProvenance, dependencies=self.dependencies)
107
        fileCreated = factory.fromProvenance(inProvenanceDcm)
108
        niprov.files.DicomFile.assert_called_with('some.dcm', 
109
            provenance=inProvenanceDcm, dependencies=self.dependencies)
110
111
    def test_If_cnt_passed_uses_NeuroscanFile(self):
112
        from niprov.files import FileFactory
113
        from niprov.cnt import NeuroscanFile
114
        factory = FileFactory(dependencies=self.dependencies)
115
        fileCreated = factory.locatedAt('example.cnt')
116
        self.assertIsInstance(fileCreated, NeuroscanFile)
117
118
    def test_fromProvenance_inserts_provenance_also_if_lib_missing(self):
119
        import niprov.files
120
        self.libs.hasDependency.return_value = False
121
        with patch('niprov.files.BaseFile') as BaseFileCtor:
122
            factory = niprov.files.FileFactory(dependencies=self.dependencies)
123
            inProvenance = {'location':'some.dcm','aproperty':'avalue'}
124
            fileCreated = factory.fromProvenance(inProvenance)
125
            BaseFileCtor.assert_called_with('some.dcm', 
126
                provenance=inProvenance, dependencies=self.dependencies)
127
128
129
130
131
132