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(['!', '#', '%', '(', ')', '*', ',', '.', '/', ':', ';', '=', '?', '@',
@@ -97,20 +101,19 @@ CUSTOM_ENCODE_MAP = {
# '\u007b': '{', # { / { / {
# '\u007d': '}', # } / } / }
# '\u007c': '|', # | / | / | / |
# '\u0026': '&', # & / & / &
# '\u00A0': ' ', # /   /  
'\u0022': '"', # " / " / "
# '\u0026': '&', # & / & / &
# '\u00A0': ' ', # /   /  
'\u0022': '"', # " / " / "
'\u0026': '&', # & / & / &
'\u003e': '>', # > / > / >
'\u003c': '&lt;', # < / &LT; / &lt;
'\u003c': '&lt;', # < / &LT; / &lt;
'\u00ae': '&reg;', # ® / &reg; / &REG; / &circledR;
'\u00b7': '&middot;', # · / &middot; / &centerdot; / &CenterDot;
'\u0060': '&grave;', # ` / grave / DiacriticalGrave
'\u00a8': '&die;', # ¨ / &die; / &Dot; / &DoubleDot;
'\u00a8': '&die;', # ¨ / &die; / &Dot; / &uml; / &DoubleDot;
'\u00b1': '&pm;', # ± / &pm; / &PlusMinus;
'\u00bd': '&half;', # ½ / &frac12; / &half;
'\u00af': '&macr;', # ¯ / &macr; / &strns;
'\u00a8': '&die;', # ¨ / &die; / &uml;
'\u00af': '&macr;', # ¯ / &macr; / &strns;
'\u201a': '&sbquo;', # / &sbquo; / &lsquor;
'\u223e': '&ac;', # ∾ / &ac; / &mstpos;
'\u2207': '&Del;', # ∇ / &Del; / &nabla;

View File

@@ -332,15 +332,15 @@ STRINGS_FOR_DECODE = [
("&zeta; &Zfr; &zfr; &ZHcy; &zhcy; &zigrarr; &Zopf; &zopf; &Zscr; &zscr; &zwj;", "ζ 𝔷 Ж ж ⇝ 𝕫 𝒵 𝓏 \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 Ζ ζ 𝔷 Ж ж ⇝ ", "&ZeroWidthSpace; &Zeta; &zeta; &Zfr; &zfr; Ж ж &zigrarr; &Zopf;"),
]
@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