u-string-list: add unit tests for string-list methods

Unit tests in u-string-list.c does not cover several methods in string-list, this gap in coverage makes it difficult to ensure no regressions are introduced in future changes. Add unit tests for the following methods to enhance coverage: string_list_remove_empty_items() unsorted_string_list_has_string() unsorted_string_list_delete_item() string_list_has_string() string_list_insert() string_list_sort() string_list_remove() Signed-off-by: Amisha Chhajed <amishhhaaaa@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Amisha Chhajed committed Jan 29, 2026 at 17:42 UTC 208642cfbb53781602af1fa77c67322c0aab0ad9
1 file changed +209
t/unit-tests/u-string-list.c
+209
@@ -243,6 +243,138 @@ void test_string_list__filter(void)
243 t_string_list_clear(&list, 0);
244 }
245
246 +static void t_string_list_has_string(
247 + struct string_list *list,
248 + const char *string,
249 + int expected)
250 +{
251 + int has_string = string_list_has_string(list, string);
252 + cl_assert_equal_i(has_string, expected);
253 +}
254 +
255 +void test_string_list__has_string(void)
256 +{
257 + struct string_list list = STRING_LIST_INIT_DUP;
258 +
259 + t_create_string_list_dup(&list, 0, NULL);
260 + t_string_list_has_string(&list, "", 0);
261 +
262 + t_create_string_list_dup(&list, 0, "a", "b", "c", NULL);
263 + t_string_list_has_string(&list, "a", 1);
264 + t_string_list_has_string(&list, "b", 1);
265 + t_string_list_has_string(&list, "c", 1);
266 + t_string_list_has_string(&list, "d", 0);
267 +
268 + t_string_list_clear(&list, 0);
269 +}
270 +
271 +static void t_string_list_insert(struct string_list *expected_strings, ...)
272 +{
273 + struct string_list strings_to_insert = STRING_LIST_INIT_DUP;
274 + struct string_list list = STRING_LIST_INIT_DUP;
275 + va_list ap;
276 +
277 + va_start(ap, expected_strings);
278 + t_vcreate_string_list_dup(&strings_to_insert, 0, ap);
279 + va_end(ap);
280 +
281 + for (size_t i = 0; i < strings_to_insert.nr; i++)
282 + string_list_insert(&list, strings_to_insert.items[i].string);
283 +
284 + t_string_list_equal(&list, expected_strings);
285 +
286 + string_list_clear(&strings_to_insert, 0);
287 + string_list_clear(&list, 0);
288 +}
289 +
290 +void test_string_list__insert(void)
291 +{
292 + struct string_list expected_strings = STRING_LIST_INIT_DUP;
293 +
294 + t_create_string_list_dup(&expected_strings, 0, NULL);
295 + t_string_list_insert(&expected_strings, NULL);
296 +
297 + t_create_string_list_dup(&expected_strings, 0, "a", "b", NULL);
298 + t_string_list_insert(&expected_strings, "b", "a", "a", "b", NULL);
299 +
300 + t_create_string_list_dup(&expected_strings, 0, "a", "b", "c", NULL);
301 + t_string_list_insert(&expected_strings, "c", "b", "a", "c", "b", NULL);
302 +
303 + t_create_string_list_dup(&expected_strings, 0, "", "a", NULL);
304 + t_string_list_insert(&expected_strings, "a", "a", "a", "", NULL);
305 +
306 + t_string_list_clear(&expected_strings, 0);
307 +}
308 +
309 +static void t_string_list_sort(struct string_list *list, ...)
310 +{
311 + struct string_list expected_strings = STRING_LIST_INIT_DUP;
312 + va_list ap;
313 +
314 + va_start(ap, list);
315 + t_vcreate_string_list_dup(&expected_strings, 0, ap);
316 + va_end(ap);
317 +
318 + string_list_sort(list);
319 + t_string_list_equal(list, &expected_strings);
320 +
321 + string_list_clear(&expected_strings, 0);
322 +}
323 +
324 +void test_string_list__sort(void)
325 +{
326 + struct string_list list = STRING_LIST_INIT_DUP;
327 +
328 + t_create_string_list_dup(&list, 0, NULL);
329 + t_string_list_sort(&list, NULL);
330 +
331 + t_create_string_list_dup(&list, 0, "b", "", "a", NULL);
332 + t_string_list_sort(&list, "", "a", "b", NULL);
333 +
334 + t_create_string_list_dup(&list, 0, "c", "a", "b", "a", NULL);
335 + t_string_list_sort(&list, "a", "a", "b", "c", NULL);
336 +
337 + t_string_list_clear(&list, 0);
338 +}
339 +
340 +static void t_string_list_remove(
341 + struct string_list *expected_strings,
342 + struct string_list *list,
343 + char const *str)
344 +{
345 + string_list_remove(list, str, 0);
346 + t_string_list_equal(list, expected_strings);
347 +}
348 +
349 +void test_string_list__remove(void)
350 +{
351 + struct string_list expected_strings = STRING_LIST_INIT_DUP;
352 + struct string_list list = STRING_LIST_INIT_DUP;
353 +
354 + t_create_string_list_dup(&expected_strings, 0, NULL);
355 + t_create_string_list_dup(&list, 0, NULL);
356 + t_string_list_remove(&expected_strings, &list, "");
357 +
358 + t_create_string_list_dup(&expected_strings, 0, "a", NULL);
359 + t_create_string_list_dup(&list, 0, "a", "a", NULL);
360 + t_string_list_remove(&expected_strings, &list, "a");
361 +
362 + t_create_string_list_dup(&expected_strings, 0, "a", "b", "b", NULL);
363 + t_create_string_list_dup(&list, 0, "a", "b", "b", "c", NULL);
364 + t_string_list_remove(&expected_strings, &list, "c");
365 +
366 + t_create_string_list_dup(&expected_strings, 0, "a", "b", "d", NULL);
367 + t_create_string_list_dup(&list, 0, "a", "b", "c", "d", NULL);
368 + t_string_list_remove(&expected_strings, &list, "c");
369 +
370 + t_create_string_list_dup(&expected_strings, 0, "a", "b", "c", "d", NULL);
371 + t_create_string_list_dup(&list, 0, "a", "b", "c", "d", NULL);
372 + t_string_list_remove(&expected_strings, &list, "e");
373 +
374 + t_string_list_clear(&expected_strings, 0);
375 + t_string_list_clear(&list, 0);
376 +}
377 +
378 static void t_string_list_remove_duplicates(struct string_list *list, ...)
379 {
380 struct string_list expected_strings = STRING_LIST_INIT_DUP;
@@ -304,3 +436,80 @@ void test_string_list__remove_duplicates(void)
436
437 t_string_list_clear(&list, 0);
438 }
439 +
440 +static void t_string_list_remove_empty_items(
441 + struct string_list *expected_strings,
442 + struct string_list *list)
443 +{
444 + string_list_remove_empty_items(list, 0);
445 + t_string_list_equal(list, expected_strings);
446 +}
447 +
448 +void test_string_list__remove_empty_items(void)
449 +{
450 + struct string_list expected_strings = STRING_LIST_INIT_DUP;
451 + struct string_list list = STRING_LIST_INIT_DUP;
452 +
453 + t_create_string_list_dup(&expected_strings, 0, NULL);
454 + t_create_string_list_dup(&list, 0, "", "", "", NULL);
455 + t_string_list_remove_empty_items(&expected_strings, &list);
456 +
457 + t_create_string_list_dup(&expected_strings, 0, "a", "b", NULL);
458 + t_create_string_list_dup(&list, 0, "a", "", "b", "", NULL);
459 + t_string_list_remove_empty_items(&expected_strings, &list);
460 +
461 + t_string_list_clear(&expected_strings, 0);
462 + t_string_list_clear(&list, 0);
463 +}
464 +
465 +static void t_string_list_unsorted_string_list_has_string(
466 + struct string_list *list,
467 + const char *str, int expected)
468 +{
469 + int has_string = unsorted_string_list_has_string(list, str);
470 + cl_assert_equal_i(has_string, expected);
471 +}
472 +
473 +void test_string_list__unsorted_string_list_has_string(void)
474 +{
475 + struct string_list list = STRING_LIST_INIT_DUP;
476 +
477 + t_create_string_list_dup(&list, 0, "b", "d", "a", NULL);
478 + t_string_list_unsorted_string_list_has_string(&list, "a", 1);
479 + t_string_list_unsorted_string_list_has_string(&list, "b", 1);
480 + t_string_list_unsorted_string_list_has_string(&list, "c", 0);
481 + t_string_list_unsorted_string_list_has_string(&list, "d", 1);
482 +
483 + t_string_list_clear(&list, 0);
484 +}
485 +
486 +static void t_string_list_unsorted_string_list_delete_item(
487 + struct string_list *expected_list,
488 + struct string_list *list,
489 + int i)
490 +{
491 + unsorted_string_list_delete_item(list, i, 0);
492 +
493 + t_string_list_equal(list, expected_list);
494 +}
495 +
496 +void test_string_list__unsorted_string_list_delete_item(void)
497 +{
498 + struct string_list expected_strings = STRING_LIST_INIT_DUP;
499 + struct string_list list = STRING_LIST_INIT_DUP;
500 +
501 + t_create_string_list_dup(&expected_strings, 0, "a", "c", "b", NULL);
502 + t_create_string_list_dup(&list, 0, "a", "d", "b", "c", NULL);
503 + t_string_list_unsorted_string_list_delete_item(&expected_strings, &list, 1);
504 +
505 + t_create_string_list_dup(&expected_strings, 0, NULL);
506 + t_create_string_list_dup(&list, 0, "", NULL);
507 + t_string_list_unsorted_string_list_delete_item(&expected_strings, &list, 0);
508 +
509 + t_create_string_list_dup(&expected_strings, 0, "a", "d", "c", "b", NULL);
510 + t_create_string_list_dup(&list, 0, "a", "d", "c", "b", "d", NULL);
511 + t_string_list_unsorted_string_list_delete_item(&expected_strings, &list, 4);
512 +
513 + t_string_list_clear(&expected_strings, 0);
514 + t_string_list_clear(&list, 0);
515 +}