浏览代码

[components/utilities/utest] 完善代码,增加注释

Signed-off-by: MurphyZhao <d2014zjt@163.com>
MurphyZhao 6 年之前
父节点
当前提交
51b17a15e4
共有 3 个文件被更改,包括 158 次插入9 次删除
  1. 29 8
      components/utilities/utest/utest.c
  2. 107 1
      components/utilities/utest/utest.h
  3. 22 0
      components/utilities/utest/utest_assert.h

+ 29 - 8
components/utilities/utest/utest.c

@@ -125,28 +125,45 @@ static void utest_run(const char *utest_name)
             continue;
         }
 
+        LOG_I("[----------] [ testcase ] (%s) started", tc_table[i].name);
         if (tc_table[i].init != RT_NULL)
         {
-            tc_table[i].init();
+            if (tc_table[i].init() != RT_EOK)
+            {
+                LOG_I("[  FAILED  ] [ result   ] testcase (%s)", tc_table[i].name);
+                goto __tc_continue;
+            }
         }
 
-        LOG_I("[----------] [ testcase ] (%s) started", tc_table[i].name);
-        tc_table[i].tc();
-        if (local_utest.failed_num == 0)
+        if (tc_table[i].tc != RT_NULL)
         {
-            LOG_I("[  PASSED  ] [ result   ] testcase (%s)", tc_table[i].name);
+            tc_table[i].tc();
+            if (local_utest.failed_num == 0)
+            {
+                LOG_I("[  PASSED  ] [ result   ] testcase (%s)", tc_table[i].name);
+            }
+            else
+            {
+                LOG_I("[  FAILED  ] [ result   ] testcase (%s)", tc_table[i].name);
+            }
         }
         else
         {
             LOG_I("[  FAILED  ] [ result   ] testcase (%s)", tc_table[i].name);
         }
-        LOG_I("[----------] [ testcase ] (%s) finished", tc_table[i].name);
 
         if (tc_table[i].cleanup != RT_NULL)
         {
-            tc_table[i].cleanup();
+            if (tc_table[i].cleanup() != RT_EOK)
+            {
+                LOG_I("[  FAILED  ] [ result   ] testcase (%s)", tc_table[i].name);
+                goto __tc_continue;
+            }
         }
 
+__tc_continue:
+        LOG_I("[----------] [ testcase ] (%s) finished", tc_table[i].name);
+
         i++;
     }
     LOG_I("[==========] [ utest    ] finished");
@@ -184,7 +201,11 @@ void utest_unit_run(test_unit_func func, const char *unit_func_name)
     local_utest.error = UTEST_PASSED;
     local_utest.passed_num = 0;
     local_utest.failed_num = 0;
-    func();
+
+    if (func != RT_NULL)
+    {
+        func();
+    }
 }
 
 void utest_assert(int value, const char *file, int line, const char *func, const char *msg)

+ 107 - 1
components/utilities/utest/utest.h

@@ -16,6 +16,16 @@
 
 #define UTEST_SW_VERSION                  "0.0.1"
 
+/**
+ * utest_error
+ * 
+ * @brief Test result.
+ * 
+ * @member UTEST_PASSED Test success.
+ * @member UTEST_FAILED Test failed.
+ * @member UTEST_PASSED Test skipped.
+ * 
+*/
 enum utest_error
 {
     UTEST_PASSED  = 0,
@@ -24,6 +34,16 @@ enum utest_error
 };
 typedef enum utest_error utest_err_e;
 
+/**
+ * utest
+ * 
+ * @brief utest data structure.
+ * 
+ * @member error      Error number from enum `utest_error`.
+ * @member passed_num Total number of tests passed.
+ * @member failed_num Total number of tests failed.
+ * 
+*/
 struct utest
 {
     utest_err_e error;
@@ -32,6 +52,19 @@ struct utest
 };
 typedef struct utest *utest_t;
 
+/**
+ * utest_tc_export
+ * 
+ * @brief utest testcase data structure.
+ *        Will export the data to `UtestTcTab` section in flash.
+ * 
+ * @member name        Testcase name.
+ * @member run_timeout Testcase maximum test time.
+ * @member init        Necessary initialization before executing the test case function.
+ * @member tc          Total number of tests failed.
+ * @member cleanup     Total number of tests failed.
+ * 
+*/
 struct utest_tc_export {
     const char  *name;
     uint32_t     run_timeout;
@@ -41,18 +74,80 @@ struct utest_tc_export {
 };
 typedef struct utest_tc_export *utest_tc_export_t;
 
+/**
+ * test_unit_func
+ * 
+ * @brief Unit test handler function pointer.
+ * 
+*/
 typedef void (*test_unit_func)(void);
 
+/**
+ * TC_LOG_x
+ * 
+ * @brief Log output interface used in test cases.
+ * 
+ * @type TC_LOG_I Output info level log.
+ * @type TC_LOG_D Output debug level log.
+ * @type TC_LOG_E Output error level log.
+ * @type TC_LOG_W Output warning level log.
+ * 
+*/
 #define TC_LOG_I(...)  LOG_I(__VA_ARGS__)
 #define TC_LOG_D(...)  LOG_D(__VA_ARGS__)
 #define TC_LOG_E(...)  LOG_E(__VA_ARGS__)
 #define TC_LOG_W(...)  LOG_W(__VA_ARGS__)
 
+/**
+ * utest_unit_run
+ * 
+ * @brief Unit test function executor.
+ *        No need for the user to call this function directly
+ * 
+ * @param func           Unit test function.
+ * @param unit_func_name Unit test function name.
+ * 
+ * @return void
+ * 
+*/
 void utest_unit_run(test_unit_func func, const char *unit_func_name);
+
+/**
+ * utest_handle_get
+ * 
+ * @brief Get the utest data structure handle.
+ *        No need for the user to call this function directly
+ * 
+ * @param void
+ * 
+ * @return utest_t type. (struct utest *)
+ * 
+*/
 utest_t utest_handle_get(void);
 
+/**
+ * UTEST_NAME_MAX_LEN
+ * 
+ * @brief Testcase name maximum length.
+ * 
+*/
 #define UTEST_NAME_MAX_LEN (128u)
 
+/**
+ * UTEST_TC_EXPORT
+ * 
+ * @brief Export testcase function to `UtestTcTab` section in flash.
+ *        Used in application layer.
+ * 
+ * @param testcase The testcase function.
+ * @param name     The testcase name.
+ * @param init     The initialization function of the test case.
+ * @param cleanup  The cleanup function of the test case.
+ * @param timeout  Testcase maximum test time.
+ * 
+ * @return None
+ * 
+*/
 #define UTEST_TC_EXPORT(testcase, name, init, cleanup, timeout)                \
     RT_USED static const struct utest_tc_export _utest_testcase                \
     SECTION("UtestTcTab") =                                                    \
@@ -64,8 +159,19 @@ utest_t utest_handle_get(void);
         cleanup                                                                \
     }
 
+/**
+ * UTEST_UNIT_RUN
+ * 
+ * @brief Unit test function executor.
+ *        Used in `testcase` function in application.
+ * 
+ * @param test_unit_func Unit test function
+ * 
+ * @return None
+ * 
+*/
 #define UTEST_UNIT_RUN(test_unit_func)                                         \
     utest_unit_run(test_unit_func, #test_unit_func);                           \
     if(utest_handle_get()->failed_num != 0) return;
 
-#endif
+#endif /* __UTEST_H__ */

+ 22 - 0
components/utilities/utest/utest_assert.h

@@ -14,11 +14,33 @@
 #include "utest.h"
 #include <rtthread.h>
 
+/* No need for the user to use this function directly */
 void utest_assert(int value, const char *file, int line, const char *func, const char *msg);
+
+/* No need for the user to use this function directly */
 void utest_assert_string(const char *a, const char *b, rt_bool_t equal, const char *file, int line, const char *func, const char *msg);
 
+/* No need for the user to use this macro directly */
 #define __utest_assert(value, msg) utest_assert(value, __FILE__, __LINE__, __func__, msg)
 
+/**
+ * uassert_x macros
+ * 
+ * @brief Get the utest data structure handle.
+ *        No need for the user to call this function directly.
+ * 
+ * @macro uassert_true          if @value is true,     not assert, means passing.
+ * @macro uassert_false         if @value is false,    not assert, means passing.
+ * @macro uassert_null          if @value is null,     not assert, means passing.
+ * @macro uassert_not_null      if @value is not null, not assert, means passing.
+ * @macro uassert_int_equal     if @a equal to @b,     not assert, means passing. Integer type test.
+ * @macro uassert_int_not_equal if @a not equal to @b, not assert, means passing. Integer type test.
+ * @macro uassert_str_equal     if @a equal to @b,     not assert, means passing. String type test.
+ * @macro uassert_str_not_equal if @a not equal to @b, not assert, means passing. String type test.
+ * @macro uassert_in_range      if @value is in range of min and max,     not assert, means passing.
+ * @macro uassert_not_in_range  if @value is not in range of min and max, not assert, means passing.
+ * 
+*/
 #define uassert_true(value)      __utest_assert(value, "(" #value ") is false")
 #define uassert_false(value)     __utest_assert(!(value), "(" #value ") is true")
 #define uassert_null(value)      __utest_assert((value) == NULL, "(" #value ") is not null")