def test_candidates_white_space_and_underscores(self): # Any white space and '_' can be used to separate keywords in the # query string: mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('gatto_ ย sorride')[0][:2], ('๐บ', 'gatto che sorride')) self.assertEqual( mq.candidates('nerd glasses')[0][:2], ('๐ค', 'nerd face')) self.assertEqual( mq.candidates('smiling face sun glasses')[0][:2], ('๐', 'smiling face with sunglasses'))
def test_candidates_some_letters(self): mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('a')[0][:2], ('๐ ฐ\ufe0f', 'negative squared latin capital letter a')) self.assertEqual( mq.candidates('squared a')[0][:2], ('๐ ฐ\ufe0f', 'negative squared latin capital letter a')) self.assertEqual( mq.candidates('squared capital a')[0][:2], ('๐ ฐ\ufe0f', 'negative squared latin capital letter a')) self.assertEqual( mq.candidates('c')[0][:2], ('ยฉ๏ธ', 'copyright sign'))
def test_candidates_skin_tones(self): mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('man tone5')[0][:2], ('๐จ๐ฟ', 'man: dark skin tone โman tone5โ')) self.assertEqual( mq.candidates('skin tone')[0][:2], ('๐ป', 'emoji modifier fitzpatrick type-1-2 โtone1โ [skin tone]')) self.assertEqual( mq.candidates('tone1')[0][:2], ('๐ป', 'emoji modifier fitzpatrick type-1-2 โtone1โ')) self.assertEqual( mq.candidates('tone5')[0][:2], ('๐ฟ', 'emoji modifier fitzpatrick type-6 โtone5โ'))
def test_candidates_animals(self): mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('animal')[0][:2], ('๐ต', 'cara de mono [animal]')) self.assertEqual( mq.candidates('dromedary animal')[0][:2], ('๐ช', 'dromedary camel')) self.assertEqual( mq.candidates('camel')[0][:2], ('๐ซ', 'bactrian camel')) self.assertEqual( mq.candidates('nature')[0][:2], ('๐', 'see-no-evil monkey {nature}'))
def test_candidates_code_point_input(self) -> None: mq = itb_emoji.EmojiMatcher( languages = ['fr_FR']) self.assertEqual( mq.candidates('2019'), [('โ', 'U+2019 apostrophe droite', 2000)]) self.assertEqual( mq.candidates('41'), [('A', 'U+41 latin capital letter a', 2000)]) self.assertEqual( mq.candidates('2a'), [('*', 'U+2A astรฉrisque', 2000)]) self.assertEqual( mq.candidates('1b'), [('\x1b', 'U+1B', 2000), ('๐ง๐ป\u200dโ๏ธ', 'man: light skin tone, beard', 44), ('๐ง๐ป\u200dโ๏ธ', 'woman: light skin tone, beard', 44), ('๐ง๐ป\u200d๐ฆฒ', 'person: light skin tone, bald', 44)])
def test_candidates_code_point_input(self): mq = itb_emoji.EmojiMatcher( languages = ['fr_FR']) self.assertEqual( mq.candidates('2019'), [('โ', 'U+2019 right single quotation mark', 200)]) self.assertEqual( mq.candidates('41'), [('A', 'U+41 latin capital letter a', 200)]) self.assertEqual( mq.candidates('2a'), [('*', 'U+2A asterisk', 200)]) self.assertEqual( mq.candidates('1b'), [('\x1b', 'U+1B', 200)])
def test_candidates_symbols(self): mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('symbol')[0][:2], ('๐ฃ', 'input symbol for symbols {Symbol}')) self.assertEqual( mq.candidates('atomsymbol')[0][:2], ('โ\ufe0f', 'atom symbol')) self.assertEqual( mq.candidates('peacesymbol')[0][:2], ('โฎ\ufe0f', 'peace symbol')) self.assertEqual( mq.candidates('peace symbol')[0][:2], ('โฎ\ufe0f', 'peace symbol {Symbol}'))
def test_candidates_skin_tones(self) -> None: mq = itb_emoji.EmojiMatcher( languages = ['ja_JP'])#, 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('man tone5')[0][:2], ('๐จ๐ฟ', 'man: dark skin tone โman tone5โ')) self.assertEqual( mq.candidates('skin tone')[0][:2], ('๐ง๐พ\u200d๐ค\u200d๐ง๐ผ', 'people holding hands: medium-dark skin tone, medium-light skin tone โpeople holding hands medium dark skin tone medium light skin toneโ')) self.assertEqual( mq.candidates('tone1')[0][:2], ('๐ป', 'emoji modifier fitzpatrick type-1-2 โtone1โ')) self.assertEqual( mq.candidates('tone5')[0][:2], ('๐ฟ', 'emoji modifier fitzpatrick type-6 โtone5โ'))
def test_similar_white_smiling_face_en_US(self) -> None: mq = itb_emoji.EmojiMatcher( languages=['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual(mq.similar( 'โบ', match_limit=5 ), [( 'โบ๏ธ', 'white smiling face [โบ๏ธ, So, people, face, outlined, relaxed, smile, uc1, smiling face]', 9), ('๐', 'kissing face with smiling eyes [So, people, face, smile]', 4), ('๐', 'smiling face with heart-shaped eyes [So, people, face, smile]', 4), ('๐', 'face savouring delicious food [So, people, face, smile]', 4), ('๐', 'smiling face with halo [So, people, face, smile]', 4)])
def test_candidates_pykakasi_missing_ja_JP(self) -> None: mq = itb_emoji.EmojiMatcher(languages=['ja_JP']) self.assertEqual(mq.similar('๐ค', match_limit=5), [('๐ค', 'ใฒใใ [๐ค, ใฒใช, ใฒใใ, ๅ็ฉ, ๆจชใๅใใฆใใใฒใใ, ้ก, ้ณฅ]', 7), ('๐ฃ', 'ๅตใใใใใฃใใฒใใ [ใฒใช, ใฒใใ, ๅ็ฉ, ้ก, ้ณฅ]', 5), ('๐ฅ', 'ๅใๅใใฆใใใฒใใ [ใฒใช, ใฒใใ, ๅ็ฉ, ้ณฅ]', 4), ('๐ฆ', '้ณฅ [ๅ็ฉ, ้ก, ้ณฅ]', 3), ('๐', 'ใซใใจใ [ๅ็ฉ, ้ก, ้ณฅ]', 3)]) self.assertEqual(mq.similar('๐', match_limit=5), [('๐', 'ใใใคใใ [๐, ใใใคใใ, ใงใใงใ่ซ, ่ซ]', 4), ('๐ฆ', 'ใใงใฆ [่ซ]', 1), ('๐', 'ๆฏ่ซ [่ซ]', 1), ('๐', 'ใขใช [่ซ]', 1), ('๐', 'ใใใใ [่ซ]', 1)]) self.assertEqual(mq.similar('๐ฑ', match_limit=5), [('๐ฑ', 'ๆๆ [๐ฑ, ใใผใ, ใทใงใใฏ, ๅซใณ, ๆๆ, ้ก]', 6), ('๐', '็ตถๆใใ็ซ [ใใผใ, ใทใงใใฏ, ้ก]', 3), ('๐จ', '้ใใ [ใใผใ, ้ก]', 2), ('๐คฏ', '้ ญ็็บ [ใทใงใใฏ, ้ก]', 2), ('๐ญ', 'ๅคงๆณฃใ [้ก]', 1)])
def test_candidates_various_unicode_chars(self): mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('euro sign')[0][:2], ('โฌ', 'euro sign')) self.assertEqual( mq.candidates('superscript one')[0][:2], ('ยน', 'superscript one')) self.assertEqual( mq.candidates('currency')[0][:2], ('โณ', 'austral sign {Currency} [currency]')) self.assertEqual( mq.candidates('connector')[0][:2], ('๏น', 'centreline low line {Connector}')) self.assertEqual( mq.candidates('dash')[0][:2], ('๐จ', 'dash symbol')) self.assertEqual( mq.candidates('close')[0][:2], ('ใ', 'right angle bracket โclose angle bracketโ {Close}')) self.assertEqual( mq.candidates('punctuation')[0][:2], ('โผ\ufe0f', 'double exclamation mark {Punctuation} [punctuation]')) self.assertEqual( mq.candidates('final quote')[0][:2], ('โ', 'right single quotation mark {Final quote}')) self.assertEqual( mq.candidates('initial quote')[0][:2], ('โ', 'left single quotation mark {Initial quote}')) self.assertEqual( mq.candidates('modifier')[0][:2], ('๐ป', 'emoji modifier fitzpatrick type-1-2 {Modifier}')) self.assertEqual( mq.candidates('math')[0][:2], ('๐ต', 'mathematical bold italic nabla {Math}')) self.assertEqual( mq.candidates('separator line')[0][:2], ('โจ', 'U+2028 line separator {Line}')) self.assertEqual( mq.candidates('separator paragraph')[0][:2], ('โฉ', 'U+2029 paragraph separator {Paragraph}')) self.assertEqual( mq.candidates('separator space')[0][:2], (' ', 'U+20 space {Space}'))
def test_candidates_flags(self) -> None: mq = itb_emoji.EmojiMatcher( languages = ['en_US']) self.assertEqual( mq.candidates('us')[0][:2], ('๐บ๐ธ', 'flag: united states โusโ')) self.assertEqual( mq.candidates('flag us')[0][:2], ('๐บ๐ธ', 'flag: united states โusโ')) self.assertEqual( mq.candidates('united nations')[0][:2], ('๐บ๐ณ', 'flag: united nations')) self.assertEqual( mq.candidates('united')[0][:2], ('๐บ๐ณ', 'flag: united nations')) self.assertEqual( mq.candidates('outlying islands')[0][:2], ('๐บ๐ฒ', 'flag: u.s. outlying islands')) self.assertEqual( mq.candidates('flag united arab')[0][:2], ('๐ฆ๐ช', 'flag: united arab emirates โflag aeโ')) self.assertEqual( mq.candidates('mm')[0][:2], ('๐ฒ๐ฒ', 'flag: myanmar (burma) โmmโ')) self.assertEqual( mq.candidates('flag mm')[0][:2], ('๐ฒ๐ฒ', 'flag: myanmar (burma) โmmโ')) self.assertEqual( mq.candidates('myanmar')[0][:2], ('๐ฒ๐ฒ', 'flag: myanmar (burma) โflag: myanmar burmaโ')) self.assertEqual( mq.candidates('sj')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen โsjโ')) self.assertEqual( mq.candidates('flag sj')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen โsjโ')) self.assertEqual( mq.candidates('svalbard')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen โflag: svalbard & jan mayenโ')) self.assertEqual( mq.candidates('jan mayen')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen โflag: svalbard & jan mayenโ')) self.assertEqual( mq.candidates('mayen')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen โflag: svalbard & jan mayenโ'))
def test_candidates_flags(self): mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('us')[0][:2], ('๐บ๐ธ', 'flag: united states โusโ')) self.assertEqual( mq.candidates('flag us')[0][:2], ('๐บ๐ธ', 'flag: united states โusโ')) self.assertEqual( mq.candidates('united states')[0][:2], ('๐บ๐ธ', 'flag: united states')) self.assertEqual( mq.candidates('united')[0][:2], ('๐ฆ๐ช', 'flag: united arab emirates')) self.assertEqual( mq.candidates('united minor outlying islands')[0][:2], ('๐บ๐ฒ', 'flag: u.s. outlying islands')) self.assertEqual( mq.candidates('united arab')[0][:2], ('๐ฆ๐ช', 'flag: united arab emirates')) self.assertEqual( mq.candidates('mm')[0][:2], ('๐ฒ๐ฒ', 'flag: myanmar (burma) โmmโ')) self.assertEqual( mq.candidates('flag mm')[0][:2], ('๐ฒ๐ฒ', 'flag: myanmar (burma) โmmโ')) self.assertEqual( mq.candidates('myanmar')[0][:2], ('๐ฒ๐ฒ', 'flag: myanmar (burma) โmyanmar burmaโ')) self.assertEqual( mq.candidates('sj')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen โsjโ')) self.assertEqual( mq.candidates('flag sj')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen โsjโ')) self.assertEqual( mq.candidates('svalbard')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen')) self.assertEqual( mq.candidates('jan mayen')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen')) self.assertEqual( mq.candidates('mayen')[0][:2], ('๐ธ๐ฏ', 'flag: svalbard & jan mayen'))
def test_candidates_spellchecking(self) -> None: mq = itb_emoji.EmojiMatcher( languages = ['en_US']) self.assertEqual( ('\U0001f98b', 'butterfly'), mq.candidates('buterfly')[0][:2]) self.assertEqual( ('๐ธ', 'badminton racquet and shuttlecock'), mq.candidates('badminton')[0][:2]) self.assertEqual( ('๐ธ', 'badminton racquet and shuttlecock'), mq.candidates('badmynton')[0][:2]) self.assertEqual( ('๐ธ', 'badminton racquet and shuttlecock'), mq.candidates('padminton')[0][:2]) self.assertEqual( ('๐ฆ', 'hedgehog'), mq.candidates('hedgehgo')[0][:2])
def test_candidates_spellchecking(self): mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('buterfly')[0][:2], ('\U0001f98b', 'butterfly')) self.assertEqual( mq.candidates('badminton')[0][:2], ('๐ธ', 'badminton racquet and shuttlecock')) self.assertEqual( mq.candidates('badmynton')[0][:2], ('๐ธ', 'badminton racquet and shuttlecock')) self.assertEqual( mq.candidates('padminton')[0][:2], ('๐ธ', 'badminton racquet and shuttlecock')) self.assertEqual( mq.candidates('fery')[0][:2], ('โด\ufe0f', 'ferry'))
def test_candidates_pykakasi_available_ja_JP(self): mq = itb_emoji.EmojiMatcher( languages = ['ja_JP']) self.assertEqual( mq.candidates('katatsumuri')[0][:2], ('๐', 'ใใใคใใ โkatatsumuriโ')) self.assertEqual( mq.candidates('ใใใคใใ')[0][:2], ('๐', 'ใใใคใใ')) self.assertEqual( mq.candidates('ใใใคใใ_')[0][:2], ('๐', 'ใใใคใใ')) self.assertEqual( mq.candidates('ใใใคใใ๏ผฟ')[0][:2], ('๐', 'ใใใคใใ')) self.assertEqual( 0, len(mq.candidates('ใซใฟใใ ใช'))) self.assertEqual( 0, len(mq.candidates('ใซใฟใใ ใช_'))) self.assertEqual( 0, len(mq.candidates('ใซใฟใใ ใช๏ผฟ'))) self.assertEqual( mq.candidates('ใใณ')[0][:2], ('๐', 'ใใณ')) self.assertEqual( mq.candidates('ใใณ_')[0][:2], ('๐', 'ใใณ')) self.assertEqual( mq.candidates('ใใณ๏ผฟ')[0][:2], ('๐', 'ใใณ')) self.assertEqual( mq.candidates('ใญใ')[0][:2], ('๐', 'ใใณ โใญใโ')) self.assertEqual( mq.candidates('ใญใ_')[0][:2], ('๐', 'ใใณ โใญใโ')) self.assertEqual( mq.candidates('ใญใ๏ผฟ')[0][:2], ('๐', 'ใใณ โใญใโ'))
def test_candidates_multilingual(self): mq = itb_emoji.EmojiMatcher( languages = ['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual( mq.candidates('ant')[0][:2], ('๐', 'ant')) self.assertEqual( mq.candidates('ameise')[0][:2], ('๐', 'Ameise')) self.assertEqual( mq.candidates('Ameise')[0][:2], ('๐', 'Ameise')) self.assertEqual( mq.candidates('formica')[0][:2], ('๐', 'formica')) self.assertEqual( mq.candidates('hormiga')[0][:2], ('๐', 'hormiga')) self.assertEqual( mq.candidates('cacca')[0][:2], ('๐ฉ', 'cacca')) self.assertEqual( mq.candidates('orso')[0][:2], ('๐ป', 'orso')) self.assertEqual( mq.candidates('lupo')[0][:2], ('๐บ', 'lupo')) self.assertEqual( mq.candidates('gatto')[0][:2], ('๐', 'gatto')) self.assertEqual( mq.candidates('gatto sorride')[0][:2], ('๐บ', 'gatto che sorride')) self.assertEqual( mq.candidates('halo')[0][:2], ('๐', 'smiling face with halo')) self.assertEqual( mq.candidates('factory')[0][:2], ('๐ญ', 'factory'))
def test_similar_query_is_not_an_emoji(self) -> None: mq = itb_emoji.EmojiMatcher( languages=['en_US', 'it_IT', 'es_MX', 'es_ES', 'de_DE', 'ja_JP']) self.assertEqual(mq.similar('this is not an emoji', match_limit=5), [])
def test_similar_horse_racing_pinyin_available_zh_TW(self) -> None: mq = itb_emoji.EmojiMatcher(languages=['zh_TW']) self.assertEqual(mq.similar('๐', match_limit=1), [('๐', '่ณฝ้ฆฌ [๐, ่ณฝ้ฆฌ, sร imว, ้จ้ฆฌ, qรญmว]', 5)])
def test_similar_horse_racing_pinyin_missing_zh_TW(self) -> None: mq = itb_emoji.EmojiMatcher(languages=['zh_TW']) self.assertEqual(mq.similar('๐', match_limit=1), [('๐', '่ณฝ้ฆฌ [๐, ่ณฝ้ฆฌ, ้จ้ฆฌ]', 3)])
def test_similar_horse_racing_pinyin_available_zh_CN(self) -> None: mq = itb_emoji.EmojiMatcher(languages=['zh_CN']) self.assertEqual(mq.similar('๐', match_limit=3), [('๐', '่ต้ฉฌ [๐, ่ต้ฉฌ, sร imว, ้ฉฌ, mว]', 5), ('๐๐ป', '่ต้ฉฌ: ่พๆต ่ค่ฒ [่ต้ฉฌ, sร imว, ้ฉฌ, mว]', 4), ('๐๐ผ', '่ต้ฉฌ: ไธญ็ญ-ๆต ่ค่ฒ [่ต้ฉฌ, sร imว, ้ฉฌ, mว]', 4)])
def test_similar_horse_racing_pinyin_missing_zh_CN(self) -> None: mq = itb_emoji.EmojiMatcher(languages=['zh_CN']) self.assertEqual(mq.similar('๐', match_limit=3), [('๐', '่ต้ฉฌ [๐, ่ต้ฉฌ, ้ฉฌ]', 3), ('๐๐ป', '่ต้ฉฌ: ่พๆต ่ค่ฒ [่ต้ฉฌ, ้ฉฌ]', 2), ('๐๐ผ', '่ต้ฉฌ: ไธญ็ญ-ๆต ่ค่ฒ [่ต้ฉฌ, ้ฉฌ]', 2)])
def test_unicode_version_emoji_data_file(self): mq = itb_emoji.EmojiMatcher(languages=['en_US']) self.assertEqual(mq.unicode_version('โบ'), '2.0') self.assertEqual(mq.unicode_version('๐คฟ'), '12.1') self.assertEqual(mq.unicode_version('โง'), '13.0')
def test_candidates_empty_query(self): mq = itb_emoji.EmojiMatcher( languages = ['fr_FR']) self.assertEqual(mq.candidates(''), [])
def test_candidates_french_similar(self): mq = itb_emoji.EmojiMatcher( languages = ['fr_FR']) self.assertEqual( mq.candidates('๐ค', match_limit = 3), [('๐ค', 'visage en pleine rรฉflexion [๐ค, rรฉflexion, visage, visage en pleine rรฉflexion]', 4), ('๐ค', 'visage avec bouche fermeture รฉclair [visage]', 1), ('๐ค', 'visage qui fait un cรขlin [visage]', 1)])