Update #3199. --- cpukit/include/rtems/test.h | 23 ++++++++++++++++++++++ cpukit/libtest/t-test.c | 39 +++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+)
diff --git a/cpukit/include/rtems/test.h b/cpukit/include/rtems/test.h index 04f92dd1f4..09afc29593 100644 --- a/cpukit/include/rtems/test.h +++ b/cpukit/include/rtems/test.h @@ -2243,6 +2243,29 @@ void *T_push_fixture(T_fixture_node *, const T_fixture *); void T_pop_fixture(void); +/** + * @brief Gets the scope for nested fixtures. + * + * This function should help implementing scope fixture methods. The parameter + * layout allows efficient code generation for this method. + * + * @param desc is the description table. It shall be a NULL-terminated array + * which references arrays of descriptive strings. + * + * @param buf is the buffer for the scope string. + * + * @param n is the size of the scope buffer in characters. + * + * @param second_indices is an array of indices defining which descriptive + * string is used for each entry in the description table. + */ +void T_get_scope( + const char * const * const *desc, + char *buf, + size_t n, + const size_t *second_indices +); + #ifdef __rtems__ #define T_TEST_CASE_FIXTURE(name, fixture) \ void T_case_body_##name(void); \ diff --git a/cpukit/libtest/t-test.c b/cpukit/libtest/t-test.c index bf9b68cdf2..e74b4d3495 100644 --- a/cpukit/libtest/t-test.c +++ b/cpukit/libtest/t-test.c @@ -1095,3 +1095,42 @@ T_pop_fixture(void) memset(node, 0, sizeof(*node)); } + +void +T_get_scope(const char * const * const *desc, char *buf, size_t n, + const size_t *second_indices) +{ + size_t i; + + i = 0; + + while (true) { + const char * const *desc2; + size_t m; + + desc2 = desc[i]; + + if (desc2 == NULL) { + return; + } + + if (n > 1) { + buf[0] = '/'; + --n; + ++buf; + } else { + return; + } + + m = strlcpy(buf, desc2[second_indices[i]], n); + + if (m < n) { + n -= m; + buf += m; + } else { + return; + } + + ++i; + } +} -- 2.26.2 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel