import sys sys.path.append('src/') from nameHandling.base import ComponentName from protocol_components.bitfields import FactoryBitfield, Bitfield from errors import BprotoDuplicateNameError, BprotoDuplicateBitfieldPositionError, BprotoCompilerError from nameHandling.base import NameStyleBproto def test_bitfield_factory(): fatory = FactoryBitfield() fatory.add_bit("BIT #1", 0) fatory.add_bit("BIT #4", None) fatory.add_bit("BIT #2", 1) fatory.add_bit("BIT #5", 4) fatory.add_bit("BIT #6", None) fatory.add_bit("BIT #3", 2) fatory.add_bit("BIT #7", 6) bitfield: Bitfield = fatory.assemble("TestBitfield") assert bitfield.name == "TestBitfield" assert isinstance(bitfield.name, ComponentName) assert isinstance(bitfield.get_name(), ComponentName) assert isinstance(bitfield.get_identifier(), ComponentName) assert bitfield.bits == { NameStyleBproto.fromStr("BIT #1"): 0, NameStyleBproto.fromStr("BIT #2"): 1, NameStyleBproto.fromStr("BIT #3"): 2, NameStyleBproto.fromStr("BIT #4"): 3, NameStyleBproto.fromStr("BIT #5"): 4, NameStyleBproto.fromStr("BIT #6"): 5, NameStyleBproto.fromStr("BIT #7"): 6, } assert isinstance(list(bitfield.bits.keys())[0], ComponentName) def test_bitfield_factory_failure_cases_duplicate_name(): factory = FactoryBitfield() factory.add_bit("BIT #1", 0) factory.add_bit("BIT #1", 1) factory.add_bit("BIT #2", 2) try: factory.assemble("TestBitfield") assert False except BprotoCompilerError as e: assert isinstance(e, BprotoDuplicateNameError) def test_bitfield_factory_failure_cases_duplicate_position(): factory = FactoryBitfield() factory.add_bit("BIT #1", 0) factory.add_bit("BIT #2", 1) factory.add_bit("BIT #3", 1) try: factory.assemble("TestBitfield") assert False except BprotoCompilerError as e: assert isinstance(e, BprotoDuplicateBitfieldPositionError) def test_bitfield_size_calculation(): bitfield = Bitfield("TestBitfield") bitfield.length = 7 assert bitfield.get_size_bytes() == 1 bitfield.length = 0 assert bitfield.get_size_bytes() == 1 bitfield.length = 8 assert bitfield.get_size_bytes() == 1 bitfield.length = 9 assert bitfield.get_size_bytes() == 2