From 2372aba8be74f122070a8a85e3c4d70fa473cd8d Mon Sep 17 00:00:00 2001 From: Yuqiang Wang Date: Fri, 19 Sep 2025 16:19:01 +0800 Subject: [PATCH 1/4] utest/msh: supports autocomplete of utest cases for utest_run --- components/utilities/Kconfig | 6 ++++++ components/utilities/utest/utest.c | 33 +++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/components/utilities/Kconfig b/components/utilities/Kconfig index b5eff9bee47..401d922ad9e 100644 --- a/components/utilities/Kconfig +++ b/components/utilities/Kconfig @@ -217,6 +217,12 @@ config RT_USING_UTEST help If enable this option, the test cases will be run automatically when board boot up. + if FINSH_USING_OPTION_COMPLETION + config RT_UTEST_MAX_OPTIONS + int "Maximum number of utest cases for auto-completion" + default 64 + endif + config RT_UTEST_USING_ALL_CASES bool "Enable all selected modules' test cases" default n diff --git a/components/utilities/utest/utest.c b/components/utilities/utest/utest.c index 3d44a8b16aa..8f0157fb29a 100644 --- a/components/utilities/utest/utest.c +++ b/components/utilities/utest/utest.c @@ -73,6 +73,34 @@ void utest_log_lv_set(rt_uint8_t lv) } } +static struct msh_cmd_opt utest_testcase_run_msh_options[RT_UTEST_MAX_OPTIONS]; +static void utest_build_options(void); +static void utest_build_options(void) +{ + rt_size_t i; + rt_size_t option_index = 0; + + if (tc_num >= RT_UTEST_MAX_OPTIONS - 1) + { + LOG_W("Too many test cases (%d), only first %d will have completion", tc_num, RT_UTEST_MAX_OPTIONS - 1); + } + + rt_memset(utest_testcase_run_msh_options, 0, sizeof(utest_testcase_run_msh_options)); + + rt_size_t max_cases = (tc_num < RT_UTEST_MAX_OPTIONS - 1) ? tc_num : RT_UTEST_MAX_OPTIONS - 1; + for (i = 0; i < max_cases; i++) + { + utest_testcase_run_msh_options[option_index].id = i + 1; + utest_testcase_run_msh_options[option_index].name = tc_table[i].name; + utest_testcase_run_msh_options[option_index].des = tc_table[i].name; + option_index++; + } + + utest_testcase_run_msh_options[option_index].id = 0; + utest_testcase_run_msh_options[option_index].name = RT_NULL; + utest_testcase_run_msh_options[option_index].des = RT_NULL; +} + int utest_init(void) { /* initialize the utest commands table.*/ @@ -123,6 +151,9 @@ int utest_init(void) LOG_E("no memory, tc_fail_list init failed!"); } } + + utest_build_options(); + return tc_num; } INIT_COMPONENT_EXPORT(utest_init); @@ -379,7 +410,7 @@ int utest_testcase_run(int argc, char** argv) return RT_EOK; } -MSH_CMD_EXPORT_ALIAS(utest_testcase_run, utest_run, utest_run [-thread or -help] [testcase name] [loop num]); +MSH_CMD_EXPORT_ALIAS(utest_testcase_run, utest_run, utest_run [-thread or -help] [testcase name] [loop num], optenable); utest_t utest_handle_get(void) { From a0af55eaeaefe4044f40fc749162236c67592ab4 Mon Sep 17 00:00:00 2001 From: Yuqiang Wang Date: Fri, 19 Sep 2025 16:19:22 +0800 Subject: [PATCH 2/4] docs/utest: explanation of adding the automatic completion function for utest_run --- .../utest/figures/utest_run_auto_option.png | Bin 0 -> 44606 bytes documentation/6.components/utest/utest.md | 8 +++++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 documentation/6.components/utest/figures/utest_run_auto_option.png diff --git a/documentation/6.components/utest/figures/utest_run_auto_option.png b/documentation/6.components/utest/figures/utest_run_auto_option.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8585ceef72c0e4d7f9cffff900949ba4513c2b GIT binary patch literal 44606 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

0U2YmM|49Qi?35eOGjS1-Z;h1vn~B^`NW>PQ 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 ZmFvuE&yr1NSkbDn+i~w>bw@)p{|lVQGT{IK literal 0 HcmV?d00001 diff --git a/documentation/6.components/utest/utest.md b/documentation/6.components/utest/utest.md index 9cc63b6b81d..043cb25303d 100644 --- a/documentation/6.components/utest/utest.md +++ b/documentation/6.components/utest/utest.md @@ -290,7 +290,13 @@ As shown in the figure above, the log of the test case run is divided into four From the above flow chart you can get the following: * The utest framework is a sequential execution of all **test units** in the *testcase* function -* Assert of the previous UTEST_UNIT_RUN macro has occurred, and all subsequent UTEST_UNIT_RUN will skip execution. +* Assert of the previous UTEST_UNIT_RUN macro has occurred, and all subsequent UTEST_UNIT_RUN will skip executio + +## utest_run auto-completion Function + +The utest_run tool now supports dynamic auto-completion for test case names. After entering the utest_run command in the terminal, users can press the TAB key to activate the auto-completion feature. The system will then dynamically match and suggest available test case names in real time. + +![utest_run_auto_option](.\figures\utest_run_auto_option.png) # NOTE From 5d29ce573dd1612f53d5b2eb6173ab68bb414294 Mon Sep 17 00:00:00 2001 From: Yuqiang Wang Date: Fri, 26 Sep 2025 19:03:29 +0800 Subject: [PATCH 3/4] fix[utest]: Improvement of annotation description --- components/utilities/utest/utest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/utilities/utest/utest.c b/components/utilities/utest/utest.c index 8f0157fb29a..e222c8efb21 100644 --- a/components/utilities/utest/utest.c +++ b/components/utilities/utest/utest.c @@ -82,7 +82,7 @@ static void utest_build_options(void) if (tc_num >= RT_UTEST_MAX_OPTIONS - 1) { - LOG_W("Too many test cases (%d), only first %d will have completion", tc_num, RT_UTEST_MAX_OPTIONS - 1); + LOG_W("The current number of test cases is (%d). Please expand RT_UTEST_MAX_OPTIONS's size to at least (%d).", tc_num, tc_num + 1); } rt_memset(utest_testcase_run_msh_options, 0, sizeof(utest_testcase_run_msh_options)); From e25a9d60b10964cab3ef1f40caf06c220046d7eb Mon Sep 17 00:00:00 2001 From: kurisaw <2053731441@qq.com> Date: Mon, 20 Oct 2025 11:40:17 +0800 Subject: [PATCH 4/4] remove outdated code --- components/utilities/Kconfig | 6 ------ 1 file changed, 6 deletions(-) diff --git a/components/utilities/Kconfig b/components/utilities/Kconfig index 401d922ad9e..abd7c239940 100644 --- a/components/utilities/Kconfig +++ b/components/utilities/Kconfig @@ -223,12 +223,6 @@ config RT_USING_UTEST default 64 endif - config RT_UTEST_USING_ALL_CASES - bool "Enable all selected modules' test cases" - default n - help - If enable this option, all selected modules' test cases will be run. - Otherwise, only the test cases that are explicitly enabled will be run. endif config RT_USING_VAR_EXPORT