[rtems-central commit] validation: Improve test program error message

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


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

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

validation: Improve test program error message

---

 rtemsspec/tests/test_validation.py | 94 ++++++++++++++++++++++++++++++++++++--
 rtemsspec/validation.py            |  9 +++-
 2 files changed, 99 insertions(+), 4 deletions(-)

diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py
index 2dd1ab7..9abc9da 100644
--- a/rtemsspec/tests/test_validation.py
+++ b/rtemsspec/tests/test_validation.py
@@ -28,14 +28,13 @@ import os
 import pytest
 
 from rtemsspec.validation import generate
-from rtemsspec.items import EmptyItemCache, ItemCache
+from rtemsspec.items import EmptyItemCache, Item, ItemCache
 from rtemsspec.tests.util import create_item_cache_config_and_copy_spec
 
 
 def test_validation(tmpdir):
-    validation_config = {}
     base_directory = os.path.join(tmpdir, "base")
-    validation_config["base-directory"] = base_directory
+    validation_config = {"base-directory": base_directory}
 
     generate(validation_config, EmptyItemCache())
 
@@ -1988,3 +1987,92 @@ void Action2_Run( int *a, int b, int *c )
 /** @} */
 """
         assert content == src.read()
+
+
+def _add_item(item_cache, uid, data, item_type):
+    item = Item(item_cache, uid, data)
+    item["_type"] = item_type
+    item_cache.all[item.uid] = item
+    return item
+
+
+def test_validation_invalid_actions():
+    item_cache = EmptyItemCache()
+    validation_config = {"base-directory": "/foobar"}
+    spdx = "CC-BY-SA-4.0 OR BSD-2-Clause"
+    copyright = "Copyright (C) 2021 John Doe"
+    action_data = {
+        "SPDX-License-Identifier":
+        spdx,
+        "copyrights": [copyright],
+        "enabled-by":
+        True,
+        "functional-type":
+        "action",
+        "links": [],
+        "post-conditions": [{
+            "name": "X",
+            "states": [],
+            "test-epilogue": None,
+            "test-prologue": None,
+        }],
+        "pre-conditions": [{
+            "name": "A",
+            "states": [],
+            "test-epilogue": None,
+            "test-prologue": None,
+        }],
+        "rationale":
+        None,
+        "references": [],
+        "requirement-type":
+        "functional",
+        "skip-reasons": {},
+        "test-action":
+        None,
+        "test-brief":
+        None,
+        "test-cleanup":
+        None,
+        "test-context": [],
+        "test-context-support":
+        None,
+        "test-description":
+        None,
+        "test-header":
+        None,
+        "test-includes": [],
+        "test-local-includes": [],
+        "test-name":
+        "A",
+        "test-prepare":
+        None,
+        "test-setup":
+        None,
+        "test-stop":
+        None,
+        "test-support":
+        None,
+        "test-target":
+        "a.c",
+        "test-teardown":
+        None,
+        "text":
+        None,
+        "transition-map": [{
+            "enabled-by": True,
+            "post-conditions": {
+                "X": "X0",
+            },
+            "pre-conditions": {
+                "A": "all"
+            },
+        }],
+        "type":
+        "requirement",
+    }
+    _add_item(item_cache, "/a", action_data, "requirement/functional/action")
+    match = ("the target file 'a.c' of spec:/a is not a source file of an "
+             "item of type 'build/test-program'")
+    with pytest.raises(ValueError, match=match):
+        generate(validation_config, item_cache)
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index f86a9ff..6515ca2 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -161,7 +161,14 @@ class _TestItem:
             test_case_to_suites: Dict[str, List["_TestItem"]]) -> None:
         """ Adds the test case description. """
         with content.defgroup_block(self.group_identifier, self.name):
-            _add_ingroup(content, test_case_to_suites[self.uid])
+            try:
+                test_suites = test_case_to_suites[self.uid]
+            except KeyError as err:
+                msg = (f"the target file '{self['test-target']}' of "
+                       f"{self.item.spec} is not a source file of an item of "
+                       "type 'build/test-program'")
+                raise ValueError(msg) from err
+            _add_ingroup(content, test_suites)
             content.add_brief_description(self.brief)
             content.wrap(self.description)
             self.add_test_case_action_description(content)



More information about the vc mailing list