EZ-Tester
A barebones testing library for C on POSIX compliant systems
Features
- lightweight
- catch SEGFAULTS and other ungraceful program exits
- no external dependencies ☺️
Build
Note this has only been tested on my machine
- Void Linux x86_64 glibc
By default make builds all targets in build/(static|dynamic|header)
Usage
EZ-Tester can be used as static, dynamic or header only library.
Make sure to copy eztester.h somewhere in your include path.
After configuring your project, create a program to run your tests.
Example Program
#include "eztester.h"
int sum_of_integers(const int max){
return (max*(max+1))/2;
}
eztester_status sample_test(){
const int max = 100;
ez_log("Inside of Sample Test");
ez_log("adding %d consectuive positive integers", max);
int actual = 0;
for(int i = 1; i <= max; i++){
actual += i;
}
int expected = sum_of_integers(max);
if (actual == expected) {
return TEST_PASS;
}
else if (actual < 0) {
return TEST_ERROR;
}
else {
return TEST_FAIL;
}
}
ez_status sample_shell_test(){
// eztester_shell is a wrapper function for `system`
// see `eztester.h` for more info
int status = eztester_shell("curl invalid.url");
if (status == 0){
return TEST_PASS;
}
else if (status == 6){
return TEST_WARNING;
}
else if (status == 127){
return TEST_ERROR;
}
else {
return TEST_FAIL;
}
}
int main(int argc, char* argv[]){
ez_list *tests = ezterster_create_list(2);
// runners that always return the same status are provided
ez_register(tests, (ez_test){ez_always_pass, "Always Pass", 0});
ez_register(tests, (ez_test){sample_test, "Sample Test", 0}); // our test, can be defined in a different translation unit
// a list will resize on register when it doesn't have capacity
ez_register(tests, (ez_test){ez_always_fail, "Always Fail", 0});
ez_register(tests, (ez_test){ez_always_warn, "Always Warn", 0});
ez_register(tests, (ez_test){sample_shell_test, "Check a non existent url");
ez_run(tests, EXIT_ON_FAIL | EXIT_ON_TIMEOUT );
ez_destroy_list(tests);
return 0;
}
More programs are provided in examples.
Static
After building, copy the static libraries into your project
cp build/static/* $YOUR_PROJECT_DIRECORY/libs
When building make sure to add -Llibs -leztester to your linker flags
For example:
gcc -o tests test/test.c src/module.c -Llibs -leztester
Dynamic
Header
To use the header-only implementation replace the include in your programs entry point to:
#define EZTESTER_IMPLEMENTATION
#include "eztester.h"
#undef EZTESTER_IMPLEMENTATION
TODO
- [x] makefile
- [x] static library target
- [x] dynamic library target
- [x] header-only target
- [x] shell command utility
- [ ] colorized output
