summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-28 16:28:15 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-30 10:08:02 +0200
commitc8bb49face9042803b4f876ba2dca52ef84fe1c0 (patch)
tree413163572f6efaf28e7759f6ed3eee98eb0f397d
parentmodules: Update rtems (diff)
downloadrtems-central-c8bb49face9042803b4f876ba2dca52ef84fe1c0.tar.bz2
validation: Support freestanding test cases
-rw-r--r--rtemsspec/tests/spec-validation/tc5.yml1
-rw-r--r--rtemsspec/tests/spec-validation/tc6.yml1
-rw-r--r--rtemsspec/tests/spec-validation/tc7.yml1
-rw-r--r--rtemsspec/tests/spec-validation/tc8.yml1
-rw-r--r--rtemsspec/tests/test_validation.py6
-rw-r--r--rtemsspec/validation.py33
-rw-r--r--spec/rtems/event/req/send-receive.yml1
-rw-r--r--spec/rtems/event/val/event-constant.yml1
-rw-r--r--spec/rtems/req/ident-local.yml1
-rw-r--r--spec/rtems/req/ident.yml1
-rw-r--r--spec/score/mtx/req/seize-try.yml1
-rw-r--r--spec/score/mtx/req/seize-wait.yml1
-rw-r--r--spec/score/sem/req/seize-try.yml1
-rw-r--r--spec/score/sem/req/seize-wait.yml1
-rw-r--r--spec/score/tq/req/enqueue-ceiling.yml1
-rw-r--r--spec/score/tq/req/enqueue-deadlock.yml1
-rw-r--r--spec/score/tq/req/enqueue-fifo.yml1
-rw-r--r--spec/score/tq/req/enqueue-mrsp.yml1
-rw-r--r--spec/score/tq/req/enqueue-priority.yml1
-rw-r--r--spec/spec/test-header.yml7
20 files changed, 49 insertions, 14 deletions
diff --git a/rtemsspec/tests/spec-validation/tc5.yml b/rtemsspec/tests/spec-validation/tc5.yml
index ee603675..0b39181a 100644
--- a/rtemsspec/tests/spec-validation/tc5.yml
+++ b/rtemsspec/tests/spec-validation/tc5.yml
@@ -43,6 +43,7 @@ test-description: Test case 5 description.
test-header:
code: |
/* Header code for ${.:/test-run}() */
+ freestanding: true
includes:
- d.h
local-includes:
diff --git a/rtemsspec/tests/spec-validation/tc6.yml b/rtemsspec/tests/spec-validation/tc6.yml
index bf1c60dd..ad2c6f43 100644
--- a/rtemsspec/tests/spec-validation/tc6.yml
+++ b/rtemsspec/tests/spec-validation/tc6.yml
@@ -10,6 +10,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes: []
run-params: []
diff --git a/rtemsspec/tests/spec-validation/tc7.yml b/rtemsspec/tests/spec-validation/tc7.yml
index 93797cee..606546e4 100644
--- a/rtemsspec/tests/spec-validation/tc7.yml
+++ b/rtemsspec/tests/spec-validation/tc7.yml
@@ -16,6 +16,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes: []
run-params: []
diff --git a/rtemsspec/tests/spec-validation/tc8.yml b/rtemsspec/tests/spec-validation/tc8.yml
index 9d44b78f..6b905623 100644
--- a/rtemsspec/tests/spec-validation/tc8.yml
+++ b/rtemsspec/tests/spec-validation/tc8.yml
@@ -20,6 +20,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes: []
run-params: []
diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py
index 1557d505..e5fb8901 100644
--- a/rtemsspec/tests/test_validation.py
+++ b/rtemsspec/tests/test_validation.py
@@ -1332,8 +1332,6 @@ static void Tc5_Action_1( Tc5_Context *ctx )
/* Test case action 1 check 1 code */
}
-static T_fixture_node Tc5_Node;
-
void Tc5_Run( int *a, int b, int *c )
{
Tc5_Context *ctx;
@@ -1343,14 +1341,14 @@ void Tc5_Run( int *a, int b, int *c )
ctx->b = b;
ctx->c = c;
- ctx = T_push_fixture( &Tc5_Node, &Tc5_Fixture );
+ ctx = T_case_begin( "Tc5", &Tc5_Fixture );
T_plan( 2 );
Tc5_Action_0( ctx );
Tc5_Action_1( ctx );
- T_pop_fixture();
+ T_case_end();
}
/** @} */
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index 0d961170..8e14869d 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -392,6 +392,27 @@ class _TestItem:
for param in header["run-params"]
])
+ def _add_runner_prologue_and_epilogue(self, content: CContent,
+ prologue: CContent,
+ epilogue: CContent,
+ fixture: str) -> None:
+ header = self["test-header"]
+ if self.context == "void":
+ result = None
+ else:
+ prologue.add(f"{self.context} *ctx;")
+ self.assign_run_params(prologue, header)
+ result = "ctx ="
+ if header["freestanding"]:
+ prologue.call_function(result, "T_case_begin",
+ [f"\"{self.ident}\"", fixture])
+ epilogue.add("T_case_end();")
+ else:
+ content.add(f"static T_fixture_node {self.ident}_Node;")
+ prologue.call_function(result, "T_push_fixture",
+ [f"&{self.ident}_Node", fixture])
+ epilogue.add("T_pop_fixture();")
+
def generate(self, content: CContent, base_directory: str,
test_case_to_suites: Dict[str, List["_TestItem"]]) -> None:
""" Generates the content. """
@@ -411,16 +432,8 @@ class _TestItem:
if self._mapper.steps > 0 and not fixture:
fixture = "&T_empty_fixture"
if fixture:
- content.add(f"static T_fixture_node {self.ident}_Node;")
- if self.context == "void":
- result = None
- else:
- prologue.add(f"{self.context} *ctx;")
- self.assign_run_params(prologue, header)
- result = "ctx ="
- prologue.call_function(result, "T_push_fixture",
- [f"&{self.ident}_Node", fixture])
- epilogue.add("T_pop_fixture();")
+ self._add_runner_prologue_and_epilogue(content, prologue,
+ epilogue, fixture)
align = True
else:
ret = ""
diff --git a/spec/rtems/event/req/send-receive.yml b/spec/rtems/event/req/send-receive.yml
index 2bd65dbb..ccee2f31 100644
--- a/spec/rtems/event/req/send-receive.yml
+++ b/spec/rtems/event/req/send-receive.yml
@@ -427,6 +427,7 @@ test-context-support: |
test-description: null
test-header:
code: null
+ freestanding: false
includes:
- rtems.h
- rtems/score/thread.h
diff --git a/spec/rtems/event/val/event-constant.yml b/spec/rtems/event/val/event-constant.yml
index 77ba10cb..6d9e863d 100644
--- a/spec/rtems/event/val/event-constant.yml
+++ b/spec/rtems/event/val/event-constant.yml
@@ -416,6 +416,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes:
- rtems.h
local-includes: []
diff --git a/spec/rtems/req/ident-local.yml b/spec/rtems/req/ident-local.yml
index c5da44e6..2b7406c5 100644
--- a/spec/rtems/req/ident-local.yml
+++ b/spec/rtems/req/ident-local.yml
@@ -112,6 +112,7 @@ test-header:
code: |
#define ClassicObjectLocalIdentName \
rtems_build_name( 'I', 'D', 'N', 'T' )
+ freestanding: false
includes:
- rtems.h
local-includes: []
diff --git a/spec/rtems/req/ident.yml b/spec/rtems/req/ident.yml
index 098779db..c2df762a 100644
--- a/spec/rtems/req/ident.yml
+++ b/spec/rtems/req/ident.yml
@@ -172,6 +172,7 @@ test-header:
code: |
#define ClassicObjectIdentName \
rtems_build_name( 'I', 'D', 'N', 'T' )
+ freestanding: false
includes:
- rtems.h
local-includes: []
diff --git a/spec/score/mtx/req/seize-try.yml b/spec/score/mtx/req/seize-try.yml
index deba2531..18ada09b 100644
--- a/spec/score/mtx/req/seize-try.yml
+++ b/spec/score/mtx/req/seize-try.yml
@@ -213,6 +213,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/score/mtx/req/seize-wait.yml b/spec/score/mtx/req/seize-wait.yml
index 39ff4910..6d3396fb 100644
--- a/spec/score/mtx/req/seize-wait.yml
+++ b/spec/score/mtx/req/seize-wait.yml
@@ -205,6 +205,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/score/sem/req/seize-try.yml b/spec/score/sem/req/seize-try.yml
index 3dd79b77..685f9921 100644
--- a/spec/score/sem/req/seize-try.yml
+++ b/spec/score/sem/req/seize-try.yml
@@ -82,6 +82,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/score/sem/req/seize-wait.yml b/spec/score/sem/req/seize-wait.yml
index 98616bdd..ba68fe51 100644
--- a/spec/score/sem/req/seize-wait.yml
+++ b/spec/score/sem/req/seize-wait.yml
@@ -101,6 +101,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/score/tq/req/enqueue-ceiling.yml b/spec/score/tq/req/enqueue-ceiling.yml
index bc8dd850..b38ea3a5 100644
--- a/spec/score/tq/req/enqueue-ceiling.yml
+++ b/spec/score/tq/req/enqueue-ceiling.yml
@@ -259,6 +259,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/score/tq/req/enqueue-deadlock.yml b/spec/score/tq/req/enqueue-deadlock.yml
index 4857ab5f..44bd72d4 100644
--- a/spec/score/tq/req/enqueue-deadlock.yml
+++ b/spec/score/tq/req/enqueue-deadlock.yml
@@ -114,6 +114,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/score/tq/req/enqueue-fifo.yml b/spec/score/tq/req/enqueue-fifo.yml
index 5c4974ec..0a879e28 100644
--- a/spec/score/tq/req/enqueue-fifo.yml
+++ b/spec/score/tq/req/enqueue-fifo.yml
@@ -68,6 +68,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/score/tq/req/enqueue-mrsp.yml b/spec/score/tq/req/enqueue-mrsp.yml
index 38bfc336..faf0825b 100644
--- a/spec/score/tq/req/enqueue-mrsp.yml
+++ b/spec/score/tq/req/enqueue-mrsp.yml
@@ -290,6 +290,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/score/tq/req/enqueue-priority.yml b/spec/score/tq/req/enqueue-priority.yml
index 06be6bab..a8fd1f9b 100644
--- a/spec/score/tq/req/enqueue-priority.yml
+++ b/spec/score/tq/req/enqueue-priority.yml
@@ -295,6 +295,7 @@ test-context-support: null
test-description: null
test-header:
code: null
+ freestanding: false
includes: []
local-includes:
- tx-thread-queue.h
diff --git a/spec/spec/test-header.yml b/spec/spec/test-header.yml
index a15fc5dc..76509f41 100644
--- a/spec/spec/test-header.yml
+++ b/spec/spec/test-header.yml
@@ -16,6 +16,13 @@ spec-info:
header code is placed at file scope after the general test
declarations and before the test run function declaration.
spec-type: optional-str
+ freestanding:
+ description: |
+ The value shall be ``true``, if the test case is freestanding,
+ otherwise ``false``. Freestanding test cases are not statically
+ registered. Instead the generated test runner uses
+ :c:func:`T_case_begin` and :c:func:`T_case_end`.
+ spec-type: bool
includes:
description: |
It shall be a list of header files included by the header file via