Completed
Pull Request — master (#170)
by Jasper
01:37
created

FifTests   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
c 4
b 0
f 0
dl 0
loc 91
rs 10
wmc 10

10 Methods

Rating   Name   Duplication   Size   Complexity  
A test_Determines_modality() 0 3 1
A test_epochs() 0 8 1
A test_Preserves_modality_if_inherited() 0 2 1
A setUp() 0 12 1
A setupRawFile() 0 16 1
A test_Gets_basic_info_from_mne_and_returns_it() 0 6 1
A setupEpochsFile() 0 8 1
A test_Tries_different_mne_access_functions_or_fails_silently() 0 7 1
A test_Gets_dimensions() 0 6 1
A test_Attach_method() 0 12 1
1
import unittest
2
from mock import Mock
3
from datetime import datetime
4
from tests.test_basefile import BaseFileTests
5
6
7
class FifTests(BaseFileTests):
8
9
    def setUp(self):
10
        super(FifTests, self).setUp()
11
        self.libs = Mock()
12
        self.libs.hasDependency.return_value = True
13
        self.libs.mne.io.read_raw_fif.side_effect = ValueError
14
        self.libs.mne.read_cov.side_effect = ValueError
15
        self.libs.mne.read_epochs.side_effect = ValueError
16
        self.libs.mne.read_evokeds.side_effect = ValueError
17
        self.dependencies.getLibraries.return_value = self.libs
18
        from niprov.fif import FifFile
19
        self.constructor = FifFile
20
        self.file = FifFile(self.path, dependencies=self.dependencies)
21
22
    def test_Gets_basic_info_from_mne_and_returns_it(self):
23
        self.setupRawFile()
24
        out = self.file.inspect()
25
        self.assertEqual(out['subject'], 'John Doeish')
26
        self.assertEqual(out['project'], 'worlddom')
27
        self.assertEqual(out['acquired'], self.acquired)
28
29
    def test_Gets_dimensions(self):
30
        self.setupRawFile()
31
        out = self.file.inspect()
32
        self.assertEqual(out['dimensions'], [123, 91])
33
        self.assertEqual(out['sampling-frequency'], 200)
34
        self.assertEqual(out['duration'], 91/200.)
35
36
    def test_Attach_method(self):
37
        self.setupRawFile()
38
        self.file.getProvenance = Mock()
39
        self.file.getProvenance.return_value = 'serial prov'
40
        self.file.attach('json')
41
        self.file.getProvenance.assert_called_with('json')
42
        self.assertIn('existing bla bla ', #original string+added space 
43
            self.img.info['description'])
44
        self.assertIn('NIPROV:'+'serial prov', 
45
            self.img.info['description'])
46
        self.libs.mne.io.write_info.assert_called_with(self.file.path, 
47
            self.img.info)
48
49
    def test_Determines_modality(self):
50
        out = self.file.inspect()
51
        self.assertEqual(out['modality'], 'MEG')
52
53
    def test_Preserves_modality_if_inherited(self):
54
        pass # Doesn't have to preserve
55
56
    def test_Tries_different_mne_access_functions_or_fails_silently(self):
57
        out = self.file.inspect()
58
        self.libs.mne.io.read_raw_fif.assert_called_with(self.path, 
59
                                                         allow_maxshield=True)
60
        self.libs.mne.read_cov.assert_called_with(self.path)
61
        self.libs.mne.read_epochs.assert_called_with(self.path)
62
        self.libs.mne.read_evokeds.assert_called_with(self.path)
63
64
    def test_epochs(self):
65
        self.setupEpochsFile()
66
        out = self.file.inspect()
67
        self.assertEqual(out['mne-type'], 'epo')
68
        self.assertEqual(out['lowpass'],40.0)
69
        self.assertEqual(out['highpass'],0.10000000149) 
70
        self.assertEqual(out['bad-channels'],['MEG666', 'ECG999'])
71
        self.assertEqual(out['dimensions'], [1, 999])
72
73
    def setupRawFile(self):
74
        TS = 1422522595.76096
75
        self.acquired = datetime.fromtimestamp(TS)
76
        self.img = Mock()
77
        self.img.info = {
78
            'meas_date':(TS,),
79
            'proj_name':'worlddom',
80
            'subject_info':{'first_name':'John','last_name':'Doeish'},
81
            'nchan':123,
82
            'sfreq':200,
83
            'description':'existing bla bla'}
84
        self.img.first_samp = 10
85
        self.img.last_samp = 100
86
        self.libs.mne.io.read_raw_fif.side_effect = None
87
        self.libs.mne.io.read_raw_fif.return_value = self.img
88
        self.libs.mne.io.read_info.return_value = self.img.info
89
90
    def setupEpochsFile(self):
91
        self.img = Mock()
92
        self.img.info = {
93
            'lowpass': 40.0,
94
            'highpass': 0.10000000149, 
95
            'bad-channels': ['MEG666', 'ECG999']}
96
        self.libs.mne.read_epochs.side_effect = None
97
        self.libs.mne.read_epochs.return_value = self.img
98
        
99
100
101
102