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
|
import sys
import functools
import pytest
import emoji
@pytest.fixture
def clean_module():
"""Ensures a fresh import and init of the emoji module.
Unloads all emoji.* modules, then loads the emoji module,
runs the test function, then deletes all the emoji.* modules
"""
global emoji
for name in [
name
for name in sys.modules
if name.startswith('emoji') or name.startswith('test')
]:
del sys.modules[name]
import emoji
# Increase cache size to avoid cache misses during tests
emoji.unicode_codes.get_emoji_by_name = functools.lru_cache(maxsize=None)( # type:ignore
emoji.unicode_codes.get_emoji_by_name.__wrapped__ # type:ignore
)
yield
for name in [
name
for name in sys.modules
if name.startswith('emoji') or name.startswith('test')
]:
del sys.modules[name]
# Increase cache size to avoid cache misses during tests
emoji.unicode_codes.get_emoji_by_name = functools.lru_cache(maxsize=None)( # type:ignore
emoji.unicode_codes.get_emoji_by_name.__wrapped__ # type:ignore
)
def test_language_loaded_after_emojize(clean_module): # type:ignore
emoji.emojize('string', language='es')
assert 'es' in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
def test_language_loaded_after_demojize(clean_module): # type:ignore
emoji.demojize('string', language='es')
assert 'es' in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
def test_language_not_auto_loaded(clean_module): # type:ignore
assert 'es' not in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
def test_key_access_load_language(clean_module): # type:ignore
assert 'es' not in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
with pytest.deprecated_call():
assert emoji.EMOJI_DATA[emoji.emojize(':lion:')]['es']
assert 'es' in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
assert 'es' in emoji.EMOJI_DATA[emoji.emojize(':zebra:')]
with pytest.raises(KeyError):
emoji.EMOJI_DATA[emoji.emojize(':lion:')]['xyz']
def test_explicit_load_language(clean_module): # type:ignore
assert 'fr' not in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
emoji.config.load_language('fr')
assert 'fr' in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
assert emoji.EMOJI_DATA[emoji.emojize(':lion:')]['fr'] == ':tête_de_lion:'
assert 'es' not in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
emoji.config.load_language('es')
assert 'es' in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
def test_explict_load_all_languages(clean_module): # type:ignore
assert 'fr' not in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
assert 'es' not in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
emoji.config.load_language()
assert 'es' in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
assert 'fr' in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
assert emoji.EMOJI_DATA[emoji.emojize(':lion:')]['fr'] == ':tête_de_lion:'
def test_load_language_multiple_times(clean_module): # type:ignore
assert 'fr' not in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
for _ in range(10000):
emoji.config.load_language('fr')
assert 'fr' in emoji.EMOJI_DATA[emoji.emojize(':lion:')]
assert emoji.EMOJI_DATA[emoji.emojize(':lion:')]['fr'] == ':tête_de_lion:'
unsupported_languages = ['', ' ', '1', 'e', 'z', 'zz', 'ZZ', 'EN', 'ES', 'xyz', 'eses']
@pytest.mark.parametrize('lang', unsupported_languages)
def test_load_unsupported_language(lang: str):
with pytest.raises(NotImplementedError):
emoji.config.load_language(lang)
@pytest.mark.parametrize('lang', unsupported_languages)
def test_access_unsupported_language(lang: str):
with pytest.raises(KeyError):
emoji.EMOJI_DATA[emoji.emojize(':lion:')][lang]
@pytest.mark.parametrize('lang', unsupported_languages)
def test_emojize_unsupported_language(lang: str):
with pytest.raises(NotImplementedError):
emoji.emojize(':lion:', language=lang)
with pytest.raises(NotImplementedError):
emoji.demojize(':lion:', language=lang)
|