diff --git a/src/techui_builder/validator.py b/src/techui_builder/validator.py index 280883cd..b1efcf53 100644 --- a/src/techui_builder/validator.py +++ b/src/techui_builder/validator.py @@ -12,6 +12,18 @@ LOGGER = logging.getLogger(__name__) +class WidgetPropertyError(AssertionError): + """A widget property is not consistent.""" + + ... + + +class WidgetMissingError(AssertionError): + """A widget is missing from the screen being validated""" + + ... + + @dataclass class Validator: bobs: list[Path] @@ -56,29 +68,45 @@ def validate_bob( ] for pwidget in pwidgets: - pwidget_name = pwidget.get_element_value("name") for file_widget in file_widgets: - if pwidget_name == file_widget.name: - assert ( - int(pwidget.get_element_value("width")) == file_widget.width - ), ( - f"{int(pwidget.get_element_value('width'))} \ -!= {file_widget.width}" - ) - assert ( - int(pwidget.get_element_value("height")) == file_widget.height - ), ( - f"{int(pwidget.get_element_value('height'))} \ -!= {file_widget.height}" + try: + self._validate_widget(pwidget, file_widget) + except WidgetPropertyError as e: + LOGGER.error( + f"{screen_name} screen widget {file_widget.name} is altered" + " or missing.\n" + f"Error: {e}" ) - assert pwidget.get_element_value("file") == file_widget.file, ( - f"{pwidget.get_element_value('file')} != {file_widget.file}" - ) - - self._validate_macros(pwidget, file_widget) + except Exception as e: + print(f"BLAAAAGH {e}") LOGGER.info(f"{screen_name}.bob has been validated successfully") + def _validate_widget( + self, pwidget: EmbeddedDisplay | ActionButton, file_widget: ObjectifiedElement + ): + pwidget_name = pwidget.get_element_value("name") + if pwidget_name == file_widget.name: + assert int(pwidget.get_element_value("width")) == file_widget.width, ( + WidgetPropertyError( + f"{int(pwidget.get_element_value('width'))} != {file_widget.width}" + ) + ) + + assert int(pwidget.get_element_value("height")) == file_widget.height, ( + WidgetPropertyError( + f"{int(pwidget.get_element_value('height'))} \ + != {file_widget.height}" + ) + ) + assert pwidget.get_element_value("file") == file_widget.file, ( + WidgetPropertyError( + f"{pwidget.get_element_value('file')} != {file_widget.file}" + ) + ) + + self._validate_macros(pwidget, file_widget) + def _validate_macros( self, pwidget: EmbeddedDisplay | ActionButton, file_widget: ObjectifiedElement ): diff --git a/tests/test_files/motor_edited.bob b/tests/test_files/motor_edited.bob index e5c37b75..55706bc1 100644 --- a/tests/test_files/motor_edited.bob +++ b/tests/test_files/motor_edited.bob @@ -6,7 +6,7 @@ motor 0 0 - 255 + 256 470 X diff --git a/tests/test_files/motor_embed.bob b/tests/test_files/motor_embed.bob index 01db8f05..07420124 100644 --- a/tests/test_files/motor_embed.bob +++ b/tests/test_files/motor_embed.bob @@ -27,7 +27,7 @@ $(P)$(M).TWR - 10 - 30 + 31 20