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
+}