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