From 5591cc2fd4619784ec64bb0634eca7a43d99bfbc Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 4 Feb 2021 07:48:19 +0100 Subject: validation: Add context and fixture to test case --- rtemsspec/tests/spec-validation/tc.yml | 6 ++++- rtemsspec/tests/spec-validation/tc2.yml | 18 +++++++++++++- rtemsspec/tests/spec-validation/tc3.yml | 6 ++++- rtemsspec/tests/spec-validation/tc4.yml | 6 ++++- rtemsspec/tests/spec-validation/tc5.yml | 6 ++++- rtemsspec/tests/spec-validation/tc6.yml | 6 ++++- rtemsspec/tests/test_validation.py | 43 ++++++++++++++++++++++++++++++++- rtemsspec/validation.py | 40 ++++++++++++++++++++++++------ 8 files changed, 117 insertions(+), 14 deletions(-) (limited to 'rtemsspec') 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 @@ -902,10 +902,51 @@ 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": -- cgit v1.2.3