]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t/unit-tests: adapt example decorate test to use clar test framework
authorSeyi Kuforiji <kuforiji98@gmail.com>
Fri, 31 Jan 2025 22:14:18 +0000 (23:14 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 31 Jan 2025 22:58:44 +0000 (14:58 -0800)
Introduce `test_example_decorate__initialize()` to explicitly set up
object IDs and retrieve corresponding objects before tests run. This
ensures a consistent and predictable test state without relying on data
from previous tests.

Add `test_example_decorate__cleanup()` to clear decorations after each
test, preventing interference between tests and ensuring each runs in
isolation.

Adapt example decorate test script to clar framework by using clar
assertions where necessary. Previously, tests relied on data written by
earlier tests, leading to unintended dependencies between them. This
explicitly initializes the necessary state within
`test_example_decorate__readd`, ensuring it does not depend on prior
test executions.

Mentored-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Seyi Kuforiji <kuforiji98@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
t/meson.build
t/unit-tests/t-example-decorate.c [deleted file]
t/unit-tests/u-example-decorate.c [new file with mode: 0644]

index 96910f7354253f042017fa20661d384d4d91d02a..94e9a2ab28a12c6750f6e1c5497fc7dc9622ef47 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1340,6 +1340,7 @@ THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/%
 THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/%
 
 CLAR_TEST_SUITES += u-ctype
+CLAR_TEST_SUITES += u-example-decorate
 CLAR_TEST_SUITES += u-hash
 CLAR_TEST_SUITES += u-hashmap
 CLAR_TEST_SUITES += u-mem-pool
@@ -1351,7 +1352,6 @@ CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES))
 CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/clar/clar.o
 CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/unit-test.o
 
-UNIT_TEST_PROGRAMS += t-example-decorate
 UNIT_TEST_PROGRAMS += t-oid-array
 UNIT_TEST_PROGRAMS += t-oidmap
 UNIT_TEST_PROGRAMS += t-oidtree
index c42987f0bb48e90c09b9d4c5bc6536142a5f38cb..0f9778dd227070276c47167f3c753b374c56b66c 100644 (file)
@@ -1,5 +1,6 @@
 clar_test_suites = [
   'unit-tests/u-ctype.c',
+  'unit-tests/u-example-decorate.c',
   'unit-tests/u-hash.c',
   'unit-tests/u-hashmap.c',
   'unit-tests/u-mem-pool.c',
@@ -45,7 +46,6 @@ clar_unit_tests = executable('unit-tests',
 test('unit-tests', clar_unit_tests)
 
 unit_test_programs = [
-  'unit-tests/t-example-decorate.c',
   'unit-tests/t-oid-array.c',
   'unit-tests/t-oidmap.c',
   'unit-tests/t-oidtree.c',
diff --git a/t/unit-tests/t-example-decorate.c b/t/unit-tests/t-example-decorate.c
deleted file mode 100644 (file)
index bfc776e..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
-#include "test-lib.h"
-#include "object.h"
-#include "decorate.h"
-#include "repository.h"
-
-struct test_vars {
-       struct object *one, *two, *three;
-       struct decoration n;
-       int decoration_a, decoration_b;
-};
-
-static void t_add(struct test_vars *vars)
-{
-       void *ret = add_decoration(&vars->n, vars->one, &vars->decoration_a);
-
-       check(ret == NULL);
-       ret = add_decoration(&vars->n, vars->two, NULL);
-       check(ret == NULL);
-}
-
-static void t_readd(struct test_vars *vars)
-{
-       void *ret = add_decoration(&vars->n, vars->one, NULL);
-
-       check(ret == &vars->decoration_a);
-       ret = add_decoration(&vars->n, vars->two, &vars->decoration_b);
-       check(ret == NULL);
-}
-
-static void t_lookup(struct test_vars *vars)
-{
-       void *ret = lookup_decoration(&vars->n, vars->one);
-
-       check(ret == NULL);
-       ret = lookup_decoration(&vars->n, vars->two);
-       check(ret == &vars->decoration_b);
-       ret = lookup_decoration(&vars->n, vars->three);
-       check(ret == NULL);
-}
-
-static void t_loop(struct test_vars *vars)
-{
-       int objects_noticed = 0;
-
-       for (size_t i = 0; i < vars->n.size; i++) {
-               if (vars->n.entries[i].base)
-                       objects_noticed++;
-       }
-       check_int(objects_noticed, ==, 2);
-}
-
-int cmd_main(int argc UNUSED, const char **argv UNUSED)
-{
-       struct object_id one_oid = { { 1 } }, two_oid = { { 2 } }, three_oid = { { 3 } };
-       struct test_vars vars = { 0 };
-
-       vars.one = lookup_unknown_object(the_repository, &one_oid);
-       vars.two = lookup_unknown_object(the_repository, &two_oid);
-       vars.three = lookup_unknown_object(the_repository, &three_oid);
-
-       TEST(t_add(&vars),
-            "Add 2 objects, one with a non-NULL decoration and one with a NULL decoration.");
-       TEST(t_readd(&vars),
-            "When re-adding an already existing object, the old decoration is returned.");
-       TEST(t_lookup(&vars),
-            "Lookup returns the added declarations, or NULL if the object was never added.");
-       TEST(t_loop(&vars), "The user can also loop through all entries.");
-
-       clear_decoration(&vars.n, NULL);
-
-       return test_done();
-}
diff --git a/t/unit-tests/u-example-decorate.c b/t/unit-tests/u-example-decorate.c
new file mode 100644 (file)
index 0000000..9b1d1ce
--- /dev/null
@@ -0,0 +1,64 @@
+#define USE_THE_REPOSITORY_VARIABLE
+
+#include "unit-test.h"
+#include "object.h"
+#include "decorate.h"
+#include "repository.h"
+
+struct test_vars {
+       struct object *one, *two, *three;
+       struct decoration n;
+       int decoration_a, decoration_b;
+};
+
+static struct test_vars vars;
+
+void test_example_decorate__initialize(void)
+{
+       struct object_id one_oid = { { 1 } }, two_oid = { { 2 } }, three_oid = { { 3 } };
+
+       vars.one = lookup_unknown_object(the_repository, &one_oid);
+       vars.two = lookup_unknown_object(the_repository, &two_oid);
+       vars.three = lookup_unknown_object(the_repository, &three_oid);
+}
+
+void test_example_decorate__cleanup(void)
+{
+       clear_decoration(&vars.n, NULL);
+}
+
+void test_example_decorate__add(void)
+{
+       cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL);
+       cl_assert_equal_p(add_decoration(&vars.n, vars.two, NULL), NULL);
+}
+
+void test_example_decorate__readd(void)
+{
+       cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL);
+       cl_assert_equal_p(add_decoration(&vars.n, vars.two, NULL), NULL);
+       cl_assert_equal_p(add_decoration(&vars.n, vars.one, NULL), &vars.decoration_a);
+       cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL);
+}
+
+void test_example_decorate__lookup(void)
+{
+       cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL);
+       cl_assert_equal_p(add_decoration(&vars.n, vars.one, NULL), NULL);
+       cl_assert_equal_p(lookup_decoration(&vars.n, vars.two), &vars.decoration_b);
+       cl_assert_equal_p(lookup_decoration(&vars.n, vars.one), NULL);
+}
+
+void test_example_decorate__loop(void)
+{
+       int objects_noticed = 0;
+
+       cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL);
+       cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL);
+
+       for (size_t i = 0; i < vars.n.size; i++)
+               if (vars.n.entries[i].base)
+                       objects_noticed++;
+
+       cl_assert_equal_i(objects_noticed, 2);
+}