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(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 : :
33 [ + - - + ]: 3 : if((SUCCESS & status) && strcmp(array[i],expected[i]) != 0)
34 : : {
35 : 0 : status = FAILURE;
36 : : }
37 : : }
38 : :
39 [ + - - + ]: 1 : if((SUCCESS & status) && array[expected_size] != NULL) // Verify NULL termination
40 : : {
41 : 0 : status = FAILURE;
42 : : }
43 : :
44 : 1 : deliver(status);
45 : : }
46 : :
47 : 1 : static Return test0012_1(void)
48 : : {
49 : 1 : INITTEST;
50 : :
51 : 1 : char **array = NULL;
52 : 1 : const char *test_string = "Hello World";
53 : :
54 : 1 : ASSERT(SUCCESS == add_string_to_array(&array,test_string));
55 : 1 : ASSERT(array != NULL);
56 : 1 : ASSERT(array[0] != NULL);
57 : 1 : ASSERT(strcmp(array[0],test_string) == 0);
58 : 1 : ASSERT(array[1] == NULL);
59 : :
60 : 1 : free_string_array(&array);
61 : 1 : ASSERT(array == NULL);
62 : :
63 : 1 : RETURN_STATUS;
64 : : }
65 : :
66 : : /**
67 : : * @brief Verify that repeated inserts preserve order in the allocated string array
68 : : *
69 : : * @return Return status code
70 : : */
71 : 1 : static Return test0012_2(void)
72 : : {
73 : 1 : INITTEST;
74 : :
75 : 1 : char **array = NULL;
76 : 1 : const char *strings[] = {
77 : : "First","Second","Third"
78 : : };
79 : 1 : const size_t num_strings = sizeof(strings) / sizeof(strings[0]);
80 : :
81 [ + + ]: 4 : for(size_t i = 0; i < num_strings; i++)
82 : : {
83 : 3 : ASSERT(SUCCESS == add_string_to_array(&array,strings[i]));
84 : : }
85 : :
86 : 1 : ASSERT(SUCCESS & verify_array_contents(array,strings,num_strings));
87 : :
88 : 1 : free_string_array(&array);
89 : 1 : ASSERT(array == NULL);
90 : :
91 : 1 : RETURN_STATUS;
92 : : }
93 : :
94 : 1 : static Return test0012_3(void)
95 : : {
96 : 1 : INITTEST;
97 : :
98 : 1 : char **array = NULL;
99 : 1 : const char *empty_string = "";
100 : :
101 : 1 : ASSERT(SUCCESS == add_string_to_array(&array,empty_string));
102 : 1 : ASSERT(array != NULL);
103 : 1 : ASSERT(array[0] != NULL);
104 : 1 : ASSERT(strcmp(array[0],empty_string) == 0);
105 : 1 : ASSERT(array[1] == NULL);
106 : :
107 : 1 : free_string_array(&array);
108 : 1 : ASSERT(array == NULL);
109 : :
110 : 1 : RETURN_STATUS;
111 : : }
112 : :
113 : 1 : static Return test0012_4(void)
114 : : {
115 : 1 : INITTEST;
116 : :
117 : 1 : char **array = NULL;
118 : : char long_string[1024];
119 : 1 : memset(long_string,'A',sizeof(long_string) - 1);
120 : 1 : long_string[sizeof(long_string) - 1] = '\0';
121 : :
122 : 1 : ASSERT(SUCCESS == add_string_to_array(&array,long_string));
123 : 1 : ASSERT(array != NULL);
124 : 1 : ASSERT(array[0] != NULL);
125 : 1 : ASSERT(strcmp(array[0],long_string) == 0);
126 : 1 : ASSERT(array[1] == NULL);
127 : :
128 : 1 : free_string_array(&array);
129 : 1 : ASSERT(array == NULL);
130 : :
131 : 1 : RETURN_STATUS;
132 : : }
133 : :
134 : : /**
135 : : * @brief Run unit tests for add_string_to_array() and cleanup behavior
136 : : */
137 : 1 : Return test0012(void)
138 : : {
139 : 1 : INITTEST;
140 : :
141 : 1 : TEST(test0012_1,"add_string_to_array(): add to empty array");
142 : 1 : TEST(test0012_2,"add_string_to_array(): add multiple strings");
143 : 1 : TEST(test0012_3,"add_string_to_array(): add empty string");
144 : 1 : TEST(test0012_4,"add_string_to_array(): add long string");
145 : :
146 : 1 : RETURN_STATUS;
147 : : }
|