From: Bastian Dehn Date: Sat, 15 Nov 2025 15:46:56 +0000 (+0100) Subject: change validation in extra module X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=36b14ade5a05b6ac05ee9a5f3e0df4c5755c0db3;p=feierabend.git change validation in extra module --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index babdcc0..2061be8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -22,12 +22,14 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${LIBXML2_INCLUDE_DIR}) ADD_EXECUTABLE(${PROJECT_NAME} feierabend.c + validate.c time_format.c worktime.c break.c) ADD_EXECUTABLE(${PROJECT_NAME}xml feierabendxml.c + validate.c xml.c time_format.c worktime.c diff --git a/src/feierabend.c b/src/feierabend.c index 20a2047..7b3174c 100644 --- a/src/feierabend.c +++ b/src/feierabend.c @@ -1,6 +1,7 @@ #include #include "feierabend.h" #include "time_format.h" +#include "validate.h" #include "worktime.h" #include "break.h" #include "config.h" diff --git a/src/feierabendxml.c b/src/feierabendxml.c index a062db6..c59a08c 100644 --- a/src/feierabendxml.c +++ b/src/feierabendxml.c @@ -2,7 +2,7 @@ #include #include #include "config.h" -#include "time_format.h" +#include "validate.h" #include "xml.h" int main(int argc, char* argv[]) diff --git a/src/time_format.c b/src/time_format.c index 0b9203a..4014e01 100644 --- a/src/time_format.c +++ b/src/time_format.c @@ -1,7 +1,6 @@ #include #include #include -#include #include "time_format.h" #define ONE_HOUR 3600 @@ -10,10 +9,6 @@ #define SHORT_WEEKDAY_STR_LEN 3 #define MAX_TIME_STR_LENGTH 7 -#define DATE_REGEX "^[0-9]{4}-([0][1-9]|1[0-2])-([0-2][1-9]|[1-3]0|3[01])$" -#define HOUR_REGEX "^([0-9]|1[0-9]|2[0-3])$" -#define MINUTE_REGEX "^([0-9]|[1-5][0-9])$" - void get_time_str(time_t timediff, char* timestr) { memset(timestr, 0, MAX_TIME_STR_LENGTH); @@ -187,46 +182,4 @@ int get_day_from_str(const char* date) free(str_first_pos); str_first_pos = NULL; return value; -} - -bool validate_string(const char* str, const char* regex_pattern) -{ - regex_t* regex = malloc(sizeof(regex_t)); - if (regex == NULL) - return false; - - int comp_success = regcomp(regex, regex_pattern, REG_NOSUB | REG_EXTENDED); - if (comp_success != 0) { - free(regex); - return false; - } - - int match = regexec(regex, str, 0, NULL, 0); - - regfree(regex); - free(regex); - regex = NULL; - - if (match == REG_NOMATCH) - return false; - - if (match == 0) - return true; - - return false; -} - -bool validate_datestring(const char* date) -{ - return validate_string(date, DATE_REGEX); -} - -bool validate_hourstring(const char* hour) -{ - return validate_string(hour, HOUR_REGEX); -} - -bool validate_minutestring(const char* minutes) -{ - return validate_string(minutes, MINUTE_REGEX); } \ No newline at end of file diff --git a/src/time_format.h b/src/time_format.h index 8665005..498e708 100644 --- a/src/time_format.h +++ b/src/time_format.h @@ -11,8 +11,5 @@ void get_short_weekday(int wday, char* weekday); int get_year_from_str(const char* date); int get_month_from_str(const char* date); int get_day_from_str(const char* date); -bool validate_datestring(const char* date); -bool validate_hourstring(const char* hour); -bool validate_minutestring(const char* minutes); #endif \ No newline at end of file diff --git a/src/validate.c b/src/validate.c new file mode 100644 index 0000000..0b1c7f8 --- /dev/null +++ b/src/validate.c @@ -0,0 +1,49 @@ +#include +#include +#include "validate.h" + +#define DATE_REGEX "^[0-9]{4}-([0][1-9]|1[0-2])-([0-2][1-9]|[1-3]0|3[01])$" +#define HOUR_REGEX "^([0-9]|1[0-9]|2[0-3])$" +#define MINUTE_REGEX "^([0-9]|[1-5][0-9])$" + +bool validate_string(const char* str, const char* regex_pattern) +{ + regex_t* regex = malloc(sizeof(regex_t)); + if (regex == NULL) + return false; + + int comp_success = regcomp(regex, regex_pattern, REG_NOSUB | REG_EXTENDED); + if (comp_success != 0) { + free(regex); + return false; + } + + int match = regexec(regex, str, 0, NULL, 0); + + regfree(regex); + free(regex); + regex = NULL; + + if (match == REG_NOMATCH) + return false; + + if (match == 0) + return true; + + return false; +} + +bool validate_datestring(const char* date) +{ + return validate_string(date, DATE_REGEX); +} + +bool validate_hourstring(const char* hour) +{ + return validate_string(hour, HOUR_REGEX); +} + +bool validate_minutestring(const char* minutes) +{ + return validate_string(minutes, MINUTE_REGEX); +} \ No newline at end of file diff --git a/src/validate.h b/src/validate.h new file mode 100644 index 0000000..60b3b3e --- /dev/null +++ b/src/validate.h @@ -0,0 +1,9 @@ +#ifndef VALIDATE_H +#define VALIDATE_H +#include + +bool validate_datestring(const char* date); +bool validate_hourstring(const char* hour); +bool validate_minutestring(const char* minutes); + +#endif \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7342135..14310da 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -24,13 +24,21 @@ ADD_EXECUTABLE(time_format_tests TARGET_LINK_LIBRARIES(time_format_tests ${CMOCKA}) +ADD_EXECUTABLE(validate_tests + validate_tests.c + ../src/validate.c) +TARGET_LINK_LIBRARIES(validate_tests + ${CMOCKA}) + ADD_CUSTOM_TARGET(run_tests ALL ./break_tests COMMAND ./worktime_tests COMMAND ./time_format_tests + COMMAND ./validate_tests DEPENDS break_tests worktime_tests - time_format_tests) + time_format_tests + validate_tests) ADD_CUSTOM_COMMAND(TARGET run_tests POST_BUILD diff --git a/tests/time_format_tests.c b/tests/time_format_tests.c index 78fd743..1b1d731 100644 --- a/tests/time_format_tests.c +++ b/tests/time_format_tests.c @@ -5,7 +5,6 @@ #include #include #include -#include #include "../src/time_format.h" void get_zero_hour_and_fifteen_minutes() @@ -329,121 +328,6 @@ void get_dat_from_date() assert_int_equal(result, 24); } -void validate_valid_date_string(const char* date) -{ - bool valid = validate_datestring(date); - - assert_true(valid); -} - -void validate_valid_date_string_tests() -{ - validate_valid_date_string("2025-01-01"); - validate_valid_date_string("2025-01-31"); - validate_valid_date_string("2025-10-01"); - validate_valid_date_string("2025-10-31"); - validate_valid_date_string("2025-12-01"); - validate_valid_date_string("2025-12-31"); -} - -void validate_invalid_date_string(const char* date) -{ - bool valid = validate_datestring(date); - - assert_false(valid); -} - -void validate_invalid_date_string_tests() -{ - validate_invalid_date_string("text"); - validate_invalid_date_string("2025-13-01"); - validate_invalid_date_string("2025-12-32"); - validate_invalid_date_string("2025--2-32"); - validate_invalid_date_string("2025-1-1"); - validate_invalid_date_string("2025-01--1"); - validate_invalid_date_string("2025-001-01"); - validate_invalid_date_string("2025-001-011"); - validate_invalid_date_string("20255-01-11"); -} - -void validate_vaild_hour_string(const char* hour) -{ - bool valid = validate_hourstring(hour); - - assert_true(valid); -} - -void validate_valid_hour_string_test() -{ - char* hour = malloc(sizeof(char) * 3); - if (hour == NULL) - return; - - for (int i = 0; i < 24; i++) { - memset(hour, 0, 3); - sprintf(hour, "%d", i); - validate_vaild_hour_string(hour); - } - - free(hour); - hour = NULL; -} - -void validate_invaild_hour_string(const char* hour) -{ - bool valid = validate_hourstring(hour); - - assert_false(valid); -} - -void validate_invalid_hour_string_test() -{ - validate_invaild_hour_string("text"); - validate_invaild_hour_string("-1"); - validate_invaild_hour_string("01"); - validate_invaild_hour_string("25"); - validate_invaild_hour_string("100"); -} - -void validate_vaild_minutes_string(const char* minutes) -{ - bool valid = validate_minutestring(minutes); - - assert_true(valid); -} - -void validate_valid_minutes_string_test() -{ - char* minutes = malloc(sizeof(char) * 3); - if (minutes == NULL) - return; - - for (int i = 0; i < 60; i++) { - memset(minutes, 0, 3); - sprintf(minutes, "%d", i); - validate_vaild_minutes_string(minutes); - } - - free(minutes); - minutes = NULL; -} - -void validate_invaild_minutes_string(const char* minutes) -{ - bool valid = validate_minutestring(minutes); - - assert_false(valid); -} - -void validate_invalid_minutes_string_test() -{ - validate_invaild_minutes_string("text"); - validate_invaild_minutes_string("-1"); - validate_invaild_minutes_string("01"); - validate_invaild_minutes_string("60"); - validate_invaild_minutes_string("100"); -} - int main() { const struct CMUnitTest tests[] = { @@ -472,13 +356,7 @@ int main() cmocka_unit_test(get_seconds_from_str_minus), cmocka_unit_test(get_year_from_date), cmocka_unit_test(get_month_from_date), - cmocka_unit_test(get_dat_from_date), - cmocka_unit_test(validate_valid_date_string_tests), - cmocka_unit_test(validate_invalid_date_string_tests), - cmocka_unit_test(validate_valid_hour_string_test), - cmocka_unit_test(validate_invalid_hour_string_test), - cmocka_unit_test(validate_valid_minutes_string_test), - cmocka_unit_test(validate_invalid_minutes_string_test) + cmocka_unit_test(get_dat_from_date) }; return cmocka_run_group_tests(tests, NULL, NULL); diff --git a/tests/validate_tests.c b/tests/validate_tests.c new file mode 100644 index 0000000..a61ac34 --- /dev/null +++ b/tests/validate_tests.c @@ -0,0 +1,139 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../src/validate.h" + +void validate_valid_date_string(const char* date) +{ + bool valid = validate_datestring(date); + + assert_true(valid); +} + +void validate_valid_date_string_tests() +{ + validate_valid_date_string("2025-01-01"); + validate_valid_date_string("2025-01-31"); + validate_valid_date_string("2025-10-01"); + validate_valid_date_string("2025-10-31"); + validate_valid_date_string("2025-12-01"); + validate_valid_date_string("2025-12-31"); +} + +void validate_invalid_date_string(const char* date) +{ + bool valid = validate_datestring(date); + + assert_false(valid); +} + +void validate_invalid_date_string_tests() +{ + validate_invalid_date_string("text"); + validate_invalid_date_string("2025-13-01"); + validate_invalid_date_string("2025-12-32"); + validate_invalid_date_string("2025--2-32"); + validate_invalid_date_string("2025-1-1"); + validate_invalid_date_string("2025-01--1"); + validate_invalid_date_string("2025-001-01"); + validate_invalid_date_string("2025-001-011"); + validate_invalid_date_string("20255-01-11"); +} + +void validate_vaild_hour_string(const char* hour) +{ + bool valid = validate_hourstring(hour); + + assert_true(valid); +} + +void validate_valid_hour_string_test() +{ + char* hour = malloc(sizeof(char) * 3); + if (hour == NULL) + return; + + for (int i = 0; i < 24; i++) { + memset(hour, 0, 3); + sprintf(hour, "%d", i); + validate_vaild_hour_string(hour); + } + + free(hour); + hour = NULL; +} + +void validate_invaild_hour_string(const char* hour) +{ + bool valid = validate_hourstring(hour); + + assert_false(valid); +} + +void validate_invalid_hour_string_test() +{ + validate_invaild_hour_string("text"); + validate_invaild_hour_string("-1"); + validate_invaild_hour_string("01"); + validate_invaild_hour_string("25"); + validate_invaild_hour_string("100"); +} + +void validate_vaild_minutes_string(const char* minutes) +{ + bool valid = validate_minutestring(minutes); + + assert_true(valid); +} + +void validate_valid_minutes_string_test() +{ + char* minutes = malloc(sizeof(char) * 3); + if (minutes == NULL) + return; + + for (int i = 0; i < 60; i++) { + memset(minutes, 0, 3); + sprintf(minutes, "%d", i); + validate_vaild_minutes_string(minutes); + } + + free(minutes); + minutes = NULL; +} + +void validate_invaild_minutes_string(const char* minutes) +{ + bool valid = validate_minutestring(minutes); + + assert_false(valid); +} + +void validate_invalid_minutes_string_test() +{ + validate_invaild_minutes_string("text"); + validate_invaild_minutes_string("-1"); + validate_invaild_minutes_string("01"); + validate_invaild_minutes_string("60"); + validate_invaild_minutes_string("100"); +} + +int main() +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(validate_valid_date_string_tests), + cmocka_unit_test(validate_invalid_date_string_tests), + cmocka_unit_test(validate_valid_hour_string_test), + cmocka_unit_test(validate_invalid_hour_string_test), + cmocka_unit_test(validate_valid_minutes_string_test), + cmocka_unit_test(validate_invalid_minutes_string_test) + }; + + return cmocka_run_group_tests(tests, NULL, NULL); +} \ No newline at end of file