Branch data Line data Source code
1 : : #include "sute.h"
2 : :
3 : : /**
4 : : * @brief Verify that a NULL-terminated string array matches expected contents
5 : : *
6 : : * @param[in] array Actual string array
7 : : * @param[in] expected Expected strings in order
8 : : * @param[in] expected_size Number of expected entries before the NULL terminator
9 : : * @return Return status code
10 : : */
11 : 1 : static Return verify_array_contents(
12 : : char **array,
13 : : const char **expected,
14 : : size_t expected_size)
15 : : {
16 : :
17 : : /* The status that will be returned before exiting */
18 : : /* By default, assumes the function ran without errors */
19 : 1 : Return status = SUCCESS;
20 : :
21 [ + - - + ]: 1 : if((SUCCESS & status) && array == NULL)
22 : : {
23 : 0 : status = FAILURE;
24 : : }
25 : :
26 [ + + ]: 4 : for(size_t i = 0; i < expected_size; i++)
27 : : {
28 [ + - - + ]: 3 : if((SUCCESS & status) && array[i] == NULL)
29 : : {
30 : 0 : status = FAILURE;
31 : : }
32 [ + - - + ]: 3 : if((SUCCESS & status) && strcmp(array[i],expected[i]) != 0)
33 : : {
34 : 0 : status = FAILURE;
35 : : }
36 : : }
37 [ + - - + ]: 1 : if((SUCCESS & status) && array[expected_size] != NULL) // Verify NULL termination
38 : : {
39 : 0 : status = FAILURE;
40 : : }
41 : :
42 [ - + - - : 1 : deliver(status);
- + + - ]
43 : : }
44 : :
45 : 1 : static Return test0012_1(void)
46 : : {
47 : 1 : INITTEST;
48 : :
49 : 1 : char **array = NULL;
50 : 1 : const char *test_string = "Hello World";
51 : :
52 : 1 : ASSERT(SUCCESS == add_string_to_array(&array,test_string));
53 : 1 : ASSERT(array != NULL);
54 : 1 : ASSERT(array[0] != NULL);
55 : 1 : ASSERT(strcmp(array[0],test_string) == 0);
56 : 1 : ASSERT(array[1] == NULL);
57 : :
58 : 1 : free_string_array(&array);
59 : 1 : ASSERT(array == NULL);
60 : :
61 : 1 : RETURN_STATUS;
62 : : }
63 : :
64 : : /**
65 : : * @brief Verify that repeated inserts preserve order in the allocated string array
66 : : *
67 : : * @return Return status code
68 : : */
69 : 1 : static Return test0012_2(void)
70 : : {
71 : 1 : INITTEST;
72 : :
73 : 1 : char **array = NULL;
74 : 1 : const char *strings[] = {
75 : : "First","Second","Third"
76 : : };
77 : 1 : const size_t num_strings = sizeof(strings) / sizeof(strings[0]);
78 : :
79 [ + + ]: 4 : for(size_t i = 0; i < num_strings; i++)
80 : : {
81 : 3 : ASSERT(SUCCESS == add_string_to_array(&array,strings[i]));
82 : : }
83 : :
84 : 1 : ASSERT(SUCCESS & verify_array_contents(array,strings,num_strings));
85 : :
86 : 1 : free_string_array(&array);
87 : 1 : ASSERT(array == NULL);
88 : :
89 : 1 : RETURN_STATUS;
90 : : }
91 : :
92 : 1 : static Return test0012_3(void)
93 : : {
94 : 1 : INITTEST;
95 : :
96 : 1 : char **array = NULL;
97 : 1 : const char *empty_string = "";
98 : :
99 : 1 : ASSERT(SUCCESS == add_string_to_array(&array,empty_string));
100 : 1 : ASSERT(array != NULL);
101 : 1 : ASSERT(array[0] != NULL);
102 : 1 : ASSERT(strcmp(array[0],empty_string) == 0);
103 : 1 : ASSERT(array[1] == NULL);
104 : :
105 : 1 : free_string_array(&array);
106 : 1 : ASSERT(array == NULL);
107 : :
108 : 1 : RETURN_STATUS;
109 : : }
110 : :
111 : 1 : static Return test0012_4(void)
112 : : {
113 : 1 : INITTEST;
114 : :
115 : 1 : char **array = NULL;
116 : : char long_string[1024];
117 : 1 : memset(long_string,'A',sizeof(long_string) - 1);
118 : 1 : long_string[sizeof(long_string) - 1] = '\0';
119 : :
120 : 1 : ASSERT(SUCCESS == add_string_to_array(&array,long_string));
121 : 1 : ASSERT(array != NULL);
122 : 1 : ASSERT(array[0] != NULL);
123 : 1 : ASSERT(strcmp(array[0],long_string) == 0);
124 : 1 : ASSERT(array[1] == NULL);
125 : :
126 : 1 : free_string_array(&array);
127 : 1 : ASSERT(array == NULL);
128 : :
129 : 1 : RETURN_STATUS;
130 : : }
131 : :
132 : : /**
133 : : * @brief Unit tests for add_string_to_array and free_string_array cleanup semantics
134 : : */
135 : 1 : Return test0012(void)
136 : : {
137 : 1 : INITTEST;
138 : :
139 : 1 : TEST(test0012_1,"Adding string to empty array…");
140 : 1 : TEST(test0012_2,"Testing adding multiple strings…");
141 : 1 : TEST(test0012_3,"Testing adding empty string…");
142 : 1 : TEST(test0012_4,"Testing adding long string…");
143 : :
144 : 1 : RETURN_STATUS;
145 : : }
|