Newer
Older
libkc / modules / include / kc_ut.h

/**
 * @file   kc_ut.h
 * @brief  KC 単体テスト用モジュール
 * @copyright  2003 - 2023  Nomura Kei
 * @depends
 * kc.h
 */
#ifndef KC_UT_H
#define KC_UT_H

#include <kc.h>

#ifdef __cplusplus
extern "C"
{
    namespace kc
    {
        using namespace std;
#endif

        /**
         * 関数種別。
         */
        typedef enum
        {
            UT_TESTCASE, //!< テストケース
            UT_SETUP,    //!< 事前処理
            UT_TEARDOWN, //!< 事後処理
            UT_OTHER     //!< その他
        } UtType;

        /**
         * UT実施用構造体
         *
         * @code
         * KcUt* ut = KcUt_get_instance();
         * ut->add(ut, UT_SETUP, "事前処理", UtList_setup)
         * ut->add(ut, UT_TESTCASE, "リスト追加", UtList_add);
         * ut->add(ut, UT_SETUP, "事後処理", UtList_teardown)
         *
         * ut->add(ut, UT_SETUP, "事前処理", UtList_setup)
         * ut->add(ut, UT_TESTCASE, "リストクリア", UtList_clear);
         * ut->add(ut, UT_SETUP, "事後処理", UtList_teardown)
         *
         * ut->run();
         * @endcode
         */
        typedef struct KcUt_
        {
            /**
             * テストケースまたは、事前処理/事後処理の関数を追加します。
             *
             * @param ut 単体テスト用インスタンス
             * @param type  タイプ(UT_TESTCASE/UT_SETUP/UT_TEARDOWN/UT_OTHER)
             * @param title タイトル
             * @param func  追加する関数
             */
            void (*add)(struct KcUt_ *ut, UtType type, const char *title, void (*func)(void));

            /**
             * テストケースを実行します。
             *
             * @param ut 単体テスト用インスタンス
             */
            void (*run)(struct KcUt_ *ut);

            /**
             * 内部で扱うための情報格納用
             */
            void *_info;
        } KcUt;

        /**
         * 単体テスト用のインスタンスを生成します。
         */
        KcUt *KcUt_get_instance(void);

#ifdef __cplusplus
    } // namespace kc
} // extern "C"
#endif
#endif // KC_UT_H