72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
import sys
|
|
sys.path.append('src/')
|
|
|
|
from nameHandling.base import ComponentName, NameStyleBproto
|
|
from protocol_components.message import FactoryMessage, Message
|
|
from protocol_components.field import FactoryField
|
|
from errors import BprotoDuplicateNameError, BprotoMessageIDAlreadyUsed
|
|
|
|
|
|
def test_message_factory():
|
|
factory = FactoryMessage()
|
|
field1 = FactoryField().assemble("field1", 0, "uint64", 4, None)
|
|
field2 = FactoryField().assemble("field2", 1, "uint64", 4, None)
|
|
field3 = FactoryField().assemble("field3", 2, "uint64", 4, None)
|
|
field4 = FactoryField().assemble("field4", 3, "uint64", 4, None)
|
|
|
|
factory.add_field(field3)
|
|
factory.add_field(field2)
|
|
factory.add_field(field4)
|
|
factory.add_field(field1)
|
|
|
|
message: Message = factory.assemble("TestMessage", 42)
|
|
|
|
assert message.name == "TestMessage"
|
|
assert isinstance(message.name, ComponentName)
|
|
assert isinstance(message.get_name(), ComponentName)
|
|
|
|
assert message.message_index_number == 42
|
|
assert message.get_identifier() == 42
|
|
|
|
assert message.fields == {
|
|
NameStyleBproto.fromStr("field1"): field1,
|
|
NameStyleBproto.fromStr("field2"): field2,
|
|
NameStyleBproto.fromStr("field3"): field3,
|
|
NameStyleBproto.fromStr("field4"): field4
|
|
}
|
|
|
|
assert isinstance(list(message.fields.keys())[0], ComponentName)
|
|
|
|
assert message.get_size_bytes() == 8 * 4 * 4
|
|
assert message.get_size_bits() == 64 * 4 * 4
|
|
|
|
|
|
def test_message_factory_error_duplicate_name():
|
|
field1 = FactoryField().assemble("field1", 0, "uint64", 4, None)
|
|
field2 = FactoryField().assemble("field1", 1, "uint64", 4, None)
|
|
|
|
factory = FactoryMessage()
|
|
factory.add_field(field1)
|
|
factory.add_field(field2)
|
|
|
|
try:
|
|
factory.assemble("TestMessage", 42)
|
|
assert False
|
|
except Exception as e:
|
|
assert isinstance(e, BprotoDuplicateNameError)
|
|
|
|
|
|
def test_message_factory_error_duplicate_index():
|
|
field1 = FactoryField().assemble("field1", 0, "uint64", 4, None)
|
|
field2 = FactoryField().assemble("field2", 0, "uint64", 4, None)
|
|
|
|
factory = FactoryMessage()
|
|
factory.add_field(field1)
|
|
factory.add_field(field2)
|
|
|
|
try:
|
|
factory.assemble("TestMessage", 42)
|
|
assert False
|
|
except Exception as e:
|
|
assert isinstance(e, BprotoMessageIDAlreadyUsed)
|