DicomTests   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Importance

Changes 4
Bugs 0 Features 1
Metric Value
dl 0
loc 86
rs 10
c 4
b 0
f 1
wmc 13

10 Methods

Rating   Name   Duplication   Size   Complexity  
A test_Gets_basic_info_from_pydicom_and_returns_it() 0 5 1
A setUp() 0 8 1
A test_if_doesnt_have_acqDateTime_get_seriesDatetime() 0 8 1
A test_Preserves_modality_if_inherited() 0 2 1
A test_File_without_Rows() 0 9 3
A test_Series_interface() 0 11 1
A test_Determines_modality() 0 3 1
A test_Gets_dimensions() 0 8 1
A setupPydicom() 0 16 2
A test_Gets_other_fields() 0 5 1
1
import unittest
2
from mock import Mock, MagicMock, PropertyMock
3
from datetime import datetime
4
from tests.test_basefile import BaseFileTests
5
6
7
class DicomTests(BaseFileTests):
8
9
    def setUp(self):
10
        super(DicomTests, self).setUp()
11
        self.libs = Mock()
12
        self.dependencies.getLibraries.return_value = self.libs
13
        self.setupPydicom()
14
        from niprov.dcm import DicomFile
15
        self.constructor = DicomFile
16
        self.file = DicomFile(self.path, dependencies=self.dependencies)
17
18
    def test_Gets_basic_info_from_pydicom_and_returns_it(self):
19
        out = self.file.inspect()
20
        self.assertEqual(out['subject'], 'John Doeish')
21
        self.assertEqual(out['protocol'], 'T1 SENSE')
22
        self.assertEqual(out['acquired'], datetime(2014, 8, 5, 12, 19, 14))
23
24
    def test_if_doesnt_have_acqDateTime_get_seriesDatetime(self):
25
        del(self.img.AcquisitionDateTime)
26
        self.img.SeriesDate = '20120416'
27
        self.img.SeriesTime = '101330.60000'
28
        h = datetime.fromtimestamp(101330.60000).hour
29
        out = self.file.inspect()
30
        self.assertEqual(out['acquired'], 
31
            datetime(2012, 4, 16, h, 8, 50))
32
33
    def test_Series_interface(self):
34
        self.assertEqual(self.file.getSeriesId(), self.img.SeriesInstanceUID)
35
        self.assertIn(self.file.path, self.file.provenance['filesInSeries'])
36
        newFile = Mock()
37
        otherFile = Mock()
38
        out = self.file.mergeWith(newFile)
39
        self.assertIn(newFile.path, self.file.provenance['filesInSeries'])
40
        self.assertEqual(self.file, out)
41
        self.assertEqual('series-new-file', self.file.status)
42
        self.assertTrue(self.file.hasFile(newFile))
43
        self.assertFalse(self.file.hasFile(otherFile))
44
45
    def test_Gets_dimensions(self):
46
        out = self.file.inspect()
47
        self.assertEqual(out['dimensions'], [11, 12, 13])
48
        del(self.img.NumberOfFrames)
49
        out = self.file.inspect()
50
        self.assertEqual(out['dimensions'], [11, 12, 1])
51
        self.file.mergeWith(Mock())
52
        self.assertEqual(out['dimensions'], [11, 12, 2])
53
54
    def test_Gets_other_fields(self):
55
        out = self.file.inspect()
56
        self.assertEqual(out['duration'], 65.04713439941406)
57
        self.assertEqual(out['subject-position'], 'HFS')
58
        self.assertEqual(out['water-fat-shift'], 1.1173381805419922)
59
60
    def test_File_without_Rows(self):
61
        del(self.img.Rows)
62
        out = self.file.inspect()
63
        assert not self.listener.fileError.called
64
        self.assertNotIn('dimensions', out)
65
        del(self.img.NumberOfFrames)
66
        out = self.file.inspect()
67
        self.file.mergeWith(Mock())
68
        assert not self.listener.fileError.called
69
70
    def test_Determines_modality(self):
71
        out = self.file.inspect()
72
        self.assertEqual(out['modality'], 'MRI')
73
74
    def test_Preserves_modality_if_inherited(self):
75
        pass # Doesn't have to preserve
76
77
    def setupPydicom(self):
78
        self.img = Mock()
79
        self.img.AcquisitionDateTime = '20140805121914.59000'
80
        self.img.AcquisitionDuration = 65.04713439941406
81
        self.img.SeriesDescription = 'T1 SENSE'
82
        self.img.PatientID = 'John Doeish'
83
        self.img.PatientPosition = 'HFS'
84
        self.img.SeriesInstanceUID = '1.3.46.670589.11.17388.5.0.6340.2011121308140690488'
85
        self.img.Rows = 11
86
        self.img.Columns = 12
87
        self.img.NumberOfFrames = 13
88
        wfs = Mock()
89
        wfs.value = 1.1173381805419922
90
        self.img.__getitem__ = Mock(side_effect=lambda x: {(0x2001, 0x1022):wfs}[x])
91
        self.libs.dicom.read_file.return_value = self.img
92
        self.libs.hasDependency.return_value = True
93
94