From: Achu Luma <ach.lumap@gmail.com>
To: git@vger.kernel.org
Cc: christian.couder@gmail.com, Achu Luma <ach.lumap@gmail.com>,
Christian Couder <chriscool@tuxfamily.org>
Subject: [Outreachy][PATCH] Port helper/test-advise.c to unit-tests/t-advise.c
Date: Fri, 12 Jan 2024 11:21:22 +0100 [thread overview]
Message-ID: <20240112102122.1422-1-ach.lumap@gmail.com> (raw)
In the recent codebase update (8bf6fbd00d (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.
This commit migrates the unit tests for advise_if_enabled functionality
from the legacy approach using the test-tool command `test-tool advise`
in t/helper/test-advise.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_*()).
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Achu Luma <ach.lumap@gmail.com>
---
Makefile | 2 +-
t/helper/test-advise.c | 22 -----------------
t/helper/test-tool.c | 1 -
t/helper/test-tool.h | 1 -
t/t0018-advice.sh | 33 -------------------------
t/unit-tests/t-advise.c | 53 +++++++++++++++++++++++++++++++++++++++++
6 files changed, 54 insertions(+), 58 deletions(-)
delete mode 100644 t/helper/test-advise.c
delete mode 100755 t/t0018-advice.sh
create mode 100644 t/unit-tests/t-advise.c
diff --git a/Makefile b/Makefile
index 15990ff312..27916e4341 100644
--- a/Makefile
+++ b/Makefile
@@ -783,7 +783,6 @@ X =
PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS))
-TEST_BUILTINS_OBJS += test-advise.o
TEST_BUILTINS_OBJS += test-bitmap.o
TEST_BUILTINS_OBJS += test-bloom.o
TEST_BUILTINS_OBJS += test-bundle-uri.o
@@ -1342,6 +1341,7 @@ THIRD_PARTY_SOURCES += sha1dc/%
UNIT_TEST_PROGRAMS += t-basic
UNIT_TEST_PROGRAMS += t-mem-pool
UNIT_TEST_PROGRAMS += t-strbuf
+UNIT_TEST_PROGRAMS += t-advise
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
diff --git a/t/helper/test-advise.c b/t/helper/test-advise.c
deleted file mode 100644
index 8a3fd0009a..0000000000
--- a/t/helper/test-advise.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "test-tool.h"
-#include "advice.h"
-#include "config.h"
-#include "setup.h"
-
-int cmd__advise_if_enabled(int argc, const char **argv)
-{
- if (argc != 2)
- die("usage: %s <advice>", argv[0]);
-
- setup_git_directory();
- git_config(git_default_config, NULL);
-
- /*
- * Any advice type can be used for testing, but NESTED_TAG was
- * selected here and in t0018 where this command is being
- * executed.
- */
- advise_if_enabled(ADVICE_NESTED_TAG, "%s", argv[1]);
-
- return 0;
-}
diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index 37ba996539..e7f7326ce6 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -10,7 +10,6 @@ static const char * const test_tool_usage[] = {
};
static struct test_cmd cmds[] = {
- { "advise", cmd__advise_if_enabled },
{ "bitmap", cmd__bitmap },
{ "bloom", cmd__bloom },
{ "bundle-uri", cmd__bundle_uri },
diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index 8a1a7c63da..68751dda66 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -3,7 +3,6 @@
#include "git-compat-util.h"
-int cmd__advise_if_enabled(int argc, const char **argv);
int cmd__bitmap(int argc, const char **argv);
int cmd__bloom(int argc, const char **argv);
int cmd__bundle_uri(int argc, const char **argv);
diff --git a/t/t0018-advice.sh b/t/t0018-advice.sh
deleted file mode 100755
index c13057a4ca..0000000000
--- a/t/t0018-advice.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-
-test_description='Test advise_if_enabled functionality'
-
-TEST_PASSES_SANITIZE_LEAK=true
-. ./test-lib.sh
-
-test_expect_success 'advice should be printed when config variable is unset' '
- cat >expect <<-\EOF &&
- hint: This is a piece of advice
- hint: Disable this message with "git config advice.nestedTag false"
- EOF
- test-tool advise "This is a piece of advice" 2>actual &&
- test_cmp expect actual
-'
-
-test_expect_success 'advice should be printed when config variable is set to true' '
- cat >expect <<-\EOF &&
- hint: This is a piece of advice
- hint: Disable this message with "git config advice.nestedTag false"
- EOF
- test_config advice.nestedTag true &&
- test-tool advise "This is a piece of advice" 2>actual &&
- test_cmp expect actual
-'
-
-test_expect_success 'advice should not be printed when config variable is set to false' '
- test_config advice.nestedTag false &&
- test-tool advise "This is a piece of advice" 2>actual &&
- test_must_be_empty actual
-'
-
-test_done
diff --git a/t/unit-tests/t-advise.c b/t/unit-tests/t-advise.c
new file mode 100644
index 0000000000..15df29c955
--- /dev/null
+++ b/t/unit-tests/t-advise.c
@@ -0,0 +1,53 @@
+#include "test-lib.h"
+#include "advice.h"
+#include "config.h"
+#include "setup.h"
+#include "strbuf.h"
+
+static const char expect_advice_msg[] = "hint: This is a piece of advice\n"
+ "hint: Disable this message with \"git config advice.nestedTag false\"\n";
+static const char advice_msg[] = "This is a piece of advice";
+static const char out_file[] = "./output.txt";
+
+
+static void check_advise_if_enabled(const char *argv, const char *conf_val, const char *expect) {
+ FILE *file;
+ struct strbuf actual = STRBUF_INIT;
+
+ if (conf_val)
+ git_default_advice_config("advice.nestedTag", conf_val);
+
+ file = freopen(out_file, "w", stderr);
+ if (!check(!!file)) {
+ test_msg("Error opening file %s", out_file);
+ return;
+ }
+
+ advise_if_enabled(ADVICE_NESTED_TAG, "%s", argv);
+ fclose(file);
+
+ if (!check(strbuf_read_file(&actual, out_file, 0) >= 0)) {
+ test_msg("Error reading file %s", out_file);
+ strbuf_release(&actual);
+ return;
+ }
+
+ check_str(actual.buf, expect);
+ strbuf_release(&actual);
+
+ if (!check(remove(out_file) == 0))
+ test_msg("Error deleting %s", out_file);
+}
+
+int cmd_main(int argc, const char **argv) {
+ setenv("TERM", "dumb", 1);
+
+ TEST(check_advise_if_enabled(advice_msg, NULL, expect_advice_msg),
+ "advice should be printed when config variable is unset");
+ TEST(check_advise_if_enabled(advice_msg, "true", expect_advice_msg),
+ "advice should be printed when config variable is set to true");
+ TEST(check_advise_if_enabled(advice_msg, "false", ""),
+ "advice should not be printed when config variable is set to false");
+
+ return test_done();
+}
--
2.42.0.windows.2
next reply other threads:[~2024-01-12 10:21 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-12 10:21 Achu Luma [this message]
2024-01-12 22:44 ` [Outreachy][PATCH] Port helper/test-advise.c to unit-tests/t-advise.c Junio C Hamano
2024-01-15 11:37 ` Rubén Justo
2024-01-15 17:27 ` Junio C Hamano
2024-01-15 19:24 ` Rubén Justo
2024-01-16 11:30 ` Rubén Justo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240112102122.1422-1-ach.lumap@gmail.com \
--to=ach.lumap@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).