1/* vi: set sw=4 ts=4: */ 2/* 3 * bbunit: Simple unit-testing framework for Busybox. 4 * 5 * Copyright (C) 2014 by Bartosz Golaszewski <bartekgola@gmail.com> 6 * 7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 8 */ 9//applet:IF_UNIT_TEST(APPLET(unit, BB_DIR_USR_BIN, BB_SUID_DROP)) 10 11//kbuild:lib-$(CONFIG_UNIT_TEST) += bbunit.o 12 13//usage:#define unit_trivial_usage 14//usage: "" 15//usage:#define unit_full_usage "\n\n" 16//usage: "Run the unit-test suite" 17 18#include "libbb.h" 19 20static llist_t *tests = NULL; 21static unsigned tests_registered = 0; 22static int test_retval; 23 24void bbunit_registertest(struct bbunit_listelem *test) 25{ 26 llist_add_to_end(&tests, test); 27 tests_registered++; 28} 29 30void bbunit_settestfailed(void) 31{ 32 test_retval = -1; 33} 34 35int unit_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) MAIN_EXTERNALLY_VISIBLE; 36int unit_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) 37{ 38 unsigned tests_run = 0; 39 unsigned tests_failed = 0; 40 41 bb_error_msg("Running %d test(s)...", tests_registered); 42 for (;;) { 43 struct bbunit_listelem* el = llist_pop(&tests); 44 if (!el) 45 break; 46 47 bb_error_msg("Case: [%s]", el->name); 48 test_retval = 0; 49 el->testfunc(); 50 51 if (test_retval < 0) { 52 bb_error_msg("[ERROR] [%s]: TEST FAILED", el->name); 53 tests_failed++; 54 } 55 tests_run++; 56 } 57 58 if (tests_failed > 0) { 59 bb_error_msg("[ERROR] %u test(s) FAILED", tests_failed); 60 return EXIT_FAILURE; 61 } 62 63 bb_error_msg("All tests passed"); 64 return EXIT_SUCCESS; 65} 66