TestCommand.test_check_pids_true()   A
last analyzed

Complexity

Conditions 3

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 16
rs 9.4285
cc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A TestCommand.mode() 0 6 2
A TestCommand.pid() 0 3 1
1
import unittest
2
import sys
3
4
if sys.version_info[0] < 3:
5
    import mock
6
else:
7
    import unittest.mock as mock
8
import obdlib.obd.sensors as sensors
9
10
11
class TestCommand(unittest.TestCase):
12
    def setUp(self):
13
        call_obd = mock.Mock()
14
        sensors.Modes = mock.Mock()
15
        self.s = sensors.Command(call_obd, 0)
16
17
    def test_init(self):
18
        raised = False
19
        try:
20
            self.s.init(())
21
        except ValueError:
22
            raised = True
23
        self.assertTrue(raised)
24
25
        raised = False
26
        try:
27
            self.s.init((1, 2, 3, 4, 5, 6, 7))
28
        except ValueError:
29
            raised = True
30
        self.assertFalse(raised)
31
        self.assertEqual(self.s.title, 1)
32
33
    def test_ecus(self):
34
        self.s._Command__ecus = {'E8': '1', 'E9': '2'}
35
        e = self.s.ecus
36
        self.assertTrue(hasattr(e, '__iter__'))
37
        for item in e:
38
            self.assertIsInstance(item, tuple)
39
            self.assertEqual(len(item), 2)
40
41
    def test_sensors(self):
42
        self.s._Command__modes.modes = mock.MagicMock()
43
        self.s.init = mock.MagicMock()
44
        self.s._Command__call = mock.MagicMock()
45
        self.s._Command__pids = {
46
            'E8': {'00': 1, '01': 1},
47
            'E9': {'00': 1, '01': 0}
48
        }
49
        s = self.s.sensors()
50
        self.assertTrue(hasattr(s, '__iter__'))
51
        for item in s:
52
            self.assertIsInstance(item, sensors.Command)
53
54
    def test_check_pids_true(self):
55
        def mode(a):
56
            def pid(n):
57
                pid._Command__ecus = {'E8': {'00': 1}, 'E9': {'20': 1, '40': 1}}
58
                return pid
59
60
            return pid
61
62
        gi = sensors.Command.__getitem__
63
        sensors.Command.__getitem__ = mock.MagicMock()
64
        sensors.Command.__getitem__.side_effect = mode
65
66
        resp = self.s.check_pids()
67
        self.assertTrue(resp)
68
69
        sensors.Command.__getitem__ = gi
70
71
    def test_check_pids(self):
72
        self.s._Command__modes.modes = mock.MagicMock()
73
        self.s.init = mock.MagicMock()
74
        self.s._Command__call = mock.MagicMock()
75
        resp = self.s.check_pids()
76
77
        self.assertIsNone(resp)
78
79
    def test_is_pids(self):
80
        self.s._Command__pids = {
81
            'E8': {'00': 0, '01': 0},
82
            'E9': {'00': 0, '01': 0}
83
        }
84
        resp = self.s.is_pids()
85
        self.assertFalse(resp)
86
87
        self.s._Command__pids = {
88
            'E8': {'00': 0, '01': 0},
89
            'E9': {'00': 0, '01': 1}
90
        }
91
        resp = self.s.is_pids()
92
        self.assertTrue(resp)
93
94
    def test__set_value(self):
95
        # if value is NODATA
96
        self.s._Command__decoder = mock.Mock()
97
        resp = self.s._set_value('NODATA')
98
        self.assertEqual(resp, 'NODATA')
99
        self.assertEqual(self.s._Command__decoder.call_count, 0)
100
101
        # if value is None
102
        self.s._Command__decoder.reset_mock()
103
        self.s._Command__decoder = mock.Mock()
104
        resp = self.s._set_value(None)
105
        self.assertEqual(self.s._Command__decoder.call_count, 0)
106
        self.assertEqual(resp, None)
107
108
        # if hex value and call without kwargs
109
        self.s._Command__decoder.reset_mock()
110
        self.s._Command__decoder = mock.Mock()
111
        resp = self.s._set_value('1A')
112
        self.assertEqual(self.s._Command__decoder.call_count, 1)
113
        self.assertEqual(self.s._Command__decoder.call_args[0], ('1A',))
114
115
        # if hex value and call with kwargs
116
        self.s._Command__decoder.reset_mock()
117
        self.s._Command__decoder = mock.Mock()
118
        self.s.kwargs = {'param': 'value'}
119
        resp = self.s._set_value('1A')
120
        self.assertEqual(self.s._Command__decoder.call_count, 1)
121
        self.assertEqual(self.s._Command__decoder.call_args[0], ('1A',))
122
        self.assertEqual(self.s._Command__decoder.call_args[1], {'param': 'value'})
123
        self.assertIsInstance(resp, mock.Mock)
124
125
    @mock.patch('sys.stdout')
126
    def test_getitem(self, mock_out):
127
        self.s.__getitem__(1)(0)
128
        self.s.__getitem__(1)('01')
129
130
        self.s._Command__modes.modes = mock.MagicMock()
131
        self.s.init = mock.MagicMock()
132
        self.s._Command__call = mock.MagicMock()
133
        self.s.__getitem__(1)('00')
134
        self.assertEqual(self.s.init.call_count, 1)
135
        self.assertEqual(self.s._Command__call.call_count, 1)
136
137
138
suite = unittest.TestLoader().loadTestsFromTestCase(TestCommand)
139
unittest.TextTestRunner(verbosity=2).run(suite)
140