Files
drhider/tests/test_replacer.py
T

103 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Тесты replacer.py — apply_replacements.
Запуск: python3 tests/test_replacer.py
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from drhider.replacer import apply_replacements
passed = 0
failed = 0
def check(name, condition):
global passed, failed
if condition:
passed += 1
print(f" ✅ {name}")
else:
failed += 1
print(f" ❌ {name}")
# ═══════════════════════════════════════════════════════════════
# apply_replacements
# ═══════════════════════════════════════════════════════════════
print("\n=== apply_replacements ===")
# 1. Простая замена
text = "Директор Иванов И.И. подписал"
mapping = {"Иванов И.И.": "Иванов_0001"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("простая замена", result == "Директор Иванов_0001 подписал")
# 2. Длинное before короткого
text = "ИНН 123456789012 и ИНН 1234567890"
mapping = {"ИНН 123456789012": "ИНН_0001", "ИНН 1234567890": "ИНН_0002"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("длинное раньше короткого", "ИНН_0001" in result and "ИНН_0002" in result)
check("12-значный не задет 10-значным", result == "ИНН_0001 и ИНН_0002")
# 3. Границы слова
text = "Email: test@mail.ru написать"
mapping = {"test@mail.ru": "email_0001@fake"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("email заменён", "email_0001@fake" in result)
# 4. Множественные замены
text = "Иванов И.И. и Петров А.С. подписали"
mapping = {"Иванов И.И.": "Иванов_0001", "Петров А.С.": "Петров_0002"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("две замены", "Иванов_0001" in result and "Петров_0002" in result)
# 5. Спецсимволы в ключе
text = 'ООО "Ромашка" заключила'
mapping = {'ООО "Ромашка"': "ООО_Технология_0001"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("кавычки в ключе", "ООО_Технология_0001" in result)
# 6. Кириллица
text = "Москва, ул. Ленина, д. 42"
mapping = {"Москва": "Москва_0001", "Ленина": "Ленина_0015"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("кириллица заменена", "Москва_0001" in result and "Ленина_0015" in result)
# 7. Частичное совпадение не заменяется
text = "Ивановский проспект"
mapping = {"Иванов": "Иванов_0001"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("частичное совпадение — не заменено", result == "Ивановский проспект")
# 8. Пустой mapping
text = "ничего не меняется"
result = apply_replacements(text, {}, [])
check("пустой mapping", result == text)
# 9. Markdown текст
text = "**ООО Ромашка** заключила с **Иванов И.И.**"
mapping = {"ООО Ромашка": "ООО_Технология_0001", "Иванов И.И.": "Иванов_0002"}
keys = sorted(mapping.keys(), key=len, reverse=True)
result = apply_replacements(text, mapping, keys)
check("Markdown bold сохранён", "**ООО_Технология_0001**" in result)
# ═══════════════════════════════════════════════════════════════
print(f"\n{'='*50}")
print(f"Результат: {passed} OK, {failed} FAIL из {passed + failed}")
if failed > 0:
print("❌ ТЕСТЫ ПРОВАЛЕНЫ")
sys.exit(1)
else:
print("✅ ВСЕ ТЕСТЫ ПРОЙДЕНЫ")