The logic to either iterate through a list of tests or pick a named test
is common to at lest two test suits. Move this logic into a new function
and call it from the environment tests.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 include/test/suites.h | 16 ++++++++++++++++
 test/cmd_ut.c         | 25 +++++++++++++++++++++++++
 test/env/cmd_ut_env.c | 19 +------------------
 3 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/include/test/suites.h b/include/test/suites.h
index 0e94feb07a7..6b900a8f594 100644
--- a/include/test/suites.h
+++ b/include/test/suites.h
@@ -8,6 +8,22 @@
 #ifndef __TEST_SUITES_H__
 #define __TEST_SUITES_H__
 
+struct unit_test;
+
+/**
+ * cmd_ut_category() - Run a category of unit tests
+ *
+ * @name:      Category name
+ * @tests:     List of tests to run
+ * @n_ents:    Number of tests in @tests
+ * @argc:      Argument count provided. Must be <= 1. If this is 1 then all
+ *             tests are run, otherwise only the one named @argv[1] is run.
+ * @argv:      Arguments: argv[1] is the test to run (if @argc >= 2)
+ * @return 0 if OK, CMD_RET_FAILURE on failure
+ */
+int cmd_ut_category(const char *name, struct unit_test *tests, int n_ents,
+                   int argc, char * const argv[]);
+
 int do_ut_dm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
 int do_ut_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
 int do_ut_overlay(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
diff --git a/test/cmd_ut.c b/test/cmd_ut.c
index 14333423a17..d860dd72f0b 100644
--- a/test/cmd_ut.c
+++ b/test/cmd_ut.c
@@ -8,9 +8,34 @@
 #include <common.h>
 #include <command.h>
 #include <test/suites.h>
+#include <test/test.h>
 
 static int do_ut_all(cmd_tbl_t *cmdtp, int flag, int argc, char * const 
argv[]);
 
+int cmd_ut_category(const char *name, struct unit_test *tests, int n_ents,
+                   int argc, char * const argv[])
+{
+       struct unit_test_state uts = { .fail_count = 0 };
+       struct unit_test *test;
+
+       if (argc == 1)
+               printf("Running %d %s tests\n", n_ents, name);
+
+       for (test = tests; test < tests + n_ents; test++) {
+               if (argc > 1 && strcmp(argv[1], test->name))
+                       continue;
+               printf("Test: %s\n", test->name);
+
+               uts.start = mallinfo();
+
+               test->func(&uts);
+       }
+
+       printf("Failures: %d\n", uts.fail_count);
+
+       return uts.fail_count ? CMD_RET_FAILURE : 0;
+}
+
 static cmd_tbl_t cmd_ut_sub[] = {
        U_BOOT_CMD_MKENT(all, CONFIG_SYS_MAXARGS, 1, do_ut_all, "", ""),
 #if defined(CONFIG_UT_DM)
diff --git a/test/env/cmd_ut_env.c b/test/env/cmd_ut_env.c
index 893e5e6a6d6..096afa83dde 100644
--- a/test/env/cmd_ut_env.c
+++ b/test/env/cmd_ut_env.c
@@ -15,23 +15,6 @@ int do_ut_env(cmd_tbl_t *cmdtp, int flag, int argc, char * 
const argv[])
 {
        struct unit_test *tests = ll_entry_start(struct unit_test, env_test);
        const int n_ents = ll_entry_count(struct unit_test, env_test);
-       struct unit_test_state uts = { .fail_count = 0 };
-       struct unit_test *test;
 
-       if (argc == 1)
-               printf("Running %d environment tests\n", n_ents);
-
-       for (test = tests; test < tests + n_ents; test++) {
-               if (argc > 1 && strcmp(argv[1], test->name))
-                       continue;
-               printf("Test: %s\n", test->name);
-
-               uts.start = mallinfo();
-
-               test->func(&uts);
-       }
-
-       printf("Failures: %d\n", uts.fail_count);
-
-       return uts.fail_count ? CMD_RET_FAILURE : 0;
+       return cmd_ut_category("environment", tests, n_ents, argc, argv);
 }
-- 
2.15.0.417.g466bffb3ac-goog

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to