In the recent codebase update (8bf6fbd (Merge branch 'js/doc-unit-tests', 2023-12-09)), a new unit testing framework was merged, providing a standardized approach for testing C code. Prior to this update, some unit tests relied on the test helper mechanism, lacking a dedicated unit testing framework. It's more natural to perform these unit tests using the new unit test framework. Let's migrate the unit tests for strcmp-offset functionality from the legacy approach using the test-tool command `test-tool strcmp-offset` in helper/test-strcmp-offset.c to the new unit testing framework (t/unit-tests/test-lib.h). The migration involves refactoring the tests to utilize the testing macros provided by the framework (TEST() and check_*()). Helped-by: Patrick Steinhardt <ps@xxxxxx> Mentored-by: Christian Couder <chriscool@xxxxxxxxxxxxx> Mentored-by: Kaartic Sivaraam <kaartic.sivaraam@xxxxxxxxx> Co-authored-by: Achu Luma <ach.lumap@xxxxxxxxx> Signed-off-by: Achu Luma <ach.lumap@xxxxxxxxx> Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx> --- The v2 only adjusts the formatting to be in line with the style described in CodingGuidelines. And it is also rebased on 'next' to avoid Makefile conflicts. CI for v2: https://github.com/spectre10/git/actions/runs/9150288967 Range-diff against v1: 1: 47e7df1d22 ! 1: 3c2a6f7e9b Port helper/test-strcmp-offset.c to unit-tests/t-strcmp-offset.c @@ ## Metadata ## -Author: Achu Luma <ach.lumap@xxxxxxxxx> +Author: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx> ## Commit message ## - Port helper/test-strcmp-offset.c to unit-tests/t-strcmp-offset.c + t/: port helper/test-strcmp-offset.c to unit-tests/t-strcmp-offset.c In the recent codebase update (8bf6fbd (Merge branch 'js/doc-unit-tests', 2023-12-09)), a new unit testing framework was @@ Commit message The migration involves refactoring the tests to utilize the testing macros provided by the framework (TEST() and check_*()). + Helped-by: Patrick Steinhardt <ps@xxxxxx> Mentored-by: Christian Couder <chriscool@xxxxxxxxxxxxx> + Mentored-by: Kaartic Sivaraam <kaartic.sivaraam@xxxxxxxxx> + Co-authored-by: Achu Luma <ach.lumap@xxxxxxxxx> Signed-off-by: Achu Luma <ach.lumap@xxxxxxxxx> + Signed-off-by: Ghanshyam Thakkar <shyamthakkar001@xxxxxxxxx> ## Makefile ## @@ Makefile: TEST_BUILTINS_OBJS += test-sha1.o @@ Makefile: TEST_BUILTINS_OBJS += test-sha1.o TEST_BUILTINS_OBJS += test-string-list.o TEST_BUILTINS_OBJS += test-submodule-config.o TEST_BUILTINS_OBJS += test-submodule-nested-repo-config.o -@@ Makefile: UNIT_TEST_PROGRAMS += t-mem-pool - UNIT_TEST_PROGRAMS += t-strbuf - UNIT_TEST_PROGRAMS += t-ctype +@@ Makefile: UNIT_TEST_PROGRAMS += t-ctype + UNIT_TEST_PROGRAMS += t-mem-pool UNIT_TEST_PROGRAMS += t-prio-queue + UNIT_TEST_PROGRAMS += t-strbuf +UNIT_TEST_PROGRAMS += t-strcmp-offset + UNIT_TEST_PROGRAMS += t-trailer UNIT_TEST_PROGS = $(patsubst %,$(UNIT_TEST_BIN)/%$X,$(UNIT_TEST_PROGRAMS)) UNIT_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(UNIT_TEST_PROGRAMS)) - UNIT_TEST_OBJS += $(UNIT_TEST_DIR)/test-lib.o ## t/helper/test-strcmp-offset.c (deleted) ## @@ @@ t/unit-tests/t-strcmp-offset.c (new) +#include "test-lib.h" +#include "read-cache-ll.h" + -+static void check_strcmp_offset(const char *string1, const char *string2, int expect_result, uintmax_t expect_offset) ++static void check_strcmp_offset(const char *string1, const char *string2, ++ int expect_result, uintmax_t expect_offset) +{ -+ int result; + size_t offset; ++ int result = strcmp_offset(string1, string2, &offset); + -+ result = strcmp_offset(string1, string2, &offset); -+ -+ /* Because different CRTs behave differently, only rely on signs of the result values. */ ++ /* ++ * Because different CRTs behave differently, only rely on signs of the ++ * result values. ++ */ + result = (result < 0 ? -1 : -+ result > 0 ? 1 : -+ 0); ++ result > 0 ? 1 : ++ 0); + + check_int(result, ==, expect_result); + check_uint((uintmax_t)offset, ==, expect_offset); +} + +#define TEST_STRCMP_OFFSET(string1, string2, expect_result, expect_offset) \ -+ TEST(check_strcmp_offset(string1, string2, expect_result, expect_offset), \ -+ "strcmp_offset(%s, %s) works", #string1, #string2) ++ TEST(check_strcmp_offset(string1, string2, expect_result, \ ++ expect_offset), \ ++ "strcmp_offset(%s, %s) works", #string1, #string2) + -+int cmd_main(int argc, const char **argv) { ++int cmd_main(int argc, const char **argv) ++{ + TEST_STRCMP_OFFSET("abc", "abc", 0, 3); + TEST_STRCMP_OFFSET("abc", "def", -1, 0); + TEST_STRCMP_OFFSET("abc", "abz", -1, 2); Makefile | 2 +- t/helper/test-strcmp-offset.c | 23 ---------------------- t/helper/test-tool.c | 1 - t/helper/test-tool.h | 1 - t/t0065-strcmp-offset.sh | 22 --------------------- t/unit-tests/t-strcmp-offset.c | 35 ++++++++++++++++++++++++++++++++++ 6 files changed, 36 insertions(+), 48 deletions(-) delete mode 100644 t/helper/test-strcmp-offset.c delete mode 100755 t/t0065-strcmp-offset.sh create mode 100644 t/unit-tests/t-strcmp-offset.c diff --git a/Makefile b/Makefile index 8f4432ae57..59d98ba688 100644 --- a/Makefile +++ b/Makefile @@ -839,7 +839,6 @@ TEST_BUILTINS_OBJS += test-sha1.o TEST_BUILTINS_OBJS += test-sha256.o TEST_BUILTINS_OBJS += test-sigchain.o TEST_BUILTINS_OBJS += test-simple-ipc.o -TEST_BUILTINS_OBJS += test-strcmp-offset.o TEST_BUILTINS_OBJS += test-string-list.o TEST_BUILTINS_OBJS += test-submodule-config.o TEST_BUILTINS_OBJS += test-submodule-nested-repo-config.o @@ -1338,6 +1337,7 @@ UNIT_TEST_PROGRAMS += t-ctype UNIT_TEST_PROGRAMS += t-mem-pool UNIT_TEST_PROGRAMS += t-prio-queue UNIT_TEST_PROGRAMS += t-strbuf +UNIT_TEST_PROGRAMS += t-strcmp-offset UNIT_TEST_PROGRAMS += t-trailer UNIT_TEST_PROGS = $(patsubst %,$(UNIT_TEST_BIN)/%$X,$(UNIT_TEST_PROGRAMS)) UNIT_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(UNIT_TEST_PROGRAMS)) diff --git a/t/helper/test-strcmp-offset.c b/t/helper/test-strcmp-offset.c deleted file mode 100644 index d8473cf2fc..0000000000 --- a/t/helper/test-strcmp-offset.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "test-tool.h" -#include "read-cache-ll.h" - -int cmd__strcmp_offset(int argc UNUSED, const char **argv) -{ - int result; - size_t offset; - - if (!argv[1] || !argv[2]) - die("usage: %s <string1> <string2>", argv[0]); - - result = strcmp_offset(argv[1], argv[2], &offset); - - /* - * Because different CRTs behave differently, only rely on signs - * of the result values. - */ - result = (result < 0 ? -1 : - result > 0 ? 1 : - 0); - printf("%d %"PRIuMAX"\n", result, (uintmax_t)offset); - return 0; -} diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c index f6fd0fe491..7ad7d07018 100644 --- a/t/helper/test-tool.c +++ b/t/helper/test-tool.c @@ -78,7 +78,6 @@ static struct test_cmd cmds[] = { { "sha256", cmd__sha256 }, { "sigchain", cmd__sigchain }, { "simple-ipc", cmd__simple_ipc }, - { "strcmp-offset", cmd__strcmp_offset }, { "string-list", cmd__string_list }, { "submodule", cmd__submodule }, { "submodule-config", cmd__submodule_config }, diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h index 868f33453c..d14b3072bd 100644 --- a/t/helper/test-tool.h +++ b/t/helper/test-tool.h @@ -71,7 +71,6 @@ int cmd__oid_array(int argc, const char **argv); int cmd__sha256(int argc, const char **argv); int cmd__sigchain(int argc, const char **argv); int cmd__simple_ipc(int argc, const char **argv); -int cmd__strcmp_offset(int argc, const char **argv); int cmd__string_list(int argc, const char **argv); int cmd__submodule(int argc, const char **argv); int cmd__submodule_config(int argc, const char **argv); diff --git a/t/t0065-strcmp-offset.sh b/t/t0065-strcmp-offset.sh deleted file mode 100755 index 94e34c83ed..0000000000 --- a/t/t0065-strcmp-offset.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -test_description='Test strcmp_offset functionality' - -TEST_PASSES_SANITIZE_LEAK=true -. ./test-lib.sh - -while read s1 s2 expect -do - test_expect_success "strcmp_offset($s1, $s2)" ' - echo "$expect" >expect && - test-tool strcmp-offset "$s1" "$s2" >actual && - test_cmp expect actual - ' -done <<-EOF -abc abc 0 3 -abc def -1 0 -abc abz -1 2 -abc abcdef -1 3 -EOF - -test_done diff --git a/t/unit-tests/t-strcmp-offset.c b/t/unit-tests/t-strcmp-offset.c new file mode 100644 index 0000000000..fe4c2706b1 --- /dev/null +++ b/t/unit-tests/t-strcmp-offset.c @@ -0,0 +1,35 @@ +#include "test-lib.h" +#include "read-cache-ll.h" + +static void check_strcmp_offset(const char *string1, const char *string2, + int expect_result, uintmax_t expect_offset) +{ + size_t offset; + int result = strcmp_offset(string1, string2, &offset); + + /* + * Because different CRTs behave differently, only rely on signs of the + * result values. + */ + result = (result < 0 ? -1 : + result > 0 ? 1 : + 0); + + check_int(result, ==, expect_result); + check_uint((uintmax_t)offset, ==, expect_offset); +} + +#define TEST_STRCMP_OFFSET(string1, string2, expect_result, expect_offset) \ + TEST(check_strcmp_offset(string1, string2, expect_result, \ + expect_offset), \ + "strcmp_offset(%s, %s) works", #string1, #string2) + +int cmd_main(int argc, const char **argv) +{ + TEST_STRCMP_OFFSET("abc", "abc", 0, 3); + TEST_STRCMP_OFFSET("abc", "def", -1, 0); + TEST_STRCMP_OFFSET("abc", "abz", -1, 2); + TEST_STRCMP_OFFSET("abc", "abcdef", -1, 3); + + return test_done(); +} -- 2.45.1