~aleteoryx/muditaos

ref: b4c6a29f47c6206785705991e341cf6ed48e17dd muditaos/module-utils/unicode/ucs2/test/unittest_ucs2.cpp -rw-r--r-- 14.2 KiB
b4c6a29f — rrandomsky [BH-1915][BH-1911] Update UI texts and translations 1 year, 8 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <catch2/catch.hpp>

#include <ucs2/UCS2.hpp>

TEST_CASE("UCS2 to UTF8 conversion")
{
    const char *messageRawBody = "0054006500730074";
    UTF8 decodedMessage        = UCS2(std::string(messageRawBody)).toUTF8();
    REQUIRE((uint32_t)('T') == decodedMessage[0]);
    REQUIRE((uint32_t)('e') == decodedMessage[1]);
    REQUIRE((uint32_t)('s') == decodedMessage[2]);
    REQUIRE((uint32_t)('t') == decodedMessage[3]);

    SECTION("UTF8 IS ASCII combination")
    {
        auto utf8 = UCS2(std::string("00380034003800370037003300380034003800340036003900380032")).toUTF8();
        REQUIRE(utf8.isASCIICombination());
        auto ascii = utf8.toASCII();
        REQUIRE(ascii == std::string("TWITTER"));
    }

    SECTION("UTF8 IS NOT ASCII combination")
    {
        auto utf8 = UCS2(std::string("003200390031")).toUTF8();
        REQUIRE_FALSE(utf8.isASCIICombination());
        REQUIRE_FALSE(utf8.toASCII().has_value());
    }
}

TEST_CASE("UCS2 from UTF8 emoji 😁")
{
    UTF8 utf8("😁");
    UCS2 ucs2       = UCS2(utf8);
    std::string str = "D83DDE01";
    REQUIRE(ucs2.str() == str);
}

TEST_CASE("UCS2 from UTF8 emoji 🍣")
{
    UTF8 utf8("🍣");
    UCS2 ucs2       = UCS2(utf8);
    std::string str = "D83CDF63";
    REQUIRE(ucs2.str() == str);
}

TEST_CASE("UCS2 text with emojis int the middle from UTF8 code")
{
    UTF8 utf8("ęą😁ęą🍣ęą");
    UCS2 ucs2 = UCS2(utf8);
    std::string expected("01190105" //ęą
                         "D83DDE01" // 😁
                         "01190105" // ęą
                         "D83CDF63" // 🍣
                         "01190105");
    REQUIRE(ucs2.str() == expected);
}

TEST_CASE("UTF8 to UCS2 conversion")
{
    UTF8 utf8("Test");
    UCS2 ucs2(utf8);
    std::string str = "0054006500730074";
    REQUIRE(ucs2.str() == str);
}

TEST_CASE("TEST special input characters from UTF8")
{
    UTF8 utf8("ęą");
    UCS2 ucs2(utf8);
    std::string str = "01190105";
    REQUIRE(ucs2.str() == str);
}

TEST_CASE("TEST special input characters from std::string")
{
    UCS2 ucs2(std::string("01190105"));
    UTF8 utf8("ęą");
    REQUIRE(ucs2.toUTF8() == utf8);
}

TEST_CASE("UTF8 emoji 🍣 from UCS2 code")
{
    UCS2 ucs2(std::string("D83CDF63"));
    UTF8 utf8("🍣");
    REQUIRE(ucs2.toUTF8() == utf8);
}

TEST_CASE("UTF8 emoji 😁 and text ęą from UCS2 code")
{
    UCS2 ucs2(std::string("D83DDE0101190105"));
    UTF8 utf8("😁ęą");
    REQUIRE(ucs2.toUTF8() == utf8);
}

TEST_CASE("UTF8 emoji 😁 and text abc from UCS2 code")
{
    UCS2 ucs2(std::string("D83CDF63006100620063"));
    UTF8 utf8("🍣abc");
    REQUIRE(ucs2.toUTF8() == utf8);
}

TEST_CASE("UTF8 text with emojis int the middle from UCS2 code")
{
    UCS2 ucs2(std::string("01190105" //ęą
                          "D83DDE01" // 😁
                          "01190105" // ęą
                          "D83CDF63" // 🍣
                          "01190105"));
    UTF8 utf8("ęą😁ęą🍣ęą");
    REQUIRE(ucs2.toUTF8() == utf8);
}

TEST_CASE("UCS2 to UTF8 long string conversion")
{
    const char *messageRawBody = "004C006F00720065006D00200069007000730075006D00200064006F006C006F007200200073006900740"
                                 "0200061006D00650074002C00200063006"
                                 "F006E00730065006300740065007400750072002000610064006900700069007300630069006E00670020"
                                 "0065006C00690074002E002000500065006C006C0065006E007400650073007"
                                 "10075006500200073006F006C006C0069006300690074007500640069006E002000760061007200690075"
                                 "007300200069007000730075006D002C0020006100200073007500730063006"
                                 "9007000690074002000660065006C00690073002000730061006700690074007400690073002000750074"
                                 "002E00200041006C0069007100750061006D002000740072006900730074006"
                                 "900710075006500200062006C0061006E006400690074002000660065006C00690073002C002000760069"
                                 "00740061006500200063006F006D006D006F0064006F0020006D00610073007"
                                 "300610020006D006100780069006D0075007300200069006E002E0020004D0061006500630065006E0061"
                                 "00730020006100740020006D006F006C0065007300740069006500200070007"
                                 "5007200750073002E0020005300650064002000760065006C00690074002000760065006C00690074002C"
                                 "002000660069006E00690062007500730020007100750069007300200065007"
                                 "30074002000610063002C00630075007200730075007300200076006F006C007500740070006100740020"
                                 "006D00610067006E0061002E00200056006500730074006900620075006C007"
                                 "5006D00200063006F006E00760061006C006C0069007300200075006C0074007200690063006900650073"
                                 "00200061006E00740065002C002000760065006C00200067007200610076006"
                                 "9006400610020006C006900670075006C006100200065006700650073007400610073002000610063002E"
                                 "00200041006C0069007100750061006D0020007600690074006100650020007"
                                 "00075006C00760069006E00610072002000750072006E0061002E00200055007400200076006F006C0075"
                                 "0074007000610074002000660065006C0069007300200061006C00690071007"
                                 "5006500740020006500660066006900630069007400750072002000740065006D0070006F0072002E0020"
                                 "005300650064002000630075007200730075007300200063006F006E0064006"
                                 "9006D0065006E00740075006D00200061006E00740065002E00200056006500730074006900620075006C"
                                 "0075006D0020006600650075006700690061007400200061007200630075002"
                                 "00061006300200069007000730075006D0020006D006100780069006D00750073002C00200069006E0020"
                                 "0074007200690073007400690071007500650020006A007500730074006F002"
                                 "00061007500630074006F0072002E002000530075007300700065006E0064006900730073006500200075"
                                 "0074002000700075006C00760069006E006100720020006D006100730073006"
                                 "1002E00200053006500640020006600610075006300690062007500730020006100740020007000750072"
                                 "007500730020007600690074006100650020006C006F0062006F00720074006"
                                 "90073002E00200041006C0069007100750061006D002000650067006500740020006E0065007100750065"
                                 "0020007100750069007300200065007300740020006D0061007400740069007"
                                 "30020006D006F006C006C00690073002E002000500068006100730065006C006C00750073002000710075"
                                 "00690073002000730065006D007000650072002000720069007300750073002"
                                 "E00200049006E00740065007200640075006D0020006500740020006D0061006C00650073007500610064"
                                 "0061002000660061006D0065007300200061006300200061006E00740065002"
                                 "00069007000730075006D0020007000720069006D0069007300200069006E002000660061007500630069"
                                 "006200750073002E0020004D006F007200620069002000760065006C0020006"
                                 "C006900670075006C006100200065007500200061006E0074006500200065006C0065006D0065006E0074"
                                 "0075006D0020006C006100630069006E00690061002E0055007400200069006"
                                 "4002000720068006F006E0063007500730020006E006900620068002E";
    UTF8 decodedMessage = UCS2(std::string(messageRawBody)).toUTF8();
    UTF8 longUtf8Message("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sollicitudin varius "
                         "ipsum, a suscipit felis sagittis ut."
                         " Aliquam tristique blandit felis, vitae commodo massa maximus in. Maecenas at molestie "
                         "purus. Sed velit velit, finibus quis est ac,"
                         "cursus volutpat magna. Vestibulum convallis ultricies ante, vel gravida ligula egestas ac. "
                         "Aliquam vitae pulvinar urna. Ut volutpat"
                         " felis aliquet efficitur tempor. Sed cursus condimentum ante. Vestibulum feugiat arcu ac "
                         "ipsum maximus, in tristique justo auctor."
                         " Suspendisse ut pulvinar massa. Sed faucibus at purus vitae lobortis. Aliquam eget neque "
                         "quis est mattis mollis. Phasellus quis"
                         " semper risus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi vel "
                         "ligula eu ante elementum lacinia."
                         "Ut id rhoncus nibh.");
    REQUIRE(decodedMessage == longUtf8Message);
}

TEST_CASE("UTF8 to UCS2 long string conversion")
{
    UTF8 longUtf8Message("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sollicitudin varius "
                         "ipsum, a suscipit felis sagittis ut."
                         " Aliquam tristique blandit felis, vitae commodo massa maximus in. Maecenas at molestie "
                         "purus. Sed velit velit, finibus quis est ac,"
                         "cursus volutpat magna. Vestibulum convallis ultricies ante, vel gravida ligula egestas ac. "
                         "Aliquam vitae pulvinar urna. Ut volutpat"
                         " felis aliquet efficitur tempor. Sed cursus condimentum ante. Vestibulum feugiat arcu ac "
                         "ipsum maximus, in tristique justo auctor."
                         " Suspendisse ut pulvinar massa. Sed faucibus at purus vitae lobortis. Aliquam eget neque "
                         "quis est mattis mollis. Phasellus quis"
                         " semper risus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi vel "
                         "ligula eu ante elementum lacinia."
                         "Ut id rhoncus nibh.");

    UCS2 longUcs2Message(longUtf8Message);
    REQUIRE(
        longUcs2Message.str() ==
        std::string("004C006F00720065006D00200069007000730075006D00200064006F006C006F0072002000730069007400200061006D00"
                    "650074002C00200063006F006E00730065006300740065007400750072002000610064006900700069007300630069006E"
                    "006700200065006C00690074002E002000500065006C006C00"
                    "65006E00740065007300710075006500200073006F006C006C0069006300690074007500640069006E0020007600610072"
                    "00690075007300200069007000730075006D002C0020006100"
                    "2000730075007300630069007000690074002000660065006C006900730020007300610067006900740074006900730020"
                    "00750074002E00200041006C0069007100750061006D002000"
                    "740072006900730074006900710075006500200062006C0061006E006400690074002000660065006C00690073002C0020"
                    "0076006900740061006500200063006F006D006D006F006400"
                    "6F0020006D00610073007300610020006D006100780069006D0075007300200069006E002E0020004D0061006500630065"
                    "006E006100730020006100740020006D006F006C0065007300"
                    "7400690065002000700075007200750073002E0020005300650064002000760065006C00690074002000760065006C0069"
                    "0074002C002000660069006E00690062007500730020007100"
                    "75006900730020006500730074002000610063002C00630075007200730075007300200076006F006C0075007400700061"
                    "00740020006D00610067006E0061002E002000560065007300"
                    "74006900620075006C0075006D00200063006F006E00760061006C006C0069007300200075006C00740072006900630069"
                    "0065007300200061006E00740065002C002000760065006C00"
                    "2000670072006100760069006400610020006C006900670075006C00610020006500670065007300740061007300200061"
                    "0063002E00200041006C0069007100750061006D0020007600"
                    "69007400610065002000700075006C00760069006E00610072002000750072006E0061002E00200055007400200076006F"
                    "006C00750074007000610074002000660065006C0069007300"
                    "200061006C006900710075006500740020006500660066006900630069007400750072002000740065006D0070006F0072"
                    "002E0020005300650064002000630075007200730075007300"
                    "200063006F006E00640069006D0065006E00740075006D00200061006E00740065002E0020005600650073007400690062"
                    "0075006C0075006D0020006600650075006700690061007400"
                    "20006100720063007500200061006300200069007000730075006D0020006D006100780069006D00750073002C00200069"
                    "006E0020007400720069007300740069007100750065002000"
                    "6A007500730074006F00200061007500630074006F0072002E002000530075007300700065006E00640069007300730065"
                    "002000750074002000700075006C00760069006E0061007200"
                    "20006D0061007300730061002E002000530065006400200066006100750063006900620075007300200061007400200070"
                    "00750072007500730020007600690074006100650020006C00"
                    "6F0062006F0072007400690073002E00200041006C0069007100750061006D002000650067006500740020006E00650071"
                    "00750065002000710075006900730020006500730074002000"
                    "6D006100740074006900730020006D006F006C006C00690073002E002000500068006100730065006C006C007500730020"
                    "0071007500690073002000730065006D007000650072002000"
                    "720069007300750073002E00200049006E00740065007200640075006D0020006500740020006D0061006C006500730075"
                    "006100640061002000660061006D0065007300200061006300"
                    "200061006E0074006500200069007000730075006D0020007000720069006D0069007300200069006E0020006600610075"
                    "00630069006200750073002E0020004D006F00720062006900"
                    "2000760065006C0020006C006900670075006C006100200065007500200061006E0074006500200065006C0065006D0065"
                    "006E00740075006D0020006C006100630069006E0069006100"
                    "2E00550074002000690064002000720068006F006E0063007500730020006E006900620068002E"));
}