def __init__(self, protocol, participants=None, field_types=None): """ :type protocol: urh.signalprocessing.ProtocolAnalyzer.ProtocolAnalyzer :param participants: """ if participants is not None: protocol.auto_assign_participants(participants) self.protocol = protocol self.bitvectors = [np.array(msg.decoded_bits, dtype=np.int8) for msg in self.protocol.messages] self.len_cluster = self.cluster_lengths() self.xor_matrix = self.build_xor_matrix() mt = self.protocol.message_types field_types = FieldType.load_from_xml() if field_types is None else field_types self.preamble_component = Preamble(fieldtypes=field_types, priority=0, messagetypes=mt) self.length_component = Length(fieldtypes=field_types, length_cluster=self.len_cluster, priority=1, predecessors=[self.preamble_component], messagetypes=mt) self.address_component = Address(fieldtypes=field_types, xor_matrix=self.xor_matrix, priority=2, predecessors=[self.preamble_component], messagetypes=mt) self.sequence_number_component = SequenceNumber(fieldtypes=field_types, priority=3, predecessors=[self.preamble_component]) self.type_component = Type(priority=4, predecessors=[self.preamble_component]) self.flags_component = Flags(priority=5, predecessors=[self.preamble_component])
def test_build_component_order(self): expected_default = [ Preamble(fieldtypes=[]), Length(fieldtypes=[], length_cluster=None), Address(fieldtypes=[], xor_matrix=None), SequenceNumber(fieldtypes=[]), Type(), Flags() ] format_finder = FormatFinder(self.protocol) for expected, actual in zip(expected_default, format_finder.build_component_order()): assert type(expected) == type(actual) expected_swapped = [ Preamble(fieldtypes=[]), Address(fieldtypes=[], xor_matrix=None), Length(fieldtypes=[], length_cluster=None), SequenceNumber(fieldtypes=[]), Type(), Flags() ] format_finder.length_component.priority = 2 format_finder.address_component.priority = 1 for expected, actual in zip(expected_swapped, format_finder.build_component_order()): assert type(expected) == type(actual) # Test duplicate Priority format_finder.sequence_number_component.priority = 4 with self.assertRaises(ValueError) as context: format_finder.build_component_order() self.assertTrue('Duplicate priority' in context.exception) format_finder.sequence_number_component.priority = 3 self.assertTrue(format_finder.build_component_order())