def test_dpt_subclasses_no_duplicate_dpt_number(self): """Test for duplicate value_type values in subclasses of DPTBase.""" dpt_tuples = [] for dpt in DPTBase.__recursive_subclasses__(): if hasattr(dpt, "dpt_main_number") and hasattr(dpt, "dpt_sub_number"): dpt_tuples.append((dpt.dpt_main_number, dpt.dpt_sub_number)) self.assertCountEqual(dpt_tuples, set(dpt_tuples))
def test_dpt_subclasses_no_duplicate_value_types(self): """Test for duplicate value_type values in subclasses of DPTBase.""" value_types = [] for dpt in DPTBase.__recursive_subclasses__(): if hasattr(dpt, "value_type"): value_types.append(dpt.value_type) self.assertCountEqual(value_types, set(value_types))
def test_dpt_subclasses_no_duplicate_value_types(self): """Test for duplicate value_type values in subclasses of DPTBase.""" value_types = [] for dpt in DPTBase.__recursive_subclasses__(): if dpt.value_type is not None: value_types.append(dpt.value_type) assert len(value_types) == len(set(value_types))
def test_dpt_subclasses_have_both_dpt_number_attributes(self): """Test DPTBase subclasses for having both dpt number attributes set.""" for dpt in DPTBase.__recursive_subclasses__(): if hasattr(dpt, "dpt_main_number"): self.assertTrue( hasattr(dpt, "dpt_sub_number"), "No dpt_sub_number in %s" % dpt )
def test_dpt_subclasses_no_duplicate_dpt_number(self): """Test for duplicate value_type values in subclasses of DPTBase.""" dpt_tuples = [] for dpt in DPTBase.__recursive_subclasses__(): if dpt.dpt_main_number is not None and dpt.dpt_sub_number is not None: dpt_tuples.append((dpt.dpt_main_number, dpt.dpt_sub_number)) assert len(dpt_tuples) == len(set(dpt_tuples))
def test_dpt_subclasses_definition_types(self): """Test value_type and dpt_*_number values for correct type in subclasses of DPTBase.""" for dpt in DPTBase.__recursive_subclasses__(): if dpt.value_type is not None: assert isinstance( dpt.value_type, str ), f"Wrong type for value_type in {dpt} : {type(dpt.value_type)} - str `None` expected" if dpt.dpt_main_number is not None: assert isinstance( dpt.dpt_main_number, int ), f"Wrong type for dpt_main_number in {dpt} : {type(dpt.dpt_main_number)} - int or `None` expected" if dpt.dpt_sub_number is not None: assert isinstance( dpt.dpt_sub_number, int ), f"Wrong type for dpt_sub_number in {dpt} : {type(dpt.dpt_sub_number)} - int or `None` expected"
def print_table(): """Read the values and print the table to stdout.""" rows = [] for dpt in DPTBase.__recursive_subclasses__(): if dpt.has_distinct_value_type(): rows.append(DPTRow(dpt_class=dpt)) rows.sort(key=lambda row: row.dpt_number_int()) table_header = Row() rows.insert(0, table_header) # Insert at last to have correct column_widths. rows.insert(1, table_delimiter()) for row in rows: print(row)
def test_dpt_subclasses_definition_types(self): """Test value_type and dpt_*_number values for correct type in subclasses of DPTBase.""" for dpt in DPTBase.__recursive_subclasses__(): if hasattr(dpt, 'value_type'): self.assertTrue( isinstance(dpt.value_type, str), msg="Wrong type for value_type in %s - str expected" % dpt) if hasattr(dpt, 'dpt_main_number'): self.assertTrue( isinstance(dpt.dpt_main_number, int), msg="Wrong type for dpt_main_number in %s - int expected" % dpt) if hasattr(dpt, 'dpt_sub_number'): self.assertTrue( isinstance(dpt.dpt_sub_number, (int, type(None))), msg= "Wrong type for dpt_sub_number in %s - int or `None` expected" % dpt)
def test_dpt_subclasses_definition_types(self): """Test value_type and dpt_*_number values for correct type in subclasses of DPTBase.""" for dpt in DPTBase.__recursive_subclasses__(): if dpt.value_type is not None: self.assertTrue( isinstance(dpt.value_type, str), msg= "Wrong type for value_type in %s : %s - str `None` expected" % (dpt, type(dpt.value_type)), ) if dpt.dpt_main_number is not None: self.assertTrue( isinstance(dpt.dpt_main_number, int), msg= "Wrong type for dpt_main_number in %s : %s - int or `None` expected" % (dpt, type(dpt.dpt_main_number)), ) if dpt.dpt_sub_number is not None: self.assertTrue( isinstance(dpt.dpt_sub_number, int), msg= "Wrong type for dpt_sub_number in %s : %s - int or `None` expected" % (dpt, type(dpt.dpt_sub_number)), )
def test_payload_length_defined(self): """Test if all members of DPTMAP implement payload_length.""" for dpt_class in DPTBase.__recursive_subclasses__(): assert isinstance(dpt_class.payload_length, int)
def test_dpt_abstract_subclasses_ignored(self): """Test if abstract base classes are ignored by __recursive_subclasses__.""" for dpt in DPTBase.__recursive_subclasses__(): assert dpt is not DPTNumeric