From 6cbc9892cb36df428caef34c347352b1e1acd5c3 Mon Sep 17 00:00:00 2001 From: Terry Carr Date: Fri, 9 Oct 2026 20:53:53 +0100 Subject: [PATCH] test: enhance hashtag span tests for better coverage and edge cases --- test/test_utf8_text.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/test/test_utf8_text.cpp b/test/test_utf8_text.cpp index 3ccecf0..1ba9113 100644 --- a/test/test_utf8_text.cpp +++ b/test/test_utf8_text.cpp @@ -5,8 +5,43 @@ #include #include "ui-touch/Utf8Text.h" +#include "ui-touch/ChatHashtag.h" + +int main() +{ + int start, end; + const char tags[] = "Try #caf\xC3\xA8 and #cr\xC3\xA8me-br\xC3\xBBl\xC3\xA9" + "e!"; + assert(ChatHashtag::span(tags, 0, &start, &end)); + assert(std::string(tags + start, end - start) == "#caf\xC3\xA8"); + assert(ChatHashtag::span(tags, end, &start, &end)); + assert(std::string(tags + start, end - start) == "#cr\xC3\xA8me-br\xC3\xBBl\xC3\xA9" + "e"); + assert(!ChatHashtag::span(tags, end, &start, &end)); + const char decomposed[] = "#cafe\xCC\x80"; + assert(ChatHashtag::span(decomposed, 0, &start, &end)); + assert(end == (int)strlen(decomposed)); + assert(!ChatHashtag::span("@[#caf\xC3\xA8]", 0, &start, &end)); + assert(!ChatHashtag::span("https://example.org/#caf\xC3\xA8", 0, &start, &end)); + assert(!ChatHashtag::span("caf\xC3\xA8#tag", 0, &start, &end)); + assert(!ChatHashtag::span("#caf\xC3", 0, &start, &end)); + assert(!ChatHashtag::span("#1", 0, &start, &end)); + assert(!ChatHashtag::span("#1channel", 0, &start, &end)); + assert(ChatHashtag::span("#channel1", 0, &start, &end)); + assert(!ChatHashtag::span("#FFF", 0, &start, &end)); + assert(!ChatHashtag::span("#FFFF", 0, &start, &end)); + assert(!ChatHashtag::span("#FFFFFF", 0, &start, &end)); + assert(!ChatHashtag::span("#FF0000", 0, &start, &end)); + assert(!ChatHashtag::span("#FFFFFFFF", 0, &start, &end)); + assert(ChatHashtag::span("#cable", 0, &start, &end)); + std::string long_tag = "#"; + for (int count = 0; count < 15; ++count) + long_tag += "\xC3\xA8"; + assert(ChatHashtag::span(long_tag.c_str(), 0, &start, &end)); + assert(end == 31); + long_tag += "\xC3\xA8"; + assert(!ChatHashtag::span(long_tag.c_str(), 0, &start, &end)); -int main() { const char full[] = "Ouderkerk\xE2\x98\x80\xEF\xB8\x8F"; assert(strlen(full) == 15); assert(Utf8Text::valid(full, strlen(full)));