127 lines
8.6 KiB
Python
127 lines
8.6 KiB
Python
# 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"), # Набор пробелов и невидимых символов
|
||
("– — ‐ ―", "– — ‐ ―"), # Набор тире и дефисов
|
||
("' « »", "' « »"), # Апостроф и ёлочки
|
||
("“ ” „", "“ ” „"), # Двойные кавычки
|
||
("‘ ’ ‚", "‘ ’ ‚"), # Одиночные кавычки
|
||
("‹ ›", "‹ ›"), # Французские угловые кавычки
|
||
("$ ¢ £ ¤ ¥ € ₽", "$ ¢ £ ¤ ¥ € ₽"), # Валютные символы
|
||
("+ − × ÷ = ≠", "+ − × ÷ = ≠"), # Математические символы
|
||
("± ¬ ° ¹ ² ³", "± ¬ ° ¹ ² ³"),
|
||
("ƒ % ‰ ‱", "ƒ % ‰ ‱"),
|
||
("∀ ∁ ∂ ∃ ∄", "∀ ∁ ∂ ∃ ∄"),
|
||
("∅ ∇ ∈ ∉ ∋ ∌", "∅ ∇ ∈ ∉ ∋ ∌"),
|
||
("∏ ∐ ∑ ∓ ∸", "∏ ∐ ∑ ∓ ∸"),
|
||
("∔ ∖ ∗ ∘ √", "∔ ∖ ∗ ∘ √"),
|
||
("∝ ∞ ∠ ∟ ∡ ∣", "∝ ∞ ∠ ∟ ∡ ∣"),
|
||
("∢ ∤ '∥ ∦ ∧ ∨", "∢ ∤ '∥ ∦ ∧ ∨"),
|
||
("∩ ∪ ∫ ∬ ∭ ∮", "∩ ∪ ∫ ∬ ∭ ∮"),
|
||
("∯ ∰ ∱ ∲", "∯ ∰ ∱ ∲"),
|
||
("∳ ∴ ∵ ∶ ∷", "∳ ∴ ∵ ∶ ∷"),
|
||
("∺ ∻ ∼ ∽ ∾ ∿", "∺ ∻ ∼ ∽ ∾ ∿"),
|
||
("≀ ≁ ≂ ≃ ≄ ≅", "≀ ≁ ≂ ≃ ≄ ≅"),
|
||
("≈ ≆ ≇ ≉ ≊ ≋", "≈ ≆ ≇ ≉ ≊ ≋"),
|
||
("≌ ≍ ≎ ≏ ≐ ≑", "≌ ≍ ≎ ≏ ≐ ≑"),
|
||
("≒ ≓ ≔ ≕ ≖ ≗", "≒ ≓ ≔ ≕ ≖ ≗"),
|
||
("≙ ≚ ≜ ≟ ≡", "≙ ≚ ≜ ≟ ≡"),
|
||
("≢ ≤ ≥ ≦ ≧ ≨ ≩", "≢ ≤ ≥ ≦ ≧ ≨ ≩"),
|
||
("≪ ≫ ≬ ≭ ≮ ≯", "≪ ≫ ≬ ≭ ≮ ≯"),
|
||
("≰ ≱ ≲ ≳ ≴ ≵", "≰ ≱ ≲ ≳ ≴ ≵"),
|
||
("≶ ≷ ≸ ≹ ≺ ≻", "≶ ≷ ≸ ≹ ≺ ≻"),
|
||
("≼ ≽ ≾ ≿ ⊀ ⊁", "≼ ≽ ≾ ≿ ⊀ ⊁"),
|
||
("⊂ ⊃ ⊄ ⊅ ⊆ ⊇", "⊂ ⊃ ⊄ ⊅ ⊆ ⊇"),
|
||
("⊈ ⊉ ⊊ ⊋ ⊍", "⊈ ⊉ ⊊ ⊋ ⊍"),
|
||
("⊎ ⊏ ⊐ ⊑ ⊒", "⊎ ⊏ ⊐ ⊑ ⊒"),
|
||
("⊓ ⊔ ⊕ ⊖ ⊗", "⊓ ⊔ ⊕ ⊖ ⊗"),
|
||
("⊘ ⊙ ⊚ ⊛ ⊝ ⊞", "⊘ ⊙ ⊚ ⊛ ⊝ ⊞"),
|
||
("⊟ ⊠ ⊡ ⊢ ⊣ ⊤", "⊟ ⊠ ⊡ ⊢ ⊣ ⊤"),
|
||
("⊥ ⊧ ⊨ ⊩ ⊪", "⊥ ⊧ ⊨ ⊩ ⊪"),
|
||
("⊫ ⊬ ⊭ ⊮ ⊯", "⊫ ⊬ ⊭ ⊮ ⊯"),
|
||
("⊰ ⊲ ⊳ ⊴ ⊵", "⊰ ⊲ ⊳ ⊴ ⊵"),
|
||
("⊶ ⊷ ⊸ ⊹ ⊺", "⊶ ⊷ ⊸ ⊹ ⊺"),
|
||
("⊻ ⊽ ⊾ ⊿ ⋀", "⊻ ⊽ ⊾ ⊿ ⋀"),
|
||
("⋁ ⋂ ⋃ ⋄ ⋅ ⋆", "⋁ ⋂ ⋃ ⋄ ⋅ ⋆"),
|
||
("⋇ ⋈ ⋉ ⋊ ⋋", "⋇ ⋈ ⋉ ⋊ ⋋"),
|
||
("⋌ ⋍ ⋎ ⋏ ⋐ ⋑", "⋌ ⋍ ⋎ ⋏ ⋐ ⋑"),
|
||
("⋒ ⋓ ⋔ ⋕ ⋖ ⋗", "⋒ ⋓ ⋔ ⋕ ⋖ ⋗"),
|
||
("⋘ ⋙ ⋚ ⋛ ⋞ ⋟", "⋘ ⋙ ⋚ ⋛ ⋞ ⋟"),
|
||
("⋠ ⋡ ⋢ ⋣", "⋠ ⋡ ⋢ ⋣"),
|
||
("⪉ ⪊ ⋦ ⋧ ⋨", "⪉ ⪊ ⋦ ⋧ ⋨"),
|
||
("⋩ ⋪ ⋫ ⋬ ⋭", "⋩ ⋪ ⋫ ⋬ ⋭"),
|
||
("⋮ ⋯ ⋰ ⋱ ⋲", "⋮ ⋯ ⋰ ⋱ ⋲"),
|
||
("⋳ ⋴ ⋵ ⋶ ⋷", "⋳ ⋴ ⋵ ⋶ ⋷"),
|
||
("⋹ ⋺ ⋻ ⋼ ⋽", "⋹ ⋺ ⋻ ⋼ ⋽"),
|
||
("⋾ ⌅ ⌆ ⌈ ⌈", "⋾ ⌅ ⌆ ⌈ ⌈"),
|
||
("⌉ ⌊ ⌋ ⟨ ⟩", "⌉ ⌊ ⌋ ⟨ ⟩"),
|
||
("© ® ™ ℗ @", "© ® ™ ℗ @"), # Другие символы
|
||
("ℂ ℅ ℊ ℋ ℌ ℍ", "ℂ ℅ ℊ ℋ ℌ ℍ"),
|
||
("ℎ ℏ ℐ ℑ ℒ ℓ", "ℎ ℏ ℐ ℑ ℒ ℓ"),
|
||
("ℕ № ℘ ℙ ℚ ℛ", "ℕ № ℘ ℙ ℚ ℛ"),
|
||
("ℝ ℞ ℤ ℧ ℨ ℩", "ℝ ℞ ℤ ℧ ℨ ℩"),
|
||
("ℬ ℭ ℯ ℰ ℱ ℳ", "ℬ ℭ ℯ ℰ ℱ ℳ"),
|
||
("ℴ ℵ ℶ ℷ ℸ", "ℴ ℵ ℶ ℷ ℸ"),
|
||
("ⅅ ⅆ ⅇ ⅈ ffi ff", "ⅅ ⅆ ⅇ ⅈ ffi ff"),
|
||
("fi fl ★ ☆ ☎", "fi fl ★ ☆ ☎"),
|
||
("♀ ♂ ♠ ♣ ♥ ♦", "♀ ♂ ♠ ♣ ♥ ♦"),
|
||
("◊ ♪ ♭ ♮ ♯ ✓", "◊ ♪ ♭ ♮ ♯ ✓"),
|
||
("✗ ✠ ✶ ❘", "✗ ✠ ✶ ❘"),
|
||
("❲ ❳", "❲ ❳"),
|
||
("! # % ( ) *", "! # % ( ) *"), # Знаки препинания
|
||
(", . / : ;", ", . / : ;"),
|
||
("? [ \ ] ^ _", "? [ \\ ] ^ _"),
|
||
("` { | } ˜", "` { | } ˜"),
|
||
("ˆ ‎ ‏ ¡ ¦ §", "ˆ \u200e \u200f ¡ ¦ §"),
|
||
("¨ ª ¬ ¯ ´ µ ‵", "¨ ª ¬ ¯ ´ µ ‵"),
|
||
("¶ · ¸ º ¿ ‖", "¶ · ¸ º ¿ ‖"),
|
||
("† ‡ • ‥ …", "† ‡ • ‥ …"),
|
||
("‰ ‱ ′ ″ ‴", "‰ ‱ ′ ″ ‴"),
|
||
("‾ ⁁ ⁃ ⁄ ⁏ ⁗", "‾ ⁁ ⁃ ⁄ ⁏ ⁗"),
|
||
("½ ⅓ ¼ ⅕ ⅙", "½ ⅓ ¼ ⅕ ⅙"), # Дробные символы и знаки
|
||
("⅛ ⅔ ⅖ ¾ ⅗", "⅛ ⅔ ⅖ ¾ ⅗"),
|
||
("⅜ ⅘ ⅚ ⅝ ⅞", "⅜ ⅘ ⅚ ⅝ ⅞"),
|
||
("Α Β Γ Δ Ε Ζ", "Α Β Γ Δ Ε Ζ"), # Греческие символы
|
||
("Η Θ Ι Κ Λ Μ", "Η Θ Ι Κ Λ Μ"),
|
||
("Ν Ξ Ο Π Ρ Σ Τ", "Ν Ξ Ο Π Ρ Σ Τ"),
|
||
("Υ Φ Χ Ψ Ω α", "Υ Φ Χ Ψ Ω α"),
|
||
("β γ δ ε ζ η", "β γ δ ε ζ η"),
|
||
("θ ι κ λ μ ν", "θ ι κ λ μ ν"),
|
||
("ξ ο π ρ ς τ", "ξ ο π ρ ς τ"),
|
||
("υ φ χ ψ ω", "υ φ χ ψ ω"),
|
||
("ϑ ϒ ϖ", "ϑ ϒ ϖ"),
|
||
("", ""),
|
||
("", ""),
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
]
|
||
|
||
@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
|