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)])