From f5e7d7b31e21471c808226112293e2a5ca4717f7 Mon Sep 17 00:00:00 2001 From: Thomas Jensen Date: Thu, 22 Feb 2024 21:48:03 +0100 Subject: [PATCH] Add unit tests of new 'logging' module --- utest/Makefile | 5 +- utest/logging_test.c | 252 +++++++++++++++++++++++++++++++++++++++++++ utest/logging_test.h | 49 +++++++++ utest/main.c | 20 ++++ 4 files changed, 324 insertions(+), 2 deletions(-) create mode 100644 utest/logging_test.c create mode 100644 utest/logging_test.h diff --git a/utest/Makefile b/utest/Makefile index 309538d..22bd8b8 100644 --- a/utest/Makefile +++ b/utest/Makefile @@ -19,8 +19,8 @@ SRC_DIR = ../src UTEST_DIR = ../utest VPATH = $(SRC_DIR):$(SRC_DIR)/misc:$(UTEST_DIR) -UTEST_NORM = global_mock.c bxstring_test.o cmdline_test.c tools_test.c regulex_test.o remove_test.o main.o \ - unicode_test.o utest_tools.o +UTEST_NORM = global_mock.c bxstring_test.o cmdline_test.c logging_test.c tools_test.c regulex_test.o remove_test.o \ + main.o unicode_test.o utest_tools.o .PHONY: check_dir flags_unix flags_win32 flags_ utest @@ -69,6 +69,7 @@ unittest.exe: $(UTEST_OBJ) | check_dir global_mock.o: global_mock.c global_mock.h boxes.h unicode.h tools.h config.h | check_dir bxstring_test.o: bxstring_test.c bxstring_test.h boxes.h bxstring.h global_mock.h tools.h unicode.h utest_tools.h config.h | check_dir cmdline_test.o: cmdline_test.c cmdline_test.h boxes.h cmdline.h global_mock.h tools.h config.h | check_dir +logging_test.o: logging_test.c logging_test.h boxes.h global_mock.h logging.h tools.h config.h | check_dir tools_test.o: tools_test.c tools_test.h tools.h unicode.h config.h | check_dir regulex_test.o: regulex_test.c regulex_test.h boxes.h global_mock.h regulex.h config.h | check_dir remove_test.o: remove_test.c remove_test.h boxes.h remove.h shape.h tools.h unicode.h global_mock.h utest_tools.h config.h | check_dir diff --git a/utest/logging_test.c b/utest/logging_test.c new file mode 100644 index 0000000..7dd5b5f --- /dev/null +++ b/utest/logging_test.c @@ -0,0 +1,252 @@ +/* + * boxes - Command line filter to draw/remove ASCII boxes around text + * Copyright (c) 1999-2024 Thomas Jensen and the boxes contributors + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public + * License, version 3, as published by the Free Software Foundation. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * You should have received a copy of the GNU General Public License along with this program. + * If not, see . + * +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + */ + +/* + * Unit tests of the 'logging' module + */ + +#include "config.h" + +#include +#include +#include + +#include + +#include "boxes.h" +#include "tools.h" +#include "logging.h" +#include "logging_test.h" +#include "global_mock.h" +#include "utest_tools.h" + + +int logging_setup(void **state) +{ + UNUSED(state); + + int *areas = (int *) calloc(NUM_LOG_AREAS, sizeof(int)); + areas[MAIN - 2] = 1; + activate_debug_logging(areas); + BFREE(areas); + return 0; +} + + + +int logging_teardown(void **state) +{ + UNUSED(state); + + activate_debug_logging(NULL); /* turn off debug logging */ + return 0; +} + + + +void test_debug_shorten_nopath(void **state) +{ + UNUSED(state); + + log_debug("nopath.c", MAIN, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[nopath ] foo\n", collect_err[0]); +} + + + +void test_debug_shorten_minimal(void **state) +{ + UNUSED(state); + + log_debug("minimal", MAIN, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[minimal ] foo\n", collect_err[0]); +} + + + +void test_debug_shorten_null(void **state) +{ + UNUSED(state); + + log_debug(NULL, MAIN, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[NULL ] foo\n", collect_err[0]); +} + + + +void test_debug_shorten_backslash(void **state) +{ + UNUSED(state); + + log_debug("..\\path\\to\\module.c", MAIN, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[module ] foo\n", collect_err[0]); +} + + + +void test_debug_shorten_slash(void **state) +{ + UNUSED(state); + + log_debug("path/to/module.c", MAIN, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[module ] foo\n", collect_err[0]); +} + + + +void test_debug_shorten_nosuffix(void **state) +{ + UNUSED(state); + + log_debug("path/to/module", MAIN, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[module ] foo\n", collect_err[0]); +} + + + +void test_debug_shorten_wrongdot(void **state) +{ + UNUSED(state); + + log_debug("path/to.dot/module", MAIN, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[module ] foo\n", collect_err[0]); +} + + + +void test_debug_shorten_empty(void **state) +{ + UNUSED(state); + + log_debug("", MAIN, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[ ] foo\n", collect_err[0]); +} + + + +void test_debug_inactive_area(void **state) +{ + UNUSED(state); + + log_debug("module.c", LEXER, "foo\n"); + + assert_int_equal(0, collect_err_size); +} + + + +void test_debug_continue(void **state) +{ + UNUSED(state); + + log_debug_cont(MAIN, "foo"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("foo", collect_err[0]); +} + + + +void test_debug_continue_inactive(void **state) +{ + UNUSED(state); + + log_debug_cont(LEXER, "foo"); + + assert_int_equal(0, collect_err_size); +} + + + +void test_debug_area_too_big(void **state) +{ + UNUSED(state); + + log_debug("module.c", 100, "foo\n"); /* 100 is way too large and does not exist */ + + assert_int_equal(0, collect_err_size); +} + + + +void test_debug_area_reserved(void **state) +{ + UNUSED(state); + + log_debug("module.c", RESERVED, "foo\n"); /* RESERVED may never be used and is always "inactive" */ + + assert_int_equal(0, collect_err_size); +} + + + +void test_debug_area_all(void **state) +{ + UNUSED(state); + + log_debug("module.c", ALL, "foo\n"); /* only MAIN is active, but not all of them */ + + assert_int_equal(0, collect_err_size); +} + + + +void test_debug_deactivated(void **state) +{ + UNUSED(state); + + activate_debug_logging(NULL); + log_debug("module.c", MAIN, "foo\n"); + + assert_int_equal(0, collect_err_size); +} + + + +void test_debug_all_active(void **state) +{ + UNUSED(state); + + int *areas = (int *) calloc(NUM_LOG_AREAS, sizeof(int)); + for(size_t i = 0; i < NUM_LOG_AREAS; i++) { + areas[i] = 1; + } + activate_debug_logging(areas); + BFREE(areas); + + log_debug("module.c", ALL, "foo\n"); + + assert_int_equal(1, collect_err_size); + assert_string_equal("[module ] foo\n", collect_err[0]); +} + + +/* vim: set cindent sw=4: */ diff --git a/utest/logging_test.h b/utest/logging_test.h new file mode 100644 index 0000000..6813e92 --- /dev/null +++ b/utest/logging_test.h @@ -0,0 +1,49 @@ +/* + * boxes - Command line filter to draw/remove ASCII boxes around text + * Copyright (c) 1999-2024 Thomas Jensen and the boxes contributors + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public + * License, version 3, as published by the Free Software Foundation. + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * You should have received a copy of the GNU General Public License along with this program. + * If not, see . + * +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + */ + +/* + * Unit tests of the 'logging' module + */ + +#ifndef LOGGING_TEST_H +#define LOGGING_TEST_H + +#include "logging.h" + +int logging_setup(void **state); +int logging_teardown(void **state); + +void test_debug_shorten_nopath(void **state); +void test_debug_shorten_minimal(void **state); +void test_debug_shorten_null(void **state); +void test_debug_shorten_backslash(void **state); +void test_debug_shorten_slash(void **state); +void test_debug_shorten_nosuffix(void **state); +void test_debug_shorten_wrongdot(void **state); +void test_debug_shorten_empty(void **state); +void test_debug_inactive_area(void **state); +void test_debug_continue(void **state); +void test_debug_continue_inactive(void **state); +void test_debug_area_too_big(void **state); +void test_debug_area_reserved(void **state); +void test_debug_area_all(void **state); +void test_debug_deactivated(void **state); +void test_debug_all_active(void **state); + + +#endif + + +/* vim: set cindent sw=4: */ diff --git a/utest/main.c b/utest/main.c index 8f836d7..60dfb3d 100644 --- a/utest/main.c +++ b/utest/main.c @@ -28,6 +28,7 @@ #include "global_mock.h" #include "bxstring_test.h" #include "cmdline_test.h" +#include "logging_test.h" #include "tools_test.h" #include "regulex_test.h" #include "remove_test.h" @@ -218,6 +219,24 @@ int main(void) cmocka_unit_test_setup(test_hmm_blank, beforeTest) }; + const struct CMUnitTest logging_tests[] = { + cmocka_unit_test_setup(test_debug_shorten_nopath, beforeTest), + cmocka_unit_test_setup(test_debug_shorten_minimal, beforeTest), + cmocka_unit_test_setup(test_debug_shorten_null, beforeTest), + cmocka_unit_test_setup(test_debug_shorten_backslash, beforeTest), + cmocka_unit_test_setup(test_debug_shorten_slash, beforeTest), + cmocka_unit_test_setup(test_debug_shorten_nosuffix, beforeTest), + cmocka_unit_test_setup(test_debug_shorten_wrongdot, beforeTest), + cmocka_unit_test_setup(test_debug_shorten_empty, beforeTest), + cmocka_unit_test_setup(test_debug_inactive_area, beforeTest), + cmocka_unit_test_setup(test_debug_continue, beforeTest), + cmocka_unit_test_setup(test_debug_continue_inactive, beforeTest), + cmocka_unit_test_setup(test_debug_area_too_big, beforeTest), + cmocka_unit_test_setup(test_debug_area_reserved, beforeTest), + cmocka_unit_test_setup(test_debug_area_all, beforeTest), + cmocka_unit_test_setup(test_debug_deactivated, beforeTest), + cmocka_unit_test_setup(test_debug_all_active, beforeTest) + }; int num_failed = 0; num_failed += cmocka_run_group_tests(cmdline_tests, NULL, NULL); @@ -226,6 +245,7 @@ int main(void) num_failed += cmocka_run_group_tests(unicode_tests, NULL, NULL); num_failed += cmocka_run_group_tests(bxstring_tests, NULL, NULL); num_failed += cmocka_run_group_tests(remove_tests, NULL, NULL); + num_failed += cmocka_run_group_tests(logging_tests, logging_setup, logging_teardown); teardown(); return num_failed;