// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include #include 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")); }