[rtems-central commit] validation: Improve non-existant state error msg

Sebastian Huber sebh at rtems.org
Wed Feb 3 12:38:18 UTC 2021


Module:    rtems-central
Branch:    master
Commit:    43567dd386bfa4d59c146056e7636b49455b6b1b
Changeset: http://git.rtems.org/rtems-central/commit/?id=43567dd386bfa4d59c146056e7636b49455b6b1b

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Feb  3 11:38:11 2021 +0100

validation: Improve non-existant state error msg

---

 rtemsspec/tests/test_validation.py |  9 +++++++++
 rtemsspec/validation.py            | 20 +++++++++++++-------
 2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py
index d0c74e1..40794f0 100644
--- a/rtemsspec/tests/test_validation.py
+++ b/rtemsspec/tests/test_validation.py
@@ -2089,3 +2089,12 @@ def test_validation_invalid_actions():
     match = "pre-condition 'A' of spec:/a has no states"
     with pytest.raises(ValueError, match=match):
         generate(validation_config, item_cache)
+    action_data["pre-conditions"][0]["states"] = [{
+        "name": "A0",
+        "test-code": None,
+        "text": None
+    }]
+    match = ("transition map entry 0 of spec:/a refers to non-existent "
+             "post-condition state 'X0'")
+    with pytest.raises(ValueError, match=match):
+        generate(validation_config, item_cache)
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index fda72b8..0549705 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -537,14 +537,20 @@ class _ActionRequirementTestItem(_TestItem):
             transition_count *= state_count
         transition_map = [list() for _ in range(transition_count)
                           ]  # type: _TransitionMap
-        for transition in self["transition-map"]:
+        for trans_index, transition in enumerate(self["transition-map"]):
             if isinstance(transition["post-conditions"], dict):
-                info = ["0"]
-                post_cond = tuple(
-                    self._post_state_to_index[index][
-                        transition["post-conditions"][
-                            self._post_index_to_name[index]]]
-                    for index in range(self._post_condition_count))
+                try:
+                    info = ["0"]
+                    post_cond = tuple(
+                        self._post_state_to_index[index][
+                            transition["post-conditions"][
+                                self._post_index_to_name[index]]]
+                        for index in range(self._post_condition_count))
+                except KeyError as err:
+                    msg = (f"transition map entry {trans_index} of "
+                           f"{self.item.spec} refers to non-existent "
+                           f"post-condition state {err}")
+                    raise ValueError(msg) from err
             else:
                 info = ["1"]
                 post_cond = tuple(



More information about the vc mailing list