Completed
Push — master ( 6d6a7d...e4617d )
by Jasper
8s
created

DicomTests.test_Preserves_modality_if_inherited()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
import unittest
2
from mock import Mock, MagicMock, PropertyMock
3
from datetime import datetime, timedelta
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
        self.file.addFile(newFile)
38
        self.assertIn(newFile.path, self.file.provenance['filesInSeries'])
39
40
    def test_Gets_dimensions(self):
41
        out = self.file.inspect()
42
        self.assertEqual(out['dimensions'], [11, 12, 13])
43
        del(self.img.NumberOfFrames)
44
        out = self.file.inspect()
45
        self.assertEqual(out['dimensions'], [11, 12, 1])
46
        self.file.addFile(Mock())
47
        self.assertEqual(out['dimensions'], [11, 12, 2])
48
49
    def test_Gets_other_fields(self):
50
        out = self.file.inspect()
51
        self.assertEqual(out['duration'], timedelta(seconds=65.04713439941406))
52
        self.assertEqual(out['subject-position'], 'HFS')
53
        self.assertEqual(out['water-fat-shift'], 1.1173381805419922)
54
55
    def test_File_without_Rows(self):
56
        del(self.img.Rows)
57
        out = self.file.inspect()
58
        assert not self.listener.fileError.called
59
        self.assertNotIn('dimensions', out)
60
        del(self.img.NumberOfFrames)
61
        out = self.file.inspect()
62
        self.file.addFile(Mock())
63
        assert not self.listener.fileError.called
64
65
    def test_Determines_modality(self):
66
        out = self.file.inspect()
67
        self.assertEqual(out['modality'], 'MRI')
68
69
    def test_Preserves_modality_if_inherited(self):
70
        pass # Doesn't have to preserve
71
72
    def setupPydicom(self):
73
        self.img = Mock()
74
        self.img.AcquisitionDateTime = '20140805121914.59000'
75
        self.img.AcquisitionDuration = 65.04713439941406
76
        self.img.SeriesDescription = 'T1 SENSE'
77
        self.img.PatientID = 'John Doeish'
78
        self.img.PatientPosition = 'HFS'
79
        self.img.SeriesInstanceUID = '1.3.46.670589.11.17388.5.0.6340.2011121308140690488'
80
        self.img.Rows = 11
81
        self.img.Columns = 12
82
        self.img.NumberOfFrames = 13
83
        wfs = Mock()
84
        wfs.value = 1.1173381805419922
85
        self.img.__getitem__ = Mock(side_effect=lambda x: {(0x2001, 0x1022):wfs}[x])
86
        self.libs.dicom.read_file.return_value = self.img
87
        self.libs.hasDependency.return_value = True
88
89