Line data Source code
1 : #include "sute.h"
2 :
3 : /**
4 : * @brief Helper function to test remove_trailing_slash and compare with expected output.
5 : *
6 : * This function copies the input string, applies remove_trailing_slash(), and
7 : * compares the result with the expected output.
8 : *
9 : * @param input The original path to be processed.
10 : * @param expected The expected output after removing trailing slashes.
11 : */
12 17 : static Return test_remove_trailing_slash(
13 : const char *input,
14 : const char *expected)
15 : {
16 17 : INITTEST;
17 :
18 17 : create(char,temp_buffer);
19 17 : size_t len = strlen(input) + 1; // +1 for null terminator
20 :
21 17 : ASSERT(SUCCESS == resize(temp_buffer,len));
22 :
23 17 : if(SUCCESS == status)
24 : {
25 17 : char *buffer_data = data(char,temp_buffer);
26 :
27 17 : ASSERT(buffer_data != NULL);
28 :
29 17 : if(SUCCESS == status)
30 : {
31 17 : memcpy(buffer_data,input,len);
32 :
33 17 : remove_trailing_slash(buffer_data);
34 :
35 17 : const char *buffer_view = cdata(char,temp_buffer);
36 :
37 17 : ASSERT(buffer_view != NULL);
38 :
39 17 : ASSERT(COMPLETED == strcmp(buffer_view,expected));
40 : }
41 : }
42 :
43 17 : del(temp_buffer);
44 :
45 17 : return(status);
46 : }
47 :
48 : /**
49 : * @brief Runs a series of test cases for remove_trailing_slash().
50 : *
51 : * Unit Testing of precizer. This function tests various scenarios including:
52 : * - Removing trailing slashes from paths
53 : * - Ensuring single '/' paths remain unchanged
54 : * - Handling edge cases with multiple slashes
55 : */
56 1 : Return test0022(void)
57 : {
58 1 : INITTEST;
59 :
60 : static const struct {
61 : const char *input;
62 : const char *expected;
63 : } test_cases[] = {
64 : // Basic cases
65 : {"path/","path"},
66 : {"folder////","folder"},
67 : {"/home/user////","/home/user"},
68 : {"/var/log//","/var/log"},
69 : {"/usr/local/bin/","/usr/local/bin"},
70 : {"///home///","///home"},
71 :
72 : // Root path cases
73 : {"/","/"},
74 : {"////","/"},
75 :
76 : // No trailing slashes
77 : {"path","path"},
78 : {"/usr/local/bin","/usr/local/bin"},
79 : {"no/slash/here","no/slash/here"},
80 :
81 : // Empty string
82 : {"",""},
83 :
84 : // Edge cases
85 : {"//double//slash//","//double//slash"},
86 : {"////multiple///leading/slashes////","////multiple///leading/slashes"},
87 :
88 : // Single character paths
89 : {"a/","a"},
90 : {"b////","b"},
91 : {"c","c"},
92 : {NULL,NULL} // Sentinel value
93 : };
94 :
95 18 : for(size_t i = 0; test_cases[i].input != NULL; i++)
96 : {
97 17 : ASSERT(SUCCESS == test_remove_trailing_slash(test_cases[i].input,test_cases[i].expected));
98 : }
99 :
100 1 : RETURN_STATUS;
101 : }
|