diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-07-27 17:18:35 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-07-27 17:21:50 +0200 |
commit | 9060c1d4d75669f48423823d06d7f2418a3ec04d (patch) | |
tree | 6161d0d86131c4874ebbab0091771eaf1ea54ce4 | |
parent | rtemsspec: Module for RTEMS specification details (diff) | |
download | rtems-central-9060c1d4d75669f48423823d06d7f2418a3ec04d.tar.bz2 |
rtemsspec: Add augment_with_test_links()
-rw-r--r-- | rtemsspec/rtems.py | 19 | ||||
-rw-r--r-- | rtemsspec/tests/test_rtems.py | 21 | ||||
-rwxr-xr-x | specview.py | 22 |
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": |