103 lines
4.5 KiB
Python
103 lines
4.5 KiB
Python
"""
|
||
Тесты 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("✅ ВСЕ ТЕСТЫ ПРОЙДЕНЫ")
|