# y_test_h It is a copy of a project of test like gtest but write in C only. But here, it suffice to copy one file "y_test_h.h" and include it in the test file, and add somme macro functions like `IMPLEMENTATION_FTEST()` to generate all ftest functions and `IMPLEMENTATION_FMOCK()` to generate all fmock functions. # How to create test (ftest) ## Example Example for this file `test.c`: ``` #include "y_test_h.h" IMPLEMENTATION_FTEST() TEST(nametest){ EXPECT_EQ(1,1); } /* allow empty nametest, e.g*/ TEST(){} /* allow duplicate name test, to have suit test */ TEST(){ EXPECT_TRUE(true); } ``` ### requirement I write this program to work on linux, I do not test it on windows or mac! ``` $ ls $ test.c y_test_h.h ``` ### compile `gcc -o exectest test.c` Normaly, it works with `gcc` and `clang` ! ### launch `./exectest` ## In function main ### If using options: ``` int main(int arc, char** argv){ run_all_tests_args(argc, argv); return 0; } ``` We can add execution option like: `./exectest -h` to print help `./exectest -p 5` to parallelize tests, using 5 threads. `./exectest` launch sequential test (1 thread). ### If using only sequential tests ``` int main(){ run_all_tests(); return 0; } ``` `./exectest` does not read args! ### If using only parrallel tests ``` int main(){ run_all_tests_parallel(4); /* to use 4 threads */ return 0; } ``` `./exectest` does not read args! # FMOCK We can create and predefined return function regarding the call and condition. To simulate response of a function call ! ## How to create fmock ``` #include "y_test_h.h" IMPLEMENTATION_FMOCK() ``` outside all functions: ``` MOCK_FUNC( returnType, name_function_mock, (prototype of the function with paranthesis), (args when call the funct with parathesis) ) /* use (returnType) in parathesis if the returType has more than 1 words for example (long int) or (struct someStruct) */ ``` For example, to create a function mock as signature: ``` int f_mock(int a,int b); ``` we use ``` MOCK_FUNC(int, f_mock,(int a,int b),(a,b)) ``` args: ``` returnType: int, name_function_mock: f_mock, args prototype with paranthesis: (int a,int b), args variable names with parathesis (same variable names as prototype): (a,b) ``` ## print variables We may define a function to print variables of the mock function, it is usefull in logs, the macro has almost the same args as MOCK_FUNC, without returnType wich is always `char*`. For example with `f_mock` we define: ``` STR_PRINT_CUR_VAR(f_mock, (int a,int b),(a,b)){ char *ret=malloc(150); sprintf(ret,"(int)a: %d, (int)b: %d",a,b); return ret; } ``` ## define expect call ``` EXPECT_MOCK_CALL(int, f_mock, (int a,int b), (a