Completed
Push — master ( da4910...ceafed )
by Aaron
10s
created

TestStarStruct.test_self_pack()   B

Complexity

Conditions 5

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 5
c 2
b 0
f 0
dl 0
loc 14
rs 8.5454
1
#!/usr/bin/env python3
2
3
"""Tests for the starstruct class and its self packing"""
4
5
import struct
6
import unittest
7
8
from starstruct.message import Message
9
10
11
class TestStarStruct(unittest.TestCase):
12
    """Test class for self packing of messages"""
13
14
    teststruct = [
15
        ('a', 'b'),                            # signed byte: -128, 127
16
        ('pad1', '3x'),                        # 3 pad bytes
17
        ('b', 'H'),                            # unsigned short: 0, 65535
18
        ('pad2', 'x'),                         # 1 pad byte
19
    ]
20
21
    testvalues = [
22
        {
23
            'a': -128,
24
            'b': 0,
25
        },
26
        {
27
            'a': 127,
28
            'b': 65535,
29
        },
30
    ]
31
32
    VarTest = Message('VarTest', [
33
        ('x', 'B'),
34
        ('y', 'B'),
35
    ])
36
37
    Repeated = Message('Repeated', [
38
        ('x', 'B'),
39
        ('z', 'H'),
40
    ])
41
42
    def test_self_pack(self):
43
        my_message = Message('MyMessage', self.teststruct)
44
45
        my_instance_1 = my_message.make(self.testvalues[0])
46
        my_instance_2 = my_message.make(self.testvalues[1])
47
48
        my_bytes_1 = my_message.pack(self.testvalues[0])
49
        my_bytes_2 = my_message.pack(self.testvalues[1])
50
51
        assert my_instance_1.pack() == my_bytes_1
52
        assert my_instance_2.pack() == my_bytes_2
53
54
        assert my_message._name == 'MyMessage'
55
        assert my_instance_1._name == 'MyMessage'
56
57
    def test_no_data(self):
58
        num_repeats = 4
59
60
        TestStruct = Message('TestStruct', [
61
            ('length', 'H', 'vardata'),
62
            ('vardata', self.VarTest, 'length'),
63
            ('repeated_data', self.Repeated, num_repeats),
64
        ])
65
        test_data_no_data = {
66
            'length': 0,
67
            'vardata': [],
68
            'repeated_data': [
69
            ],
70
        }
71
72
        made = TestStruct.make(test_data_no_data)
73
        assert made.length == 0
74
        assert made.vardata == []
75
        assert made.repeated_data == []
76
77
        packed = TestStruct.pack(test_data_no_data)
78
        assert packed == struct.pack('H', 0) + (struct.pack('B', 0) + struct.pack('H', 0)) * num_repeats
79
        assert packed == made.pack()
80