summaryrefslogtreecommitdiffstats
path: root/rtemsspec
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-02-04 07:48:19 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-02-04 14:23:14 +0100
commit5591cc2fd4619784ec64bb0634eca7a43d99bfbc (patch)
treed91adbac86dca07f67e9312f6211ed107ac9b37c /rtemsspec
parentvalidation: Avoid empty test context instance (diff)
downloadrtems-central-5591cc2fd4619784ec64bb0634eca7a43d99bfbc.tar.bz2
validation: Add context and fixture to test case
Diffstat (limited to 'rtemsspec')
-rw-r--r--rtemsspec/tests/spec-validation/tc.yml6
-rw-r--r--rtemsspec/tests/spec-validation/tc2.yml18
-rw-r--r--rtemsspec/tests/spec-validation/tc3.yml6
-rw-r--r--rtemsspec/tests/spec-validation/tc4.yml6
-rw-r--r--rtemsspec/tests/spec-validation/tc5.yml6
-rw-r--r--rtemsspec/tests/spec-validation/tc6.yml6
-rw-r--r--rtemsspec/tests/test_validation.py43
-rw-r--r--rtemsspec/validation.py40
8 files changed, 117 insertions, 14 deletions
diff --git a/rtemsspec/tests/spec-validation/tc.yml b/rtemsspec/tests/spec-validation/tc.yml
index 3cd4bf85..6b5b8218 100644
--- a/rtemsspec/tests/spec-validation/tc.yml
+++ b/rtemsspec/tests/spec-validation/tc.yml
@@ -37,10 +37,11 @@ test-actions:
Test case action 1 description.
links: []
test-brief: Test case brief description.
+test-context: []
+test-context-support: null
test-description: Test case description.
test-epilogue: |
/* Test case epilogue code */
-test-fixture: null
test-header: null
test-includes:
- a.h
@@ -48,7 +49,10 @@ test-local-includes:
- x.h
test-prologue: |
/* Test case prologue code */
+test-setup: null
+test-stop: null
test-support: |
/* Test case support code */
test-target: tc12.c
+test-teardown: null
type: test-case
diff --git a/rtemsspec/tests/spec-validation/tc2.yml b/rtemsspec/tests/spec-validation/tc2.yml
index bbf884a3..89f23763 100644
--- a/rtemsspec/tests/spec-validation/tc2.yml
+++ b/rtemsspec/tests/spec-validation/tc2.yml
@@ -27,15 +27,31 @@ test-actions:
Test case 2 action 1 description.
links: []
test-brief: Test case 2 brief description.
+test-context:
+- brief: |
+ Context member brief.
+ description: |
+ Context member description.
+ member: |
+ int member
+test-context-support: null
test-description: Test case 2 description.
test-epilogue: null
-test-fixture: test_case_2_fixture
test-header: null
test-includes:
- b.h
test-local-includes:
- y.h
test-prologue: null
+test-setup:
+ brief: |
+ Setup brief.
+ code: |
+ /* Setup code */
+ description: |
+ Setup description.
+test-stop: null
test-support: null
test-target: tc12.c
+test-teardown: null
type: test-case
diff --git a/rtemsspec/tests/spec-validation/tc3.yml b/rtemsspec/tests/spec-validation/tc3.yml
index 8a51a180..e91b0673 100644
--- a/rtemsspec/tests/spec-validation/tc3.yml
+++ b/rtemsspec/tests/spec-validation/tc3.yml
@@ -16,15 +16,19 @@ test-actions:
Test case 3 action 0 description.
links: []
test-brief: Test case 3 brief description.
+test-context: []
+test-context-support: null
test-description: Test case 3 description.
test-epilogue: null
-test-fixture: null
test-header: null
test-includes:
- c.h
test-local-includes:
- z.h
test-prologue: null
+test-setup: null
+test-stop: null
test-support: null
test-target: tc34.c
+test-teardown: null
type: test-case
diff --git a/rtemsspec/tests/spec-validation/tc4.yml b/rtemsspec/tests/spec-validation/tc4.yml
index c05bfd30..28ddd64f 100644
--- a/rtemsspec/tests/spec-validation/tc4.yml
+++ b/rtemsspec/tests/spec-validation/tc4.yml
@@ -5,14 +5,18 @@ enabled-by: true
links: []
test-actions: []
test-brief: Test case 4 brief description.
+test-context: []
+test-context-support: null
test-description: Test case 4 description.
test-epilogue: |
/* Test case 4 epilogue code */
-test-fixture: null
test-header: null
test-includes: []
test-local-includes: []
test-prologue: null
+test-setup: null
+test-stop: null
test-support: null
test-target: tc34.c
+test-teardown: null
type: test-case
diff --git a/rtemsspec/tests/spec-validation/tc5.yml b/rtemsspec/tests/spec-validation/tc5.yml
index efd6fa54..cdb98d97 100644
--- a/rtemsspec/tests/spec-validation/tc5.yml
+++ b/rtemsspec/tests/spec-validation/tc5.yml
@@ -37,10 +37,11 @@ test-actions:
Test case action 1 description.
links: []
test-brief: Test case 5 brief description.
+test-context: []
+test-context-support: null
test-description: Test case 5 description.
test-epilogue: |
/* Test case 5 epilogue code */
-test-fixture: null
test-header:
code: |
/* Header code for ${.:/test-run}() */
@@ -68,6 +69,9 @@ test-header:
test-includes: []
test-local-includes: []
test-prologue: null
+test-setup: null
+test-stop: null
test-support: null
test-target: tc34.c
+test-teardown: null
type: test-case
diff --git a/rtemsspec/tests/spec-validation/tc6.yml b/rtemsspec/tests/spec-validation/tc6.yml
index 02c100b8..19a03397 100644
--- a/rtemsspec/tests/spec-validation/tc6.yml
+++ b/rtemsspec/tests/spec-validation/tc6.yml
@@ -5,9 +5,10 @@ enabled-by: true
links: []
test-actions: []
test-brief: null
+test-context: []
+test-context-support: null
test-description: null
test-epilogue: null
-test-fixture: null
test-header:
code: null
includes: []
@@ -17,6 +18,9 @@ test-header:
test-includes: []
test-local-includes: []
test-prologue: null
+test-setup: null
+test-stop: null
test-support: null
test-target: tc34.c
+test-teardown: null
type: test-case
diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py
index 8902f530..0103d004 100644
--- a/rtemsspec/tests/test_validation.py
+++ b/rtemsspec/tests/test_validation.py
@@ -903,9 +903,50 @@ T_TEST_CASE( Tc )
*/
/**
+ * @brief Test context for spec:/tc2 test case.
+ */
+typedef struct {
+ /**
+ * @brief Context member brief.
+ *
+ * Context member description.
+ */
+ int member;
+} Tc2_Context;
+
+static Tc2_Context
+ Tc2_Instance;
+
+/**
+ * @brief Setup brief.
+ *
+ * Setup description.
+ */
+static void Tc2_Setup( Tc2_Context *ctx )
+{
+ /* Setup code */
+}
+
+static void Tc2_Setup_Wrap( void *arg )
+{
+ Tc2_Context *ctx;
+
+ ctx = arg;
+ Tc2_Setup( ctx );
+}
+
+static T_fixture Tc2_Fixture = {
+ .setup = Tc2_Setup_Wrap,
+ .stop = NULL,
+ .teardown = NULL,
+ .scope = NULL,
+ .initial_context = &Tc2_Instance
+};
+
+/**
* @fn void T_case_body_Tc2( void )
*/
-T_TEST_CASE_FIXTURE( Tc2, &test_case_2_fixture )
+T_TEST_CASE_FIXTURE( Tc2, &Tc2_Fixture )
{
/* Test case 2 action 0 code */
/* Test case 2 action 0 check 0 code */
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index 386277dc..51b602df 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -89,6 +89,7 @@ class _TestItem:
def __init__(self, item: Item):
self._item = item
self._ident = to_camel_case(item.uid[1:])
+ self._context = f"{self._ident}_Context"
self._mapper = _Mapper(item)
def __getitem__(self, key: str):
@@ -112,7 +113,7 @@ class _TestItem:
@property
def context(self) -> str:
""" Returns the test case context type. """
- return f"{self._ident}_Context"
+ return self._context
@property
def name(self) -> str:
@@ -320,13 +321,42 @@ class _TestItem:
self.add_header_body(content, header)
content.write(os.path.join(base_directory, header["target"]))
+ def _add_context_and_fixture(self, content: CContent) -> Optional[str]:
+ instance = self.add_context(content)
+ if instance == "NULL":
+ self._context = "void"
+ do_wrap = False
+ else:
+ do_wrap = True
+ setup = self.add_support_method(content,
+ "test-setup",
+ "Setup",
+ do_wrap=do_wrap)
+ stop = self.add_support_method(content,
+ "test-stop",
+ "Stop",
+ do_wrap=do_wrap)
+ teardown = self.add_support_method(content,
+ "test-teardown",
+ "Teardown",
+ do_wrap=do_wrap)
+ if all(ptr == "NULL" for ptr in [instance, setup, stop, teardown]):
+ return None
+ content.add([
+ f"static T_fixture {self.ident}_Fixture = {{",
+ f" .setup = {setup},", f" .stop = {stop},",
+ f" .teardown = {teardown},", " .scope = NULL,",
+ f" .initial_context = {instance}", "};"
+ ])
+ return f"&{self.ident}_Fixture"
+
def generate(self, content: CContent, base_directory: str,
test_case_to_suites: Dict[str, List["_TestItem"]]) -> None:
""" Generates the content. """
self.add_test_case_description(content, test_case_to_suites)
+ fixture = self._add_context_and_fixture(content)
self._mapper.reset()
actions = self._generate_test_case_actions()
- fixture = self["test-fixture"]
header = self["test-header"]
if header:
self.generate_header(base_directory, header)
@@ -346,7 +376,7 @@ class _TestItem:
ret = ""
params = [f"{self.ident}"]
if fixture:
- params.append(f"&{fixture}")
+ params.append(fixture)
name = "T_TEST_CASE_FIXTURE"
else:
name = "T_TEST_CASE"
@@ -816,10 +846,6 @@ class _RuntimeMeasurementRequestItem(_TestItem):
super().__init__(item)
self._context = context
- @property
- def context(self) -> str:
- return self._context
-
def _add_call_method(content: CContent, name: str) -> None:
if name != "NULL":