summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2022-07-27 17:18:35 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-07-27 17:21:50 +0200
commit9060c1d4d75669f48423823d06d7f2418a3ec04d (patch)
tree6161d0d86131c4874ebbab0091771eaf1ea54ce4
parentrtemsspec: Module for RTEMS specification details (diff)
downloadrtems-central-9060c1d4d75669f48423823d06d7f2418a3ec04d.tar.bz2
rtemsspec: Add augment_with_test_links()
-rw-r--r--rtemsspec/rtems.py19
-rw-r--r--rtemsspec/tests/test_rtems.py21
-rwxr-xr-xspecview.py22
3 files changed, 41 insertions, 21 deletions
diff --git a/rtemsspec/rtems.py b/rtemsspec/rtems.py
index 910b3aa1..b2bcfd12 100644
--- a/rtemsspec/rtems.py
+++ b/rtemsspec/rtems.py
@@ -24,7 +24,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-from rtemsspec.items import Item
+from rtemsspec.items import Item, ItemCache, Link
_NOT_PRE_QUALIFIED = set([
"/acfg/constraint/option-not-pre-qualified",
@@ -38,3 +38,20 @@ def is_pre_qualified(item: Item) -> bool:
return not bool(
set(parent.uid for parent in item.parents("constraint")).intersection(
_NOT_PRE_QUALIFIED))
+
+
+def _add_link(item_cache: ItemCache, child: Item, link: Link) -> None:
+ parent = item_cache[child.to_abs_uid(link["uid"])]
+ parent.add_link_to_child(Link(child, link))
+
+
+def augment_with_test_links(item_cache: ItemCache) -> None:
+ """ Augments links of test case items with links from their actions. """
+ for item in item_cache.all.values():
+ if item.type == "test-case":
+ for actions in item["test-actions"]:
+ for checks in actions["checks"]:
+ for link in checks["links"]:
+ _add_link(item_cache, item, link)
+ for link in actions["links"]:
+ _add_link(item_cache, item, link)
diff --git a/rtemsspec/tests/test_rtems.py b/rtemsspec/tests/test_rtems.py
index ee16fc67..f412a543 100644
--- a/rtemsspec/tests/test_rtems.py
+++ b/rtemsspec/tests/test_rtems.py
@@ -27,7 +27,7 @@
import pytest
from rtemsspec.items import EmptyItemCache, Item
-from rtemsspec.rtems import is_pre_qualified
+from rtemsspec.rtems import augment_with_test_links, is_pre_qualified
def test_is_pre_qualified():
@@ -41,3 +41,22 @@ def test_is_pre_qualified():
"uid": uid
}]})
assert not is_pre_qualified(item)
+
+
+def test_augment_with_test_links():
+ item_cache = EmptyItemCache()
+ item = item_cache.add_volatile_item("/i", {"links": []})
+ link = {"role": "validation", "uid": "/i"}
+ test_case = item_cache.add_volatile_item(
+ "/t", {
+ "links": [],
+ "test-actions": [{
+ "checks": [{
+ "links": [link]
+ }],
+ "links": [link]
+ }]
+ })
+ test_case.data["_type"] = "test-case"
+ augment_with_test_links(item_cache)
+ assert item.child("validation") == test_case
diff --git a/specview.py b/specview.py
index c3217100..235b09b3 100755
--- a/specview.py
+++ b/specview.py
@@ -31,8 +31,8 @@ import sys
from typing import Any, Dict, List, Optional, Set, Tuple
from rtemsspec.items import EmptyItem, Item, ItemCache, ItemMapper, \
- ItemGetValueContext, Link
-from rtemsspec.rtems import is_pre_qualified
+ ItemGetValueContext
+from rtemsspec.rtems import augment_with_test_links, is_pre_qualified
from rtemsspec.sphinxcontent import SphinxContent
from rtemsspec.transitionmap import Transition, TransitionMap
from rtemsspec.util import load_config
@@ -287,22 +287,6 @@ def _gather(item: Item, spec: Set) -> None:
_gather(parent, spec)
-def _add_link(item_cache: ItemCache, child: Item, link: Link) -> None:
- parent = item_cache[child.to_abs_uid(link["uid"])]
- parent.add_link_to_child(Link(child, link))
-
-
-def _process_test_cases(item_cache: ItemCache) -> None:
- for item in item_cache.all.values():
- if item.type == "test-case":
- for actions in item["test-actions"]:
- for checks in actions["checks"]:
- for link in checks["links"]:
- _add_link(item_cache, item, link)
- for link in actions["links"]:
- _add_link(item_cache, item, link)
-
-
def _make_row(transition_map: TransitionMap, map_idx: int,
variant: Transition) -> Tuple[str, ...]:
return tuple(
@@ -436,7 +420,7 @@ def main() -> None:
enabled = args.enabled.split(",") if args.enabled else []
config = load_config("config.yml")
item_cache = ItemCache(config["spec"])
- _process_test_cases(item_cache)
+ augment_with_test_links(item_cache)
root = item_cache["/req/root"]
if args.filter == "none":