commit 80ac051dd10bb13b189f700f0361bcfe80a80eb4
parent 2b0888c8135bcfa41bc6e661a5b69a9c2a9deb72
Author: Chris Bracken <chris@bracken.jp>
Date: Fri, 25 Jul 2025 07:11:15 -0700
Add tests for print_gopher_link_padded
Diffstat:
M | format_tests.c | | | 122 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 122 insertions(+), 0 deletions(-)
diff --git a/format_tests.c b/format_tests.c
@@ -377,3 +377,125 @@ UTEST(print_gopher_link, EmptyString) {
free(buf);
}
+
+UTEST(print_gopher_link_padded, BasicPadding) {
+ char* buf = NULL;
+ size_t size = 0;
+ FILE* out = open_memstream(&buf, &size);
+ ASSERT_NE(NULL, out);
+
+ print_gopher_link_padded(out, "hello", 10, ' ');
+ fclose(out);
+
+ EXPECT_STREQ("hello ", buf);
+
+ free(buf);
+}
+
+UTEST(print_gopher_link_padded, NoPadding) {
+ char* buf = NULL;
+ size_t size = 0;
+ FILE* out = open_memstream(&buf, &size);
+ ASSERT_NE(NULL, out);
+
+ print_gopher_link_padded(out, "hello", 5, ' ');
+ fclose(out);
+
+ EXPECT_STREQ("hello", buf);
+
+ free(buf);
+}
+
+UTEST(print_gopher_link_padded, Truncation) {
+ char* buf = NULL;
+ size_t size = 0;
+ FILE* out = open_memstream(&buf, &size);
+ ASSERT_NE(NULL, out);
+
+ print_gopher_link_padded(out, "hello world", 10, ' ');
+ fclose(out);
+
+ EXPECT_STREQ("hello wor…", buf);
+
+ free(buf);
+}
+
+UTEST(print_gopher_link_padded, SpecialChars) {
+ char* buf = NULL;
+ size_t size = 0;
+ FILE* out = open_memstream(&buf, &size);
+ ASSERT_NE(NULL, out);
+
+ print_gopher_link_padded(out, "a|\t\r\nb", 20, '.');
+ fclose(out);
+
+ EXPECT_STREQ("a\\| b.........", buf);
+
+ free(buf);
+}
+
+UTEST(print_gopher_link_padded, MultiByte) {
+ char* buf = NULL;
+ size_t size = 0;
+ FILE* out = open_memstream(&buf, &size);
+ ASSERT_NE(NULL, out);
+
+ print_gopher_link_padded(out, "こんにちは", 10, ' ');
+ fclose(out);
+
+ EXPECT_STREQ("こんにちは ", buf);
+
+ free(buf);
+}
+
+UTEST(print_gopher_link_padded, ZeroWidth) {
+ char* buf = NULL;
+ size_t size = 0;
+ FILE* out = open_memstream(&buf, &size);
+ ASSERT_NE(NULL, out);
+
+ print_gopher_link_padded(out, "hello", 0, ' ');
+ fclose(out);
+
+ EXPECT_STREQ("", buf);
+
+ free(buf);
+}
+
+UTEST(print_gopher_link_padded, NoPadChar) {
+ char* buf = NULL;
+ size_t size = 0;
+ FILE* out = open_memstream(&buf, &size);
+ ASSERT_NE(NULL, out);
+
+ print_gopher_link_padded(out, "hello", 10, '\0');
+ fclose(out);
+
+ EXPECT_STREQ("hello", buf);
+
+ free(buf);
+}
+
+UTEST(print_gopher_link_padded, ComplexEmoji) {
+ char* buf = NULL;
+ size_t size = 0;
+ FILE* out = open_memstream(&buf, &size);
+ ASSERT_NE(NULL, out);
+
+ /* UTF-8 encoding of Unicode extended grapheme cluster for woman health worker
+ with medium-dark skin tone. This emoji is a Unicode emoji ZWJ sequence
+ composed of 5 code points. */
+ const char* emoji = // 👩🏾⚕️
+ "\xF0\x9F\x91\xA9" // U+1F469: Woman 👩
+ "\xF0\x9F\x8F\xBE" // U+1F3FE: Emoji modifier Fitzpatrick type 5 🏾
+ "\xE2\x80\x8D" // U+200D: Zero-width joiner
+ "\xE2\x9A\x95" // U+2695: Staff of Aesculapius ⚕
+ "\xEF\xB8\x8F"; // U+FE0F: Variation selector 16 (colour emoji)
+ print_gopher_link_padded(out, emoji, 10, ' ');
+ fclose(out);
+
+ /* Expect 1 emoji, 9 spaces. */
+ EXPECT_STREQ("👩🏾⚕️ ", buf);
+
+ free(buf);
+}