[PATCH 08/33] libtest: Add T_get_scope()

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Jul 21 15:04:25 UTC 2020


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



More information about the devel mailing list