From 6a703f753f899446934616d0b66a7c0ffc8ca410 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 12 Mar 2021 16:12:21 +0100 Subject: validation: Allow N/A for post-condition states --- rtemsspec/tests/spec-validation/action2.yml | 2 +- rtemsspec/tests/test_validation.py | 4 ++-- rtemsspec/validation.py | 7 ++++--- .../requirement-action-transition-post-state.yml | 21 +++++++++++++++++++++ spec/spec/requirement-action-transition-post.yml | 4 ++-- 5 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 spec/spec/requirement-action-transition-post-state.yml diff --git a/rtemsspec/tests/spec-validation/action2.yml b/rtemsspec/tests/spec-validation/action2.yml index 7836b0d9..626d8a70 100644 --- a/rtemsspec/tests/spec-validation/action2.yml +++ b/rtemsspec/tests/spec-validation/action2.yml @@ -162,7 +162,7 @@ transition-map: - enabled-by: true post-conditions: A: Y - B: X + B: N/A pre-conditions: A: N/A B: diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py index 8b75fe23..b64b0cf1 100644 --- a/rtemsspec/tests/test_validation.py +++ b/rtemsspec/tests/test_validation.py @@ -2190,7 +2190,7 @@ static const uint8_t Action2_TransitionMap[][ 2 ] = { Action2_Post_B_Y }, { Action2_Post_A_Y, - Action2_Post_B_X + Action2_Post_B_NA }, { Action2_Post_A_X, Action2_Post_B_X @@ -2199,7 +2199,7 @@ static const uint8_t Action2_TransitionMap[][ 2 ] = { Action2_Post_B_Y }, { Action2_Post_A_Y, - Action2_Post_B_X + Action2_Post_B_NA }, { Action2_Post_A_NA, Action2_Post_B_NA diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py index 683656fb..77450fb8 100644 --- a/rtemsspec/validation.py +++ b/rtemsspec/validation.py @@ -473,8 +473,9 @@ _TransitionMap = List[List[_Transition]] def _state_to_index(conditions: List[Any]) -> Tuple[Dict[str, int], ...]: return tuple( dict((state["name"], index) - for index, state in enumerate(condition["states"])) - for condition in conditions) + for index, state in enumerate(condition["states"] + [{ + "name": "N/A" + }])) for condition in conditions) def _condition_index_to_enum(prefix: str, @@ -652,7 +653,7 @@ class _ActionRequirementTestItem(_TestItem): else: info = ["1"] post_cond = tuple( - len(self._post_state_to_index[index]) + len(self._post_state_to_index[index]) - 1 for index in range(self._post_condition_count)) if isinstance(transition["pre-conditions"], dict): self._add_transitions(trans_index, 0, 0, transition, diff --git a/spec/spec/requirement-action-transition-post-state.yml b/spec/spec/requirement-action-transition-post-state.yml new file mode 100644 index 00000000..0b310629 --- /dev/null +++ b/spec/spec/requirement-action-transition-post-state.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +copyrights: +- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +links: +- role: spec-member + uid: root +spec-description: null +spec-example: null +spec-info: + str: + assert: + or: + - re: ^[A-Z][a-zA-Z0-9]+$ + - eq: N/A + description: | + It shall be the name of a state of the corresponding post-condition or + ``N/A`` if the post-condition is not applicable. +spec-name: Action Requirement Transition Post-Condition State +spec-type: requirement-action-transition-post-state +type: spec diff --git a/spec/spec/requirement-action-transition-post.yml b/spec/spec/requirement-action-transition-post.yml index 935484e3..fd8b9f10 100644 --- a/spec/spec/requirement-action-transition-post.yml +++ b/spec/spec/requirement-action-transition-post.yml @@ -18,9 +18,9 @@ spec-info: There shall be exactly one generic attribute key for each post-condition. The key name shall be the post-condition name. The value of each generic attribute shall be the state of the - post-condition. + post-condition or ``N/A`` if the post-condition is not applicable. key-spec-type: requirement-action-name - value-spec-type: requirement-action-name + value-spec-type: requirement-action-transition-post-state mandatory-attributes: all str: assert: -- cgit v1.2.3