test: enhance hashtag span tests for better coverage and edge cases

This commit is contained in:
Terry Carr committed 2026-10-09 20:53:53 +01:00
1 parent 8c31d759b5
commit 6cbc9892cb
1 file changed
+36 -1
+36 -1
View File
@@ -5,8 +5,43 @@
#include <string>
#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)));