From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Ævar Arnfjörð" <avarab@gmail.com>,
"SZEDER Gábor" <szeder.dev@gmail.com>,
"Johannes Schindelin" <johannes.schindelin@gmx.de>,
"Johannes Schindelin" <johannes.schindelin@gmx.de>
Subject: [PATCH 09/11] GETTEXT_POISON=rot13: do compare the output in `test_i18ncmp`
Date: Tue, 12 Jan 2021 08:47:40 +0000 [thread overview]
Message-ID: <4669ccbb1ae40f0c58a2d8e3c8b3a34d82176c7a.1610441263.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.836.git.1610441262.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
Makefile | 1 +
t/helper/test-i18n.c | 89 +++++++++++++++++++++++++++++++++++++++++
t/helper/test-tool.c | 1 +
t/helper/test-tool.h | 1 +
t/test-lib-functions.sh | 8 +++-
t/test-lib.sh | 1 +
6 files changed, 100 insertions(+), 1 deletion(-)
create mode 100644 t/helper/test-i18n.c
diff --git a/Makefile b/Makefile
index 7b64106930a..d49f80cb524 100644
--- a/Makefile
+++ b/Makefile
@@ -710,6 +710,7 @@ TEST_BUILTINS_OBJS += test-genzeros.o
TEST_BUILTINS_OBJS += test-hash-speed.o
TEST_BUILTINS_OBJS += test-hash.o
TEST_BUILTINS_OBJS += test-hashmap.o
+TEST_BUILTINS_OBJS += test-i18n.o
TEST_BUILTINS_OBJS += test-index-version.o
TEST_BUILTINS_OBJS += test-json-writer.o
TEST_BUILTINS_OBJS += test-lazy-init-name-hash.o
diff --git a/t/helper/test-i18n.c b/t/helper/test-i18n.c
new file mode 100644
index 00000000000..4b572e6efad
--- /dev/null
+++ b/t/helper/test-i18n.c
@@ -0,0 +1,89 @@
+#include "test-tool.h"
+#include "cache.h"
+
+static const char *usage_msg = "\n"
+" test-tool i18n cmp <file1> <file2>\n";
+
+static inline char do_rot13(char c)
+{
+ if (c >= 'a' && c <= 'm')
+ return c + 'n' - 'a';
+ if (c >= 'n' && c <= 'z')
+ return c + 'a' - 'n';
+ if (c >= 'A' && c <= 'M')
+ return c + 'N' - 'A';
+ if (c >= 'N' && c <= 'Z')
+ return c + 'A' - 'N';
+ return c;
+}
+
+static size_t unrot13(char *buf)
+{
+ char *p = buf, *q = buf;
+
+ while (*p) {
+ const char *begin = strstr(p, "<rot13>"), *end;
+
+ if (!begin)
+ break;
+
+ while (p != begin)
+ *(q++) = *(p++);
+
+ p += strlen("<rot13>");
+ end = strstr(p, "</rot13>");
+ if (!end)
+ BUG("could not find </rot13> in\n%s", buf);
+
+ while (p != end)
+ *(q++) = do_rot13(*(p++));
+ p += strlen("</rot13>");
+ }
+
+ while (*p)
+ *(q++) = *(p++);
+
+ return q - buf;
+}
+
+static void unrot13_strbuf(struct strbuf *buf)
+{
+ size_t len = unrot13(buf->buf);
+
+ if (len == buf->len)
+ die("not ROT13'ed:\n%s", buf->buf);
+ buf->len = len;
+}
+
+static int i18n_cmp(const char **argv)
+{
+ const char *path1 = *(argv++), *path2 = *(argv++);
+ struct strbuf a = STRBUF_INIT, b = STRBUF_INIT;
+
+ if (!path1 || !path2 || *argv)
+ usage(usage_msg);
+
+ if (strbuf_read_file(&a, path1, 0) < 0)
+ die_errno("could not read %s", path1);
+ if (strbuf_read_file(&b, path2, 0) < 0)
+ die_errno("could not read %s", path2);
+ unrot13_strbuf(&b);
+
+ if (a.len != b.len || memcmp(a.buf, b.buf, a.len))
+ return 1;
+
+ return 0;
+}
+
+int cmd__i18n(int argc, const char **argv)
+{
+ argv++;
+ if (!*argv)
+ usage(usage_msg);
+ if (!strcmp(*argv, "cmp"))
+ return i18n_cmp(argv+1);
+ else
+ usage(usage_msg);
+
+ return 0;
+}
diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index 9d6d14d9293..7e1680ac108 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -34,6 +34,7 @@ static struct test_cmd cmds[] = {
{ "genzeros", cmd__genzeros },
{ "hashmap", cmd__hashmap },
{ "hash-speed", cmd__hash_speed },
+ { "i18n", cmd__i18n },
{ "index-version", cmd__index_version },
{ "json-writer", cmd__json_writer },
{ "lazy-init-name-hash", cmd__lazy_init_name_hash },
diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index a6470ff62c4..43282a520ea 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -24,6 +24,7 @@ int cmd__genrandom(int argc, const char **argv);
int cmd__genzeros(int argc, const char **argv);
int cmd__hashmap(int argc, const char **argv);
int cmd__hash_speed(int argc, const char **argv);
+int cmd__i18n(int argc, const char **argv);
int cmd__index_version(int argc, const char **argv);
int cmd__json_writer(int argc, const char **argv);
int cmd__lazy_init_name_hash(int argc, const char **argv);
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 999982fe4a9..08731bae854 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -993,7 +993,13 @@ test_cmp_bin () {
# under GIT_TEST_GETTEXT_POISON this pretends that the command produced expected
# results.
test_i18ncmp () {
- ! test_have_prereq C_LOCALE_OUTPUT || test_cmp "$@"
+ if test rot13 = "$GIT_TEST_GETTEXT_POISON"
+ then
+ test-tool i18n cmp "$@"
+ elif test_have_prereq C_LOCALE_OUTPUT
+ then
+ test_cmp "$@"
+ fi
}
# Use this instead of "grep expected-string actual" to see if the
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 9fa7c1d0f6d..c9f9e2804fd 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -1537,6 +1537,7 @@ then
fi
test_lazy_prereq C_LOCALE_OUTPUT '
+ test rot13 != "$GIT_TEST_GETTEXT_POISON" &&
! test_bool_env GIT_TEST_GETTEXT_POISON false
'
--
gitgitgadget
next prev parent reply other threads:[~2021-01-12 8:49 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-12 8:47 [PATCH 00/11] [RFH] Introduce support for GETTEXT_POISON=rot13 Johannes Schindelin via GitGitGadget
2021-01-12 8:47 ` [PATCH 01/11] tests: remove unnecessary GIT_TEST_GETTEXT_POISON=false constructs Johannes Schindelin via GitGitGadget
2021-01-12 9:07 ` SZEDER Gábor
2021-01-12 8:47 ` [PATCH 02/11] Support GIT_TEST_GETTEXT_POISON=rot13 Johannes Schindelin via GitGitGadget
2021-01-12 19:37 ` Junio C Hamano
2021-01-12 8:47 ` [PATCH 03/11] parse-options: add forgotten translations Johannes Schindelin via GitGitGadget
2021-01-12 8:47 ` [PATCH 04/11] sha1dc: mark forgotten message for translation Johannes Schindelin via GitGitGadget
2021-01-12 11:37 ` Jeff King
2021-01-12 19:40 ` Junio C Hamano
2021-01-15 15:43 ` Johannes Schindelin
2021-01-15 16:29 ` Jeff King
2021-01-18 14:26 ` Johannes Schindelin
2021-01-18 21:06 ` Junio C Hamano
2021-01-19 15:52 ` Johannes Schindelin
2021-01-12 8:47 ` [PATCH 05/11] t0006: use `test_i18ncmp` only for C locales Johannes Schindelin via GitGitGadget
2021-01-12 8:47 ` [PATCH 06/11] t0041: stop using `test_i18ngrep` on untranslated output Johannes Schindelin via GitGitGadget
2021-01-12 8:47 ` [PATCH 07/11] t0027: mark a function as requiring the C locale Johannes Schindelin via GitGitGadget
2021-01-12 8:47 ` [PATCH 08/11] t6301: do not expect the output of `for-each-ref` to be translated Johannes Schindelin via GitGitGadget
2021-01-12 8:47 ` Johannes Schindelin via GitGitGadget [this message]
2021-01-12 19:47 ` [PATCH 09/11] GETTEXT_POISON=rot13: do compare the output in `test_i18ncmp` Junio C Hamano
2021-01-15 15:44 ` Johannes Schindelin
2021-01-15 19:58 ` Junio C Hamano
2021-01-18 14:36 ` Johannes Schindelin
2021-01-12 8:47 ` [PATCH 10/11] GETTEXT_POISON=rot13: perform actual checks in `test_i18ngrep` Johannes Schindelin via GitGitGadget
2021-01-12 8:47 ` [PATCH 11/11] test-tool i18n: do not complain about empty messages Johannes Schindelin via GitGitGadget
2021-01-12 11:34 ` [PATCH 00/11] [RFH] Introduce support for GETTEXT_POISON=rot13 Jeff King
2021-01-12 19:50 ` Junio C Hamano
2021-01-13 7:32 ` Jeff King
2021-01-16 6:38 ` Junio C Hamano
2021-01-12 13:32 ` Ævar Arnfjörð Bjarmason
2021-01-15 16:13 ` Johannes Schindelin
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4669ccbb1ae40f0c58a2d8e3c8b3a34d82176c7a.1610441263.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
--cc=pclouds@gmail.com \
--cc=szeder.dev@gmail.com \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).