CuTest源码分析(2)——CuTest

CuTest结构体类型定义

位置:CuTest.h

源码:

struct CuTest
{
    char* name;//名称
    TestFunction function;//函数指针
    int failed;//失败标志
    int ran;    
const char* message;//信息 jmp_buf *jumpBuf;//程序上下文信息指针 };

宏定义及函数指针声明:

#define CU_ALLOC(TYPE)        ((TYPE*) malloc(sizeof(TYPE)))
typedef struct CuTest     CuTest;
typedef void (*TestFunction)(CuTest *);

操作函数包含:

void CuTestInit(CuTest* t, const char* name, TestFunction function);
CuTest* CuTestNew(const char* name, TestFunction function);
void CuTestRun(CuTest* tc);
void CuTestDelete(CuTest *t);

操作函数定义位置:CuTest.c

源码分析:

//CuTest初始化
void CuTestInit(CuTest* t, const char* name, TestFunction function)
{
    t->name = CuStrCopy(name);
    t->failed = 0;
    t->ran = 0;
    t->message = NULL;
    t->function = function;
    t->jumpBuf = NULL;
}
//生成一个新的CuTest结构体
//返回该结构体指针
CuTest* CuTestNew(const char* name, TestFunction function)
{
    CuTest* tc = CU_ALLOC(CuTest);
    CuTestInit(tc, name, function);
    return tc;
}
//执行函数
void CuTestRun(CuTest* tc)
{
    jmp_buf buf;//用于保存当前程序上下文信息的缓冲区
    tc->jumpBuf = &buf;//jumpBuf指向该程序上下文信息的缓冲区
    //setjmp宏用于保存当前程序上下文信息到jmp_buf类型缓冲区中
    //直接调用该宏,直接返回0
    //通过longjmp函数跳转至该宏,该宏返回非零值
    if (setjmp(buf) == 0)
    {
        tc->ran = 1;
        (tc->function)(tc);//调用CuTest中的函数指针指向的函数
    }
    tc->jumpBuf = 0;//指针清零
}
//删除一个CuTest结构体
//释放名字和结构体内存空间
void CuTestDelete(CuTest *t)
{
    if (!t) return;
    free(t->name);
    free(t);
}

 

posted @ 2020-05-03 16:06  hifish  阅读(18)  评论(0)    收藏  举报