]> gitweb.hhaalo.de Git - feierabend.git/commitdiff
change validation in extra module
authorBastian Dehn <hhaalo@arcor.de>
Sat, 15 Nov 2025 15:46:56 +0000 (16:46 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 15 Nov 2025 15:46:56 +0000 (16:46 +0100)
src/CMakeLists.txt
src/feierabend.c
src/feierabendxml.c
src/time_format.c
src/time_format.h
src/validate.c [new file with mode: 0644]
src/validate.h [new file with mode: 0644]
tests/CMakeLists.txt
tests/time_format_tests.c
tests/validate_tests.c [new file with mode: 0644]

index babdcc0b5fc7e64a612e534cb9d61dd10efe9bb3..2061be823ba23ad1a40e10b9c58e061cd361a3fb 100644 (file)
@@ -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
index 20a2047d5c968a71c41c96db757245450c0d0c6f..7b3174ce5b583d6996ee2ac278f71f170d76de95 100644 (file)
@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include "feierabend.h"
 #include "time_format.h"
+#include "validate.h"
 #include "worktime.h"
 #include "break.h"
 #include "config.h"
index a062db64a6cb82e67ada791fa1540959a2d505c7..c59a08c9599950fabbc0149434d0a2505c43a694 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include "config.h"
-#include "time_format.h"
+#include "validate.h"
 #include "xml.h"
 
 int main(int argc, char* argv[])
index 0b9203a9f385b2e59e26b531f371e972b48ae351..4014e0170c5837d112a1e26c492ab72abd5393f0 100644 (file)
@@ -1,7 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <regex.h>
 #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
index 8665005a65918c50c76302a34c95eccef55b0c26..498e70822977b3b8b6c4fabd2057b7cfa079f251 100644 (file)
@@ -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 (file)
index 0000000..0b1c7f8
--- /dev/null
@@ -0,0 +1,49 @@
+#include <stdlib.h>
+#include <regex.h>
+#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 (file)
index 0000000..60b3b3e
--- /dev/null
@@ -0,0 +1,9 @@
+#ifndef VALIDATE_H
+#define VALIDATE_H
+#include <stdbool.h>
+
+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
index 7342135df973daa84f107ed4ff97faff04c2180d..14310da8d258caefddefe90914bf3b98b1b18608 100644 (file)
@@ -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
index 78fd7437083b209afa180d4eb33edd19fa23eb7e..1b1d731c0b6875c94cf2c8ef0cf06d9d47fbc9ac 100644 (file)
@@ -5,7 +5,6 @@
 #include <cmocka.h>
 #include <string.h>
 #include <stdlib.h>
-#include <stdio.h>
 #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 (file)
index 0000000..a61ac34
--- /dev/null
@@ -0,0 +1,139 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <setjmp.h>
+#include <cmocka.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdbool.h>
+#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