Completed
Pull Request — master (#33)
by
unknown
06:01
created

TestStarStruct.test_self_pack()   A

Complexity

Conditions 3

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
c 1
b 0
f 0
dl 0
loc 11
rs 9.4285
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
    def test_no_data(self):
55
        num_repeats = 4
56
57
        TestStruct = Message('TestStruct', [
58
            ('length', 'H', 'vardata'),
59
            ('vardata', self.VarTest, 'length'),
60
            ('repeated_data', self.Repeated, num_repeats),
61
        ])
62
        test_data_no_data = {
63
            'length': 0,
64
            'vardata': [],
65
            'repeated_data': [
66
            ],
67
        }
68
69
        made = TestStruct.make(test_data_no_data)
70
        assert made.length == 0
71
        assert made.vardata == []
72
        assert made.repeated_data == []
73
74
        packed = TestStruct.pack(test_data_no_data)
75
        assert packed == struct.pack('H', 0) + (struct.pack('B', 0) + struct.pack('H', 0)) * num_repeats
76
        assert packed == made.pack()
77