TestProtocols   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
c 1
b 0
f 0
dl 0
loc 78
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
B test_create_data() 0 41 1
A setUp() 0 2 1
A test_get_multi_data() 0 3 1
A test__parse_headers() 0 9 1
A test_add_additional_byte() 0 3 1
A test_get_data() 0 7 2
A test_get_frame_params() 0 5 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.protocols.protocols as p
9
10
11
class TestProtocols(unittest.TestCase):
12
    def setUp(self):
13
        self.p = p.Protocols()
14
15
    def test_get_frame_params(self):
16
        params = self.p._get_frame_params('86F1104100FFFFFFFFFC')
17
        self.assertIsInstance(params, tuple)
18
        self.assertEqual(params[0], '10')  # ECU
19
        self.assertEqual(params[1], 41)  # Mode
20
21
    def test_get_multi_data(self):
22
        data = self.p._get_multi_data('86F11049020244344750FC')
23
        self.assertEqual(data, '44344750')
24
25
    def test_add_additional_byte(self):
26
        data = self.p._add_additional_byte('86F11043013300000000')
27
        self.assertEqual(data, '86F1104300013300000000')
28
29
    def test_get_data(self):
30
        data = self.p.get_data('86F1104100FFFFFFFFFC')
31
        self.assertEqual(data, 'FFFFFFFF')
32
33
        with self.assertRaises(Exception) as cm:
34
            self.p.get_data('4100F')
35
        self.assertEqual(cm.exception.__str__(), 'The frame size is not suitable.')
36
37
    def test__parse_headers(self):
38
        response = [
39
            '86F11049020100000031FC',
40
            '86F11149020244344750FC',
41
        ]
42
        data = self.p._parse_headers(response)
43
        self.assertEqual(data, {
44
            '10': 1,
45
            '11': 1
46
        })
47
48
    @mock.patch('sys.stdout')
49
    def test_create_data(self, mock_out):
50
        # NO DATA
51
        response = ['NODATA']
52
        data = self.p.create_data(response)
53
        self.assertEqual(len(data), 0)
54
55
        # If error 7F...
56
        response = ['7F0112']
57
        data = self.p.create_data(response)
58
        self.assertEqual(len(data), 0)
59
60
        # If raw_data
61
        #
62
        # Single line
63
        response = [
64
            '86F1104100FFFFFFFFFC'
65
        ]
66
        data = self.p.create_data(response)
67
        self.assertEqual(data, {'10': 'FFFFFFFF'})
68
69
        # Multi line and one ECU response
70
        response = [
71
            '86F11049020100000031FC',
72
            '86F11049020244344750FC',
73
            '86F11049020330305235FC',
74
            '86F11049020533343536FC',
75
            '86F11049020435423132FC'
76
        ]
77
        data = self.p.create_data(response)
78
        self.assertEqual(data, {'10': '0000003144344750303052353542313233343536'})
79
80
        # two ECU's responses
81
        response = [
82
            '86F1104100FFFFFFFFFC',
83
            '86F1124100FFFFF56FFC'
84
        ]
85
        data = self.p.create_data(response)
86
        self.assertEqual(data, {
87
            '10': 'FFFFFFFF',
88
            '12': 'FFFFF56F'
89
        })
90
91
92
suite = unittest.TestLoader().loadTestsFromTestCase(TestProtocols)
93
unittest.TextTestRunner(verbosity=2).run(suite)
94