summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-03-12 10:21:40 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-03-17 18:35:11 +0100
commitbcbb588fd258705968de1dac155ba81603646a60 (patch)
treef119489761787fa38b172d7b66310aa083ac1462
parentspec: Update semaphore specification (diff)
downloadrtems-central-bcbb588fd258705968de1dac155ba81603646a60.tar.bz2
validation: Add default for transition map entries
-rw-r--r--rtemsspec/tests/spec-validation/action2.yml14
-rw-r--r--rtemsspec/validation.py20
-rw-r--r--spec/spec/requirement-action-transition-pre.yml7
3 files changed, 30 insertions, 11 deletions
diff --git a/rtemsspec/tests/spec-validation/action2.yml b/rtemsspec/tests/spec-validation/action2.yml
index dcb88080..7836b0d9 100644
--- a/rtemsspec/tests/spec-validation/action2.yml
+++ b/rtemsspec/tests/spec-validation/action2.yml
@@ -168,19 +168,15 @@ transition-map:
B:
- Y
- enabled-by: true
- post-conditions:
- A: X
- B: X
- pre-conditions:
- A:
- - X
- B:
- - Z
-- enabled-by: true
post-conditions: SkipReason
pre-conditions:
A:
- Y
B:
- Z
+- enabled-by: true
+ post-conditions:
+ A: X
+ B: X
+ pre-conditions: default
type: requirement
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index 204e7c92..c38cfadf 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -618,6 +618,18 @@ class _ActionRequirementTestItem(_TestItem):
" " + ", ".join(pre_cond_not_applicables),
trans_index))
+ def _add_default(self, trans_index: int, transition_map: _TransitionMap,
+ pre_cond_not_applicables: List[str],
+ post_cond: Tuple[int, ...]) -> None:
+ for transition in transition_map:
+ if not transition:
+ transition.append(
+ _Transition(
+ "1", post_cond,
+ " " + ", ".join(pre_cond_not_applicables +
+ ["0"] * self._pre_condition_count),
+ trans_index))
+
def _get_transition_map(self) -> _TransitionMap:
transition_count = 1
for condition in self["pre-conditions"]:
@@ -647,8 +659,12 @@ class _ActionRequirementTestItem(_TestItem):
post_cond = tuple(
len(self._post_state_to_index[index])
for index in range(self._post_condition_count))
- self._add_transitions(trans_index, 0, 0, transition,
- transition_map, info, post_cond)
+ if isinstance(transition["pre-conditions"], dict):
+ self._add_transitions(trans_index, 0, 0, transition,
+ transition_map, info, post_cond)
+ else:
+ assert transition["pre-conditions"] == "default"
+ self._add_default(trans_index, transition_map, info, post_cond)
return transition_map
def _post_condition_enumerators(self, conditions: Any) -> str:
diff --git a/spec/spec/requirement-action-transition-pre.yml b/spec/spec/requirement-action-transition-pre.yml
index 0da85c42..c33df7ab 100644
--- a/spec/spec/requirement-action-transition-pre.yml
+++ b/spec/spec/requirement-action-transition-pre.yml
@@ -22,6 +22,13 @@ spec-info:
key-spec-type: requirement-action-name
value-spec-type: requirement-action-transition-pre-states
mandatory-attributes: all
+ str:
+ assert:
+ eq: default
+ description: |
+ If this name is specified instead of explicit pre-condition states,
+ then the post-condition states of this entry are used to define all
+ remaining transitions of the map.
spec-name: Action Requirement Transition Pre-Conditions
spec-type: requirement-action-transition-pre
type: spec