5
#include <gtest/gtest.h>
9
typedef Utf8Encoding<uint32_t> Utf8;
11
void convert(const char *utf8, wchar_t *wchar)
14
*wchar++ = Utf8::Decode(utf8);
22
convert("Hello~\xc2\x80 \xc3\xbf", result); // U+0000 to U+00FF
23
EXPECT_STREQ(L"Hello~\x0080 \x00FF" , result);
25
convert("\xc4\x80 \xc4\x81 \xc7\xbe \xc7\xbf", result); // U+0100 to U+01FF
26
EXPECT_STREQ(L"\x0100 \x0101 \x01fe \x01ff", result);
28
convert("\xc8\x80 \xca\x87 \xcb\xbf", result); // U+0200 to U+02FF
29
EXPECT_STREQ(L"\x0200 \x0287 \x02ff", result);
31
convert("\xd0\x90 \xd0\xaf \xd1\x8f \xd3\xbf", result); // U+0400 ... U+04FF
32
EXPECT_STREQ(L"\x0410 \x042f \x044f \x04ff", result);
34
convert("\xdf\xbf \xdc\x80", result); // U+0700 to U+07FF
35
EXPECT_STREQ(L"\x07FF \x0700", result);
37
convert("\xe0\xa0\x80 \xe1\x87\xbf \xe1\xa7\xbf \xef\xbf\xbf", result); // U+0800 ...
38
EXPECT_STREQ(L"\x0800 \x11FF \x19ff \xffff", result);
39
#if 0 // enable if wchar_t is more then 16 bits
40
convert("\xf0\x90\x80\x80 \xf0\x90\xa1\x9f", result); // U+10000 ...
41
EXPECT_STREQ(L"\x10000 \x1085F", result);
50
// unexpected continuation mark
51
convert("Hello \x85world", result);
52
EXPECT_STREQ(L"Hello ?world" , result);
54
// missed continuation mark
55
convert("Hello worl\xc4\x5f", result);
56
EXPECT_STREQ(L"Hello worl?_" , result);
63
#define TEST_ENCODE_CHAR(W, S) ptr = result; Utf8::Encode(ptr, W); *ptr = 0; EXPECT_STREQ(S , result)
65
char result[100], *ptr;
67
TEST_ENCODE_CHAR(0x0030, "\x30");
68
TEST_ENCODE_CHAR(0x007e, "\x7e");
69
TEST_ENCODE_CHAR(0x0080, "\xc2\x80");
70
TEST_ENCODE_CHAR(0x0080, "\xc2\x80");
71
TEST_ENCODE_CHAR(0x00ff, "\xc3\xbf");
72
TEST_ENCODE_CHAR(0x0100, "\xc4\x80");
73
TEST_ENCODE_CHAR(0x01FF, "\xc7\xbf");
75
TEST_ENCODE_CHAR(0x19ff, "\xe1\xa7\xbf");
76
TEST_ENCODE_CHAR(0x0800, "\xe0\xa0\x80");
77
TEST_ENCODE_CHAR(0x11D00, "\xf0\x91\xb4\x80");
78
TEST_ENCODE_CHAR(0x120FF, "\xf0\x92\x83\xbf");
85
EXPECT_EQ(5u, Utf8::StrLen("Hello"));
86
EXPECT_EQ(13u, Utf8::StrLen("Hello, \xd0\x9c\xd0\xb5\xd0\xb4\xd0\xb2\xd0\xb5\xd0\xb4"));