@@ -1043,6 +1043,12 @@ class BasicMessageArrayAfter(Structure):
10431043 after = UBInt8 ()
10441044
10451045
1046+ # Test a FieldArray that takes a number of elements instead of a size in bytes.
1047+ class BasicMessageArrayNumElements (Structure ):
1048+ count = LengthField (UBInt8 ())
1049+ array = FieldArray (BasicMessage , num_elements_provider = count )
1050+
1051+
10461052class TestFieldArray (unittest .TestCase ):
10471053 def test_pack_valid (self ):
10481054 m = BasicMessageArray ()
@@ -1112,6 +1118,30 @@ def test_unpack_after_valid(self):
11121118 self .assertEqual (m2 .array [0 ].b2 , 0x22 )
11131119 self .assertEqual (m2 .after , 0 )
11141120
1121+ def test_pack_num_elements_valid (self ):
1122+ m = BasicMessageArrayNumElements ()
1123+ m .array = []
1124+ self .assertEqual (m .pack (), b"\x00 " )
1125+
1126+ messages = [BasicMessage (), BasicMessage (), BasicMessage ()]
1127+ for i , message in enumerate (messages ):
1128+ message .b1 = 0x10 + i
1129+ message .b2 = 0x20 + i
1130+ m .array .append (message )
1131+
1132+ self .assertEqual (m .pack (), b"\x03 \x10 \x20 \x11 \x21 \x12 \x22 " )
1133+
1134+ def test_unpack_num_elements_valid (self ):
1135+ m = BasicMessageArrayNumElements .from_data (b"\x02 \x22 \x33 \x44 \x55 " )
1136+
1137+ self .assertEqual (m .count , 2 )
1138+ self .assertEqual (len (m .array ), 2 )
1139+ self .assertIsInstance (m .array [0 ], BasicMessage )
1140+ self .assertEqual (m .array [0 ].b1 , 0x22 )
1141+ self .assertEqual (m .array [0 ].b2 , 0x33 )
1142+ self .assertEqual (m .array [1 ].b1 , 0x44 )
1143+ self .assertEqual (m .array [1 ].b2 , 0x55 )
1144+
11151145
11161146# Test SubstructureField
11171147class PascalString16 (Structure ):
0 commit comments