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
|
|
|
|