busybox/libbb/bbunit.c
<<
>>
Prefs
   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