@@ -13,6 +13,18 @@ static void t_vcreate_string_list_dup(struct string_list *list,
13
13
string_list_append (list , arg );
14
14
}
15
15
16
+ static void t_create_string_list_dup (struct string_list * list , int free_util , ...)
17
+ {
18
+ va_list ap ;
19
+
20
+ cl_assert (list -> strdup_strings );
21
+
22
+ string_list_clear (list , free_util );
23
+ va_start (ap , free_util );
24
+ t_vcreate_string_list_dup (list , free_util , ap );
25
+ va_end (ap );
26
+ }
27
+
16
28
static void t_string_list_clear (struct string_list * list , int free_util )
17
29
{
18
30
string_list_clear (list , free_util );
@@ -103,3 +115,57 @@ void test_string_list__split_in_place(void)
103
115
104
116
t_string_list_clear (& list , 0 );
105
117
}
118
+
119
+ static int prefix_cb (struct string_list_item * item , void * cb_data )
120
+ {
121
+ const char * prefix = (const char * )cb_data ;
122
+ return starts_with (item -> string , prefix );
123
+ }
124
+
125
+ static void t_string_list_filter (struct string_list * list ,
126
+ string_list_each_func_t want , void * cb_data , ...)
127
+ {
128
+ struct string_list expected_strings = STRING_LIST_INIT_DUP ;
129
+ va_list ap ;
130
+
131
+ va_start (ap , cb_data );
132
+ t_vcreate_string_list_dup (& expected_strings , 0 , ap );
133
+ va_end (ap );
134
+
135
+ filter_string_list (list , 0 , want , cb_data );
136
+ t_string_list_equal (list , & expected_strings );
137
+
138
+ string_list_clear (& expected_strings , 0 );
139
+ }
140
+
141
+ void test_string_list__filter (void )
142
+ {
143
+ struct string_list list = STRING_LIST_INIT_DUP ;
144
+ const char * prefix = "y" ;
145
+
146
+ t_create_string_list_dup (& list , 0 , NULL );
147
+ t_string_list_filter (& list , prefix_cb , (void * )prefix , NULL );
148
+
149
+ t_create_string_list_dup (& list , 0 , "no" , NULL );
150
+ t_string_list_filter (& list , prefix_cb , (void * )prefix , NULL );
151
+
152
+ t_create_string_list_dup (& list , 0 , "yes" , NULL );
153
+ t_string_list_filter (& list , prefix_cb , (void * )prefix , "yes" , NULL );
154
+
155
+ t_create_string_list_dup (& list , 0 , "no" , "yes" , NULL );
156
+ t_string_list_filter (& list , prefix_cb , (void * )prefix , "yes" , NULL );
157
+
158
+ t_create_string_list_dup (& list , 0 , "yes" , "no" , NULL );
159
+ t_string_list_filter (& list , prefix_cb , (void * )prefix , "yes" , NULL );
160
+
161
+ t_create_string_list_dup (& list , 0 , "y1" , "y2" , NULL );
162
+ t_string_list_filter (& list , prefix_cb , (void * )prefix , "y1" , "y2" , NULL );
163
+
164
+ t_create_string_list_dup (& list , 0 , "y2" , "y1" , NULL );
165
+ t_string_list_filter (& list , prefix_cb , (void * )prefix , "y2" , "y1" , NULL );
166
+
167
+ t_create_string_list_dup (& list , 0 , "x1" , "x2" , NULL );
168
+ t_string_list_filter (& list , prefix_cb , (void * )prefix , NULL );
169
+
170
+ t_string_list_clear (& list , 0 );
171
+ }
0 commit comments