TestResponse.test___init__()   B
last analyzed

Complexity

Conditions 1

Size

Total Lines 38

Duplication

Lines 0
Ratio 0 %

Importance

Changes 5
Bugs 0 Features 0
Metric Value
c 5
b 0
f 0
dl 0
loc 38
rs 8.8571
cc 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
9
import obdlib.response as response
10
11
12
class TestResponse(unittest.TestCase):
13
    def setUp(self):
14
        pass
15
16
    @mock.patch('obdlib.obd.protocols.protocols.Protocols')
17
    @mock.patch('obdlib.obd.protocols.can_protocols.ProtocolsCan')
18
    def test___init__(self, mock_can_proto, mock_proto):
19
        # Old protocols
20
        expected_raw_data = []
21
        resp = response.Response()
22
        self.assertEqual(mock_proto.call_count, 1)
23
        self.assertEqual(mock_proto.call_args_list[0][0], ())
24
        self.assertEqual(mock_can_proto.call_count, 0)
25
        self.assertEqual(resp.raw_data, expected_raw_data)
26
27
        mock_proto.reset_mock()
28
        mock_can_proto.reset_mock()
29
        expected_raw_data = ['ATZ']
30
        resp = response.Response(b'ATZ\r\n')
31
        self.assertEqual(mock_proto.call_count, 1)
32
        self.assertEqual(mock_proto.call_args_list[0][0], ())
33
        self.assertEqual(mock_can_proto.call_count, 0)
34
        self.assertEqual(resp.raw_data, expected_raw_data)
35
36
        # CAN protocols
37
        mock_proto.reset_mock()
38
        mock_can_proto.reset_mock()
39
        expected_raw_data = []
40
        resp = response.Response(b'', 6)
41
        self.assertEqual(mock_proto.call_count, 0)
42
        self.assertEqual(mock_can_proto.call_count, 1)
43
        self.assertEqual(mock_can_proto.call_args_list[0][0], (6,))
44
        self.assertEqual(resp.raw_data, expected_raw_data)
45
46
        mock_proto.reset_mock()
47
        mock_can_proto.reset_mock()
48
        expected_raw_data = ['ATZ']
49
        resp = response.Response(b'ATZ\r\n', 6)
50
        self.assertEqual(mock_proto.call_count, 0)
51
        self.assertEqual(mock_can_proto.call_count, 1)
52
        self.assertEqual(mock_can_proto.call_args_list[0][0], (6,))
53
        self.assertEqual(resp.raw_data, expected_raw_data)
54
55
    @unittest.skip("_check_value")
56
    def test__check_value(self):
57
        pass
58
59
    def test_value(self):
60
        expected_data = {'E8': 'FFFFFFFF'}
61
        car_response = b'7E8 06 41 00 FF FF FF FF FC\r\n'
62
        resp = response.Response(car_response, 6)
63
        resp.protocol.create_data = mock.Mock()
64
        resp.protocol.create_data.return_value = expected_data
65
        value = resp.value
66
        self.assertEqual(resp.protocol.create_data.call_count, 1)
67
        self.assertEqual(resp.protocol.create_data.call_args_list[0][0], (['7E8064100FFFFFFFFFC'],))
68
        self.assertEqual(value, expected_data)
69
70
    def test_raw_value(self):
71
        expected_data = ['7E8064100FFFFFFFFFC']
72
        car_response = b'7E8 06 41 00 FF FF FF FF FC\r\n'
73
        resp = response.Response(car_response, 6)
74
        self.assertEqual(resp.raw_value, expected_data)
75
76
        expected_data = None
77
        car_response = b'?\r\n'
78
        resp = response.Response(car_response, 6)
79
        self.assertEqual(resp.raw_value, expected_data)
80
81
        expected_data = []
82
        car_response = b'\r\n'
83
        resp = response.Response(car_response, 6)
84
        self.assertEqual(resp.raw_value, expected_data)
85
86
    def test_at_value(self):
87
        expected_data = 'A4'
88
        car_response = b'A4\r\n'
89
        resp = response.Response(car_response, 4)
90
        self.assertEqual(resp.at_value, expected_data)
91
92
93
if __name__ == '__main__':
94
    suite = unittest.TestLoader().loadTestsFromTestCase(TestResponse)
95
    unittest.TextTestRunner(verbosity=2).run(suite)
96
97