diff --git a/etpgrf/config.py b/etpgrf/config.py index c186be2..7c4758f 100644 --- a/etpgrf/config.py +++ b/etpgrf/config.py @@ -263,7 +263,6 @@ MATH_ENTITIES = { 'nVdash': ('\u22AE', '⊮'), # Не влечёт (⊮) 'nVDash': ('\u22AF', '⊯'), # Двойная вертикальная черта с двойной перекладиной справа с отрицанием (⊯) 'prurel': ('\u22B0', '⊰'), # Предшествует относительно (⊰) - 'scurel': ('\u22B1', '&scurel;'), # Следует за относительно (⊱) 'vltri': ('\u22B2', '⊲'), # Нормальная подгруппа (⊲) 'vrtri': ('\u22B3', '⊳'), # Содержит как нормальную подгруппу (⊳) 'ltrie': ('\u22B4', '⊴'), # Нормальная подгруппа либо совпадает (⊴) diff --git a/tests/test_codec.py b/tests/test_codec.py new file mode 100644 index 0000000..44b9288 --- /dev/null +++ b/tests/test_codec.py @@ -0,0 +1,84 @@ +# tests/test_codec.py +import pytest +from etpgrf import codec + +# Вообще, проверять кодирование HTML-мнемоников в Unicode не обязательно, так как это внутренняя библиотека html, +# но так как мнемоники были собраны из разных сторонников, полезно проверить какие из них работают, а какие нет... +# Это способствует тому, что обратное преобразование из Unicode в HTML-мнемоники будет работать корректно. +STRINGS_FOR_DECODE = [ + # Тестовые строки для декодирования html-метаккода в uft-8 + ("", ""), # Пустая строка + ("Hello world!", "Hello world!"), # Строка + ("Привет типограф!", "Привет типограф!"), # Строка русского текста + ("< > & "", "< > & \""), # Самый простой набор HTML-мнемоников + ("­", "\u00AD"), # Мягкий перенос + ("    ‍‌", "\u00A0\u2002\u2003\u2009\u200D\u200C"), # Набор пробелов и невидимых символов + ("– — ‐ ―", "– — ‐ ―"), # Набор тире и дефисов + ("' « »", "' « »"), # Апостроф и ёлочки + ("“ ” „", "“ ” „"), # Двойные кавычки + ("‘ ’ ‚", "‘ ’ ‚"), # Одиночные кавычки + ("‹ ›", "‹ ›"), # Французские угловые кавычки + ("$ ¢ £ ¤ ¥ € ₽", "$ ¢ £ ¤ ¥ € ₽"), # Валютные символы + ("+ − × ÷ = ≠", "+ − × ÷ = ≠"), # Математические символы 01 + ("± ¬ ° ¹ ² ³", "± ¬ ° ¹ ² ³"), # Математические символы 02 + ("ƒ % ‰ ‱", "ƒ % ‰ ‱"), # Математические символы 03 + ("∀ ∁ ∂ ∃ ∄", "∀ ∁ ∂ ∃ ∄"), # Математические символы 04 + ("∅ ∇ ∈ ∉ ∋ ∌", "∅ ∇ ∈ ∉ ∋ ∌"), # Математические символы 05 + ("∏ ∐ ∑ ∓ ∸", "∏ ∐ ∑ ∓ ∸"), # Математические символы 06 + ("∔ ∖ ∗ ∘ √", "∔ ∖ ∗ ∘ √"), # Математические символы 07 + ("∝ ∞ ∠ ∟ ∡ ∣", "∝ ∞ ∠ ∟ ∡ ∣"), # Математические символы 08 + ("∢ ∤ '∥ ∦ ∧ ∨", "∢ ∤ '∥ ∦ ∧ ∨"), # Математические символы 09 + ("∩ ∪ ∫ ∬ ∭ ∮", "∩ ∪ ∫ ∬ ∭ ∮"), # Математические символы 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 + ("⋾ ⌅ ⌆ ⌈ ⌈", "⋾ ⌅ ⌆ ⌈ ⌈"), + ("⌉ ⌊ ⌋ ⟨ ⟩", "⌉ ⌊ ⌋ ⟨ ⟩"), + ("", ""), + ("", ""), + + + ("© ® ™", "\u00A9 \u00AE \u2122"), # Символы авторского права, зарегистрированной торговой марки и товарного знака +] + +@pytest.mark.parametrize("input_string, expected_output", STRINGS_FOR_DECODE) +def test_html_mnemo_to_utf(input_string, expected_output): + """ + Проверяет ПОВЕДЕНИЕ: декодирование HTML-мнемоников в Unicode-строки. + """ + # Act (действие) - тестируем + actual_output = codec.decode_to_unicode(input_string) + # Assert (проверка) + assert actual_output == expected_output \ No newline at end of file