File: test_json.py

package info (click to toggle)
python-emoji 2.14.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,664 kB
  • sloc: python: 3,120; javascript: 262; makefile: 14
file content (117 lines) | stat: -rw-r--r-- 4,078 bytes parent folder | download
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)