112 lines
9.8 KiB
Python
112 lines
9.8 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"), # Набор пробелов и невидимых символов
|
||
("– — ‐ ―", "– — ‐ ―"), # Набор тире и дефисов
|
||
("$ ¢ £ ¤ ¥ € ₽", "$ ¢ £ ¤ ¥ € ₽"), # Валютные символы
|
||
# Набор из html.entities.name2codepoint
|
||
("Æ Á Â À Α Å Ã Ä Ä", "Æ Á Â À Α Å Ã Ä Ä"),
|
||
("Β Ç Χ ‡ Δ Ð É Ê È", "Β Ç Χ ‡ Δ Ð É Ê È"),
|
||
("Ε Η Ë Γ Í Î Ì Ι Ï", "Ε Η Ë Γ Í Î Ì Ι Ï"),
|
||
("Κ Λ Μ Ñ Ν Œ Ó Ô Ò Ö", "Κ Λ Μ Ñ Ν Œ Ó Ô Ò Ö"),
|
||
("Ω Ο Ø Õ Φ Π ″ Ψ Ρ Š", "Ω Ο Ø Õ Φ Π ″ Ψ Ρ Š"),
|
||
("Σ Þ Τ Θ Ú Û Ù Υ Ü", "Σ Þ Τ Θ Ú Û Ù Υ Ü"),
|
||
("Ξ Ý Ÿ Ζ á â ´ æ à", "Ξ Ý Ÿ Ζ á â ´ æ à"),
|
||
("ℵ α & ∧ ∠ ' å ≈ ã ä", "ℵ α & ∧ ∠ ' å ≈ ã ä"),
|
||
("„ β ¦ • ∩ ç ¸ ¢ χ ˆ", "„ β ¦ • ∩ ç ¸ ¢ χ ˆ"),
|
||
("♣ ≅ © ↵ ∪ ¤ ⇓ † ↓ °", "♣ ≅ © ↵ ∪ ¤ ⇓ † ↓ °"),
|
||
("δ ♦ ÷ é ê è ∅    ", "δ ♦ ÷ é ê è ∅ \u2003 \u2002"),
|
||
("ε ≡ η ð ë € ∃ ƒ ∀ ½", "ε ≡ η ð ë € ∃ ƒ ∀ ½"),
|
||
("¼ ¾ ⁄ γ ≥ > ⇔ ↔ ♥ …", "¼ ¾ ⁄ γ ≥ > ⇔ ↔ ♥ …"),
|
||
("í î ¡ ì ℑ ∞ ∫ ι ¿ ∈", "í î ¡ ì ℑ ∞ ∫ ι ¿ ∈"),
|
||
("ï κ ⇐ λ ⟨ « ← ⌈ “ ≤", "ï κ ⇐ λ ⟨ « ← ⌈ “ ≤"),
|
||
("⌊ ∗ ◊ ‎ ‹ ‘ < ¯ — µ", "⌊ ∗ ◊ \u200e ‹ ‘ < ¯ — µ"),
|
||
("· − μ ∇ – ≠ ∋ ¬ ∉", "· − μ ∇ \u00A0 – ≠ ∋ ¬ ∉"),
|
||
("⊄ ñ ν ó ô œ ò ‾ ω", "⊄ ñ ν ó ô œ ò ‾ ω"),
|
||
("ο ⊕ ∨ ª º ø õ ⊗ ö", "ο ⊕ ∨ ª º ø õ ⊗ ö"),
|
||
("¶ ∂ ‰ ⊥ φ π ϖ ± £ ′ ∏", "¶ ∂ ‰ ⊥ φ π ϖ ± £ ′ ∏"),
|
||
("∝ ψ " ⇒ √ ⟩ » → ⌉ ”", "∝ ψ \" ⇒ √ ⟩ » → ⌉ ”"),
|
||
("ℜ ® ⌋ ρ ‏ › ’ ‚ š", "ℜ ® ⌋ ρ \u200f › ’ ‚ š"),
|
||
("⋅ § ­ σ ς ∼ ♠ ⊂ ⊆ ∑", "⋅ § \u00AD σ ς ∼ ♠ ⊂ ⊆ ∑"),
|
||
("⊃ ¹ ² ³ ⊇ ß τ ∴ θ ϑ", "⊃ ¹ ² ³ ⊇ ß τ ∴ θ ϑ"),
|
||
("  þ ˜ × ™ ⇑ ú ↑ û", "\u2009 þ ˜ × ™ ⇑ ú ↑ û"),
|
||
("ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ", "ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ"),
|
||
("ζ ‍ ‌ + = %", "ζ \u200D \u200C + = %"),
|
||
# Набор из html.entities.html5
|
||
("", ""),
|
||
("", ""),
|
||
|
||
]
|
||
|
||
@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
|
||
|
||
|
||
STRINGS_FOR_ENCODE = [
|
||
# Тестовые строки для декодирования html-метаккода в uft-8
|
||
("", ""), # Пустая строка
|
||
("Hello world!", "Hello world!"), # Строка
|
||
("Привет типограф!", "Привет типограф!"), # Строка русского текста
|
||
("< > & \"", "< > & ""), # Самый простой набор HTML-мнемоников
|
||
("\u00AD", "­"), # Мягкий перенос
|
||
("\u00A0\u2002\u2003\u2009\u200D\u200C", "    ‍‌"), # Набор пробелов и невидимых символов
|
||
("– — ‐ ―", "– — ‐ ―"), # Набор тире и дефисов
|
||
("$ ¢ £ ¤ ¥ € ₽", "$ ¢ £ ¤ ¥ € ₽"), # Валютные символы
|
||
# Набор из html.entities.name2codepoint
|
||
("Æ Á Â À Α Å Ã Ä Ä", "Æ Á Â À Α Å Ã Ä Ä"),
|
||
("Β Ç Χ ‡ Δ Ð É Ê È", "Β Ç Χ ‡ Δ Ð É Ê È"),
|
||
("Ε Η Ë Γ Í Î Ì Ι Ï", "Ε Η Ë Γ Í Î Ì Ι Ï"),
|
||
("Κ Λ Μ Ñ Ν Œ Ó Ô Ò Ö", "Κ Λ Μ Ñ Ν Œ Ó Ô Ò Ö"),
|
||
("Ω Ο Ø Õ Φ Π ″ Ψ Ρ Š", "Ω Ο Ø Õ Φ Π ″ Ψ Ρ Š"),
|
||
("Σ Þ Τ Θ Ú Û Ù Υ Ü", "Σ Þ Τ Θ Ú Û Ù Υ Ü"),
|
||
("Ξ Ý Ÿ Ζ á â ´ æ à", "Ξ Ý Ÿ Ζ á â ´ æ à"),
|
||
("ℵ α & ∧ ∠ ' å ≈ ã ä", "ℵ α & ∧ ∠ ' å ≈ ã ä"),
|
||
("„ β ¦ • ∩ ç ¸ ¢ χ ˆ", "„ β ¦ • ∩ ç ¸ ¢ χ ˆ"),
|
||
("♣ ≅ © ↵ ∪ ¤ ⇓ † ↓ °", "♣ ≅ © ↵ ∪ ¤ ⇓ † ↓ °"),
|
||
("δ ♦ ÷ é ê è ∅ \u2003 \u2002", "δ ♦ ÷ é ê è ∅    "),
|
||
("ε ≡ η ð ë € ∃ ƒ ∀ ½", "ε ≡ η ð ë € ∃ ƒ ∀ ½"),
|
||
("¼ ¾ ⁄ γ ≥ > ⇔ ↔ ♥ …", "¼ ¾ ⁄ γ ≥ > ⇔ ↔ ♥ …"),
|
||
("í î ¡ ì ℑ ∞ ∫ ι ¿ ∈", "í î ¡ ì ℑ ∞ ∫ ι ¿ ∈"),
|
||
("ï κ ⇐ λ ⟨ « ← ⌈ “ ≤", "ï κ ⇐ λ ⟨ « ← ⌈ “ ≤"),
|
||
("⌊ ∗ ◊ \u200e ‹ ‘ < ¯ — µ", "⌊ ∗ ◊ ‎ ‹ ‘ < ¯ — µ"),
|
||
("· − μ ∇ \u00A0 – ≠ ∋ ¬ ∉", "· − μ ∇ – ≠ ∋ ¬ ∉"),
|
||
("⊄ ñ ν ó ô œ ò ‾ ω", "⊄ ñ ν ó ô œ ò ‾ ω"),
|
||
("ο ⊕ ∨ ª º ø õ ⊗ ö", "ο ⊕ ∨ ª º ø õ ⊗ ö"),
|
||
("¶ ∂ ‰ ⊥ φ π ϖ ± £ ′ ∏", "¶ ∂ ‰ ⊥ φ π ϖ ± £ ′ ∏"),
|
||
("∝ ψ \" ⇒ √ ⟩ » → ⌉ ”", "∝ ψ " ⇒ √ ⟩ » → ⌉ ”"),
|
||
("ℜ ® ⌋ ρ \u200f › ’ ‚ š", "ℜ ® ⌋ ρ ‏ › ’ ‚ š"),
|
||
("⋅ § \u00AD σ ς ∼ ♠ ⊂ ⊆ ∑", "⋅ § ­ σ ς ∼ ♠ ⊂ ⊆ ∑"),
|
||
("⊃ ¹ ² ³ ⊇ ß τ ∴ θ ϑ", "⊃ ¹ ² ³ ⊇ ß τ ∴ θ ϑ"),
|
||
("\u2009 þ ˜ × ™ ⇑ ú ↑ û", "  þ ˜ × ™ ⇑ ú ↑ û"),
|
||
("ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ", "ù ¨ ϒ υ ü ℘ ξ ý ¥ ÿ"),
|
||
("ζ \u200D \u200C + = %", "ζ ‍ ‌ + = %"),
|
||
# Набор из html.entities.html5
|
||
]
|
||
|
||
@pytest.mark.parametrize("input_string, expected_output", STRINGS_FOR_ENCODE)
|
||
def test_utf_to_html_mnemo(input_string, expected_output):
|
||
"""
|
||
Проверяет ПОВЕДЕНИЕ: кодирование Unicode-строк в HTML-мнемоники.
|
||
"""
|
||
# Act (действие) - тестируем
|
||
actual_output = codec.encode_from_unicode(input_string, mode="mnemonic")
|
||
# Assert (проверка)
|
||
assert actual_output == expected_output |