mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
@@ -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); \
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user