// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2024 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #include "td/utils/common.h" #include "td/utils/emoji.h" #include "td/utils/tests.h" TEST(Emoji, is_emoji) { ASSERT_TRUE(!td::is_emoji("")); ASSERT_TRUE(td::is_emoji("👩đŸŧ‍❤‍💋‍👩đŸģ")); ASSERT_TRUE(td::is_emoji("👩đŸŧ‍❤‍💋‍👩đŸģī¸")); // not in RGI emoji ZWJ sequence set ASSERT_TRUE(td::is_emoji("👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ")); ASSERT_TRUE(td::is_emoji("👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģī¸")); ASSERT_TRUE(!td::is_emoji("👩đŸŧ‍❤ī¸ī¸â€đŸ’‹â€đŸ‘ŠđŸģ")); ASSERT_TRUE(td::is_emoji("⌚")); ASSERT_TRUE(td::is_emoji("⌚ī¸")); ASSERT_TRUE(td::is_emoji("↔")); ASSERT_TRUE(td::is_emoji("đŸĒ—")); ASSERT_TRUE(td::is_emoji("2ī¸âƒŖ")); ASSERT_TRUE(td::is_emoji("2âƒŖ")); ASSERT_TRUE(!td::is_emoji(" 2âƒŖ")); ASSERT_TRUE(!td::is_emoji("2âƒŖ ")); ASSERT_TRUE(!td::is_emoji(" ")); ASSERT_TRUE(!td::is_emoji("")); ASSERT_TRUE(!td::is_emoji("1234567890123456789012345678901234567890123456789012345678901234567890")); ASSERT_TRUE(td::is_emoji("❤ī¸")); ASSERT_TRUE(td::is_emoji("❤")); ASSERT_TRUE(td::is_emoji("⌚")); ASSERT_TRUE(td::is_emoji("🎄")); ASSERT_TRUE(td::is_emoji("🧑‍🎄")); ASSERT_TRUE(td::is_emoji("Šī¸")); ASSERT_TRUE(td::is_emoji("Š")); ASSERT_TRUE(!td::is_emoji("Šī¸ī¸")); ASSERT_TRUE(td::is_emoji("đŸ•ĩī¸â€â™‚ī¸")); ASSERT_TRUE(td::is_emoji("đŸ•ĩ‍♂ī¸")); // not in RGI emoji ZWJ sequence set ASSERT_TRUE(td::is_emoji("đŸ•ĩī¸â€â™‚")); // not in RGI emoji ZWJ sequence set ASSERT_TRUE(td::is_emoji("đŸ•ĩ‍♂")); ASSERT_TRUE(td::is_emoji("🏌ī¸â€â™‚ī¸")); ASSERT_TRUE(td::is_emoji("🏋ī¸â€â™‚ī¸")); ASSERT_TRUE(td::is_emoji("🏌‍♂ī¸")); // not in RGI emoji ZWJ sequence set ASSERT_TRUE(td::is_emoji("🏋‍♂ī¸")); // not in RGI emoji ZWJ sequence set ASSERT_TRUE(!td::is_emoji("a‍🤝‍👨")); ASSERT_TRUE(!td::is_emoji("👩‍a‍👨")); ASSERT_TRUE(!td::is_emoji("👩‍🤝‍a")); ASSERT_TRUE(td::is_emoji("👩‍🤝‍👨")); // not in RGI emoji ZWJ sequence set } static void test_get_fitzpatrick_modifier(td::string emoji, int result) { ASSERT_EQ(result, td::get_fitzpatrick_modifier(emoji)); } TEST(Emoji, get_fitzpatrick_modifier) { test_get_fitzpatrick_modifier("", 0); test_get_fitzpatrick_modifier("👩đŸŧ‍❤‍💋‍👩đŸģ", 2); test_get_fitzpatrick_modifier("👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ", 2); test_get_fitzpatrick_modifier("👋", 0); test_get_fitzpatrick_modifier("👋đŸģ", 2); test_get_fitzpatrick_modifier("👋đŸŧ", 3); test_get_fitzpatrick_modifier("👋đŸŊ", 4); test_get_fitzpatrick_modifier("👋🏾", 5); test_get_fitzpatrick_modifier("👋đŸŋ", 6); test_get_fitzpatrick_modifier("đŸģ", 2); test_get_fitzpatrick_modifier("đŸŧ", 3); test_get_fitzpatrick_modifier("đŸŊ", 4); test_get_fitzpatrick_modifier("🏾", 5); test_get_fitzpatrick_modifier("đŸŋ", 6); test_get_fitzpatrick_modifier("⌚", 0); test_get_fitzpatrick_modifier("↔", 0); test_get_fitzpatrick_modifier("đŸĒ—", 0); test_get_fitzpatrick_modifier("2ī¸âƒŖ", 0); test_get_fitzpatrick_modifier("2âƒŖ", 0); test_get_fitzpatrick_modifier("❤ī¸", 0); test_get_fitzpatrick_modifier("❤", 0); test_get_fitzpatrick_modifier("⌚", 0); test_get_fitzpatrick_modifier("🎄", 0); test_get_fitzpatrick_modifier("🧑‍🎄", 0); } static void test_remove_emoji_modifiers(td::string emoji, const td::string &result, bool remove_selectors = true) { ASSERT_STREQ(result, td::remove_emoji_modifiers(emoji, remove_selectors)); td::remove_emoji_modifiers_in_place(emoji, remove_selectors); ASSERT_STREQ(result, emoji); ASSERT_STREQ(emoji, td::remove_emoji_modifiers(emoji, remove_selectors)); } TEST(Emoji, remove_emoji_modifiers) { test_remove_emoji_modifiers("", ""); test_remove_emoji_modifiers("👩đŸŧ‍❤‍💋‍👩đŸģ", "👩‍❤‍💋‍👩"); test_remove_emoji_modifiers("👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ", "👩‍❤‍💋‍👩"); test_remove_emoji_modifiers("👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ", "👩‍❤ī¸â€đŸ’‹â€đŸ‘Š", false); test_remove_emoji_modifiers("👋đŸģ", "👋"); test_remove_emoji_modifiers("👋đŸŧ", "👋"); test_remove_emoji_modifiers("👋đŸŊ", "👋"); test_remove_emoji_modifiers("👋🏾", "👋"); test_remove_emoji_modifiers("👋đŸŋ", "👋"); test_remove_emoji_modifiers("đŸģ", "đŸģ"); test_remove_emoji_modifiers("đŸŧ", "đŸŧ"); test_remove_emoji_modifiers("đŸŊ", "đŸŊ"); test_remove_emoji_modifiers("🏾", "🏾"); test_remove_emoji_modifiers("đŸŋ", "đŸŋ"); test_remove_emoji_modifiers("⌚", "⌚"); test_remove_emoji_modifiers("↔", "↔"); test_remove_emoji_modifiers("đŸĒ—", "đŸĒ—"); test_remove_emoji_modifiers("2ī¸âƒŖ", "2âƒŖ"); test_remove_emoji_modifiers("2âƒŖ", "2âƒŖ"); test_remove_emoji_modifiers("❤ī¸", "❤"); test_remove_emoji_modifiers("❤", "❤"); test_remove_emoji_modifiers("⌚", "⌚"); test_remove_emoji_modifiers("ī¸", "ī¸"); test_remove_emoji_modifiers("ī¸ī¸ī¸đŸģ", "ī¸ī¸ī¸đŸģ"); test_remove_emoji_modifiers("ī¸ī¸ī¸đŸģa", "a"); test_remove_emoji_modifiers("🎄", "🎄"); test_remove_emoji_modifiers("🧑‍🎄", "🧑‍🎄"); } static void test_remove_emoji_selectors(td::string emoji, const td::string &result) { ASSERT_STREQ(result, td::remove_emoji_selectors(result)); ASSERT_STREQ(result, td::remove_emoji_selectors(emoji)); } TEST(Emoji, remove_emoji_selectors) { test_remove_emoji_selectors("", ""); test_remove_emoji_selectors("👩đŸŧ‍❤‍💋‍👩đŸģ", "👩đŸŧ‍❤‍💋‍👩đŸģ"); test_remove_emoji_selectors("👩đŸŧ‍❤ī¸â€đŸ’‹â€đŸ‘ŠđŸģ", "👩đŸŧ‍❤‍💋‍👩đŸģ"); test_remove_emoji_selectors("👋đŸģ", "👋đŸģ"); test_remove_emoji_selectors("👋đŸŧ", "👋đŸŧ"); test_remove_emoji_selectors("👋đŸŊ", "👋đŸŊ"); test_remove_emoji_selectors("👋🏾", "👋🏾"); test_remove_emoji_selectors("👋đŸŋ", "👋đŸŋ"); test_remove_emoji_selectors("đŸģ", "đŸģ"); test_remove_emoji_selectors("đŸŧ", "đŸŧ"); test_remove_emoji_selectors("đŸŊ", "đŸŊ"); test_remove_emoji_selectors("🏾", "🏾"); test_remove_emoji_selectors("đŸŋ", "đŸŋ"); test_remove_emoji_selectors("⌚", "⌚"); test_remove_emoji_selectors("↔", "↔"); test_remove_emoji_selectors("đŸĒ—", "đŸĒ—"); test_remove_emoji_selectors("2ī¸âƒŖ", "2âƒŖ"); test_remove_emoji_selectors("2âƒŖ", "2âƒŖ"); test_remove_emoji_selectors("❤ī¸", "❤"); test_remove_emoji_selectors("❤", "❤"); test_remove_emoji_selectors("⌚", "⌚"); test_remove_emoji_selectors("🎄", "🎄"); test_remove_emoji_selectors("🧑‍🎄", "🧑‍🎄"); }