libtest: Add T_get_scope()

Update #3199.
This commit is contained in:
Sebastian Huber
2020-06-26 07:44:55 +02:00
parent cb3c6bdc0f
commit 63e4278429
2 changed files with 62 additions and 0 deletions

View File

@@ -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); \

View File

@@ -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;
}
}