summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-03-12 16:12:21 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-03-17 18:35:11 +0100
commit6a703f753f899446934616d0b66a7c0ffc8ca410 (patch)
treed8b6ac0087fdf4458d15aeeeca38bc1a16e480f0
parentvalidation: Shorten variable name (diff)
downloadrtems-central-6a703f753f899446934616d0b66a7c0ffc8ca410.tar.bz2
validation: Allow N/A for post-condition states
-rw-r--r--rtemsspec/tests/spec-validation/action2.yml2
-rw-r--r--rtemsspec/tests/test_validation.py4
-rw-r--r--rtemsspec/validation.py7
-rw-r--r--spec/spec/requirement-action-transition-post-state.yml21
-rw-r--r--spec/spec/requirement-action-transition-post.yml4
5 files changed, 30 insertions, 8 deletions
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: