mod: +++++++приоритеты и тесты html-мнемоник для decode_to_unicode()

This commit is contained in:
2025-08-11 22:18:06 +03:00
parent c4df3ba9c1
commit 40fd4b5891
2 changed files with 22 additions and 19 deletions

View File

@@ -34,6 +34,10 @@ EN_ALPHABET_UPPER = EN_VOWELS_UPPER | EN_CONSONANTS_UPPER
EN_ALPHABET_LOWER = frozenset([char.lower() for char in EN_ALPHABET_UPPER])
EN_ALPHABET_FULL = EN_ALPHABET_UPPER | EN_ALPHABET_LOWER
# --- Специальные символы ---
NBSP_CHAR = '\u00A0' # Неразрывный пробел ( )
SHY_CHAR = '\u00AD' # Мягкий перенос (­)
# === КОНСТАНТЫ ДЛЯ КОДИРОВАНИЯ HTML-МНЕМНОИКОВ ===
# --- ЧЕРНЫЙ СПИСОК: Символы, которые НИКОГДА не нужно кодировать в мнемоники ---
NEVER_ENCODE_CHARS = (frozenset(['!', '#', '%', '(', ')', '*', ',', '.', '/', ':', ';', '=', '?', '@',
@@ -106,11 +110,10 @@ CUSTOM_ENCODE_MAP = {
'\u00ae': '®', # ® / ® / ® / ®
'\u00b7': '·', # · / · / · / ·
'\u0060': '`', # ` / grave / DiacriticalGrave
'\u00a8': '¨', # ¨ / ¨ / ¨ / ¨
'\u00a8': '¨', # ¨ / ¨ / ¨ / ¨ / ¨
'\u00b1': '±', # ± / ± / ±
'\u00bd': '½', # ½ / ½ / ½
'\u00af': '¯', # ¯ / ¯ / ¯
'\u00a8': '¨', # ¨ / ¨ / ¨
'\u201a': '‚', # / ‚ / ‚
'\u223e': '∾', # ∾ / ∾ / ∾
'\u2207': '∇', # ∇ / ∇ / ∇

View File

@@ -332,15 +332,15 @@ STRINGS_FOR_DECODE = [
("ζ ℨ 𝔷 Ж ж ⇝ ℤ 𝕫 𝒵 𝓏 ‍", "ζ 𝔷 Ж ж ⇝ 𝕫 𝒵 𝓏 \u200d"),
]
@pytest.mark.parametrize("input_string, expected_output", STRINGS_FOR_DECODE)
def test_html_mnemo_to_utf(input_string, expected_output):
@pytest.mark.parametrize("mnemonic_string, unicode_output", STRINGS_FOR_DECODE)
def test_html_mnemo_to_utf(mnemonic_string, unicode_output):
"""
Проверяет ПОВЕДЕНИЕ: декодирование HTML-мнемоников в Unicode-строки.
"""
# Act (действие) - тестируем
actual_output = codec.decode_to_unicode(input_string)
actual_output = codec.decode_to_unicode(mnemonic_string)
# Assert (проверка)
assert actual_output == expected_output
assert actual_output == unicode_output
STRINGS_FOR_ENCODE = [
@@ -641,23 +641,23 @@ STRINGS_FOR_ENCODE = [
("\u200b Ζ ζ 𝔷 Ж ж ⇝ ", "​ Ζ ζ ℨ 𝔷 Ж ж ⇝ ℤ"),
]
@pytest.mark.parametrize("input_string, expected_output", STRINGS_FOR_ENCODE)
def test_utf_to_html_mnemo(input_string, expected_output):
@pytest.mark.parametrize("unicode_string, mnemonic_string", STRINGS_FOR_ENCODE)
def test_utf_to_html_mnemo(unicode_string, mnemonic_string):
"""
Проверяет ПОВЕДЕНИЕ: кодирование Unicode-строк в HTML-мнемоники.
"""
# Act (действие) - тестируем
actual_output = codec.encode_from_unicode(input_string, mode="mnemonic")
actual_output = codec.encode_from_unicode(unicode_string, mode="mnemonic")
# Assert (проверка)
assert actual_output == expected_output
assert actual_output == mnemonic_string
@pytest.mark.parametrize("expected_output, input_string", STRINGS_FOR_ENCODE)
def test_html_mnemo_to_utf_back(expected_output, input_string):
@pytest.mark.parametrize("mnemonic_string, unicode_string", STRINGS_FOR_ENCODE)
def test_html_mnemo_to_utf_back(mnemonic_string, unicode_string):
"""
Проверяет ОБРАТНОЕ ПОВЕДЕНИЕ: из HTML-мнемоники после encode_from_unicode() в Unicode-строки.
"""
# Act (действие) - тестируем
actual_output = codec.decode_to_unicode(input_string)
actual_output = codec.decode_to_unicode(unicode_string)
# Assert (проверка)
assert actual_output == expected_output
assert actual_output == mnemonic_string