Esempio n. 1
0
 def test_encode_at_least_more(self, Message):
     array = messages.MessageArrayField(
         "", Message, messages.MessageArrayField.at_least(3))
     elements = [Message(byte=255, short=0x11AA)] * 5
     encoded = array.encode(elements)
     assert isinstance(encoded, bytes)
     assert encoded == elements[0].encode() * 5
Esempio n. 2
0
 def test_encode_value_of(self, Message):
     array = messages.MessageArrayField(
         "", Message, messages.MessageArrayField.value_of("life"))
     elements = [Message(byte=255, short=0x11AA)] * 5
     encoded = array.encode(elements, {"life": 5})
     assert isinstance(encoded, bytes)
     assert encoded == elements[0].encode() * 5
Esempio n. 3
0
    def test_decode_insufficient_buffer(self):
        class Message(messages.Message):
            fields = messages.ByteField("field"),

        array = messages.MessageArrayField("", Message, 5)
        encoded = b"\xFF\xFE\xFD"
        with pytest.raises(messages.BrokenMessageError):
            array.decode(encoded)
Esempio n. 4
0
    def test_deocde_at_least_too_few(self):
        class Message(messages.Message):
            fields = messages.ByteField(""),

        array = messages.MessageArrayField(
            "", Message, messages.MessageArrayField.at_least(5))
        with pytest.raises(messages.BrokenMessageError):
            array.decode(b"\x00" * 4)
Esempio n. 5
0
    def test_decode_at_least_more(self):
        class Message(messages.Message):
            fields = messages.ByteField(""),

        array = messages.MessageArrayField(
            "", Message, messages.MessageArrayField.at_least(5))
        values, remnants = array.decode(b"\x00" * 10)
        assert len(values) == 10
        assert not remnants
Esempio n. 6
0
    def test_deocde_all(self):
        class Message(messages.Message):
            fields = messages.ByteField(""),

        array = messages.MessageArrayField("", Message,
                                           messages.MessageArrayField.all())
        values, remnants = array.decode(b"\x00" * 128)
        assert len(values) == 128
        assert not remnants
Esempio n. 7
0
    def test_encode_invalid_element(self):
        class Element(messages.Message):
            fields = ()

        class Borked(messages.Message):
            fields = ()

        array = messages.MessageArrayField("", Element, 3)
        with pytest.raises(messages.BrokenMessageError):
            array.encode([Borked()])
Esempio n. 8
0
    def test_deocde_at_least_remnants(self):
        class Message(messages.Message):
            fields = messages.ShortField(""),

        array = messages.MessageArrayField(
            "", Message, messages.MessageArrayField.at_least(5))
        values, remnants = array.decode((b"\x00\x00" * 10) + b"\xFF")
        assert len(values) == 10
        assert isinstance(remnants, bytes)
        assert remnants == b"\xFF"
Esempio n. 9
0
    def test_decode_constant(self):
        class Message(messages.Message):
            fields = messages.ByteField("field"),

        array = messages.MessageArrayField("", Message, 5)
        encoded = b"\x00\x01\x02\x03\x04\x00\x00\x00"
        values, remnants = array.decode(encoded)
        for sub_message, expected in zip(values, range(4)):
            assert sub_message["field"] == expected
        assert isinstance(remnants, bytes)
        assert remnants == b"\x00\x00\x00"
Esempio n. 10
0
    def test_decode_minimum_remnants(self):
        class Message(messages.Message):
            fields = messages.ShortField("field"),

        array = messages.MessageArrayField("", Message, 3)
        array.count.minimum = 2
        # Two shorts and a trailing byte
        encoded = b"\x00\x00\x11\x11\x22"
        values, remnants = array.decode(encoded)
        for sub_message, expected in zip(values, [0, 0x1111]):
            assert sub_message["field"] == expected
        assert isinstance(remnants, bytes)
        assert remnants == b"\x22"
Esempio n. 11
0
    def test_decode_minimum(self):
        class Message(messages.Message):
            fields = messages.ByteField("field"),

        array = messages.MessageArrayField("", Message, 5)
        array.count.minimum = 2
        encoded = b"\x00\x01"
        values, remnants = array.decode(encoded)  # Minimum
        for sub_message, expected in zip(values, range(1)):
            assert sub_message["field"] == expected
        assert not remnants
        encoded += b"\x02\x03\x04"
        values, remnants = array.decode(encoded)  # Maximum
        for sub_message, expected in zip(values, range(4)):
            assert sub_message["field"] == expected
        assert not remnants
Esempio n. 12
0
 def test_encode_all_none(self, Message):
     array = messages.MessageArrayField("", Message)
     encoded = array.encode([])
     assert isinstance(encoded, bytes)
     assert len(encoded) == 0
Esempio n. 13
0
 def test_encode_all(self, Message):
     array = messages.MessageArrayField("", Message)
     elements = [Message(byte=255, short=0x11AA)] * 10
     encoded = array.encode(elements)
     assert isinstance(encoded, bytes)
     assert encoded == elements[0].encode() * 10
Esempio n. 14
0
 def test_encode_too_few_elements(self, Message):
     array = messages.MessageArrayField("", Message, 5)
     elements = [Message(byte=255, short=0x11AA)] * 3
     with pytest.raises(messages.BrokenMessageError):
         array.encode(elements)
Esempio n. 15
0
    def test_callable_count(self):
        def function(values={}):
            pass

        array = messages.MessageArrayField("", None, function)
        assert array.count is function
Esempio n. 16
0
 def test_encode_at_least_too_few(self, Message):
     array = messages.MessageArrayField(
         "", Message, messages.MessageArrayField.at_least(5))
     elements = [Message(byte=255, short=0x11AA)] * 4
     with pytest.raises(messages.BrokenMessageError):
         encoded = array.encode(elements)
Esempio n. 17
0
 class Message(messages.Message):
     fields = (messages.ByteField("byte"),
               messages.MessageArrayField("array", Element, count))
Esempio n. 18
0
 def test_constant_count(self):
     array = messages.MessageArrayField("", None, 5)
     assert array.count() == 5
     assert array.count.minimum == 5