Просмотр исходного кода

utest/msh: supports autocomplete of utest cases for utest_run (#10701)

* utest/msh: supports autocomplete of utest cases for utest_run

* docs/utest: explanation of adding the automatic completion function for utest_run

* fix[utest]: Improvement of annotation description

* remove outdated code
Yuqiang Wang 2 месяцев назад
Родитель
Сommit
8816a9dc1b

+ 7 - 0
components/utilities/Kconfig

@@ -216,6 +216,13 @@ config RT_USING_UTEST
             default n
             default n
             help
             help
                 If enable this option, the test cases will be run automatically when board boot up.
                 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
+
     endif
     endif
 
 
 config RT_USING_VAR_EXPORT
 config RT_USING_VAR_EXPORT

+ 32 - 1
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("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));
+
+    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)
 int utest_init(void)
 {
 {
     /* initialize the utest commands table.*/
     /* initialize the utest commands table.*/
@@ -123,6 +151,9 @@ int utest_init(void)
             LOG_E("no memory, tc_fail_list init failed!");
             LOG_E("no memory, tc_fail_list init failed!");
         }
         }
     }
     }
+
+    utest_build_options();
+
     return tc_num;
     return tc_num;
 }
 }
 INIT_COMPONENT_EXPORT(utest_init);
 INIT_COMPONENT_EXPORT(utest_init);
@@ -379,7 +410,7 @@ int utest_testcase_run(int argc, char** argv)
 
 
     return RT_EOK;
     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)
 utest_t utest_handle_get(void)
 {
 {

BIN
documentation/6.components/utest/figures/utest_run_auto_option.png


+ 7 - 1
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:
 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
 * 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
 # NOTE