Files
2025-etpgrf/tests/test_unbreakables.py

90 lines
4.8 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.

# tests/test_unbreakables.py
import pytest
from etpgrf import Unbreakables
# Список русских слов, которые должны "приклеиваться" к следующему слову.
RUSSIAN_PREPOSITIONS_TO_TEST = [
# Предлоги (только короткие... длинные, типа `ввиду`, `ввиду` и т.п., могут быть "висячими")
'в', 'без', 'до', 'из', 'к', 'на', 'по', 'о', 'от', 'перед', 'при', 'через', 'с', 'у', 'за', 'над',
'об', 'под', 'про', 'для', 'ко', 'со', 'без', 'то', 'во', 'из-за', 'из-под', 'как'
# Союзы (без сложных, тип `как будто`, `как если бы`, `за то` и т.п.)
'и', 'а', 'но', 'да', 'как',
# Частицы
'не', 'ни',
# Местоимения
'я', 'ты', 'он', 'мы', 'вы', 'им', 'их', 'ей', 'ею',
# Устаревшие или специфичные
'сей', 'сия', 'сие',
]
@pytest.mark.parametrize("word", RUSSIAN_PREPOSITIONS_TO_TEST)
def test_russian_prepositions_are_unbreakable(word):
"""
Проверяет ПОВЕДЕНИЕ: короткие слова "приклеиваются" к следующему. Для русского языка. Параметризованный тест
"""
# Arrange (подготовка)
unbreakables_ru = Unbreakables(langs='ru')
input_text = f"Проверка {word} тестирование."
expected_text = f"Проверка {word}\u00A0тестирование."
# Act (действие, которое выполняем)
actual_text = unbreakables_ru.process(input_text)
# Assert (утверждение, что результат соответствует ожиданиям)
assert actual_text == expected_text
# Список английских слов, которые должны "приклеиваться" к следующему слову.
ENGLISH_PREPOSITIONS_TO_TEST = [
'a', 'an', 'as', 'at', 'by', 'in', 'is', 'it', 'of', 'on', 'or', 'so', 'to', 'if',
'for', 'from', 'into', 'that', 'then', 'they', 'this', 'was', 'were', 'what', 'when', 'with',
'not', 'but', 'which', 'the'
]
@pytest.mark.parametrize("word", ENGLISH_PREPOSITIONS_TO_TEST)
def test_english_prepositions_are_unbreakable(word):
"""
Проверяет ПОВЕДЕНИЕ: короткие слова "приклеиваются" к следующему. Для английского языка. Параметризованный тест
"""
# Arrange (подготовка)
unbreakables_en = Unbreakables(langs='en')
input_text = f"Training {word} test."
expected_text = f"Training {word}\u00A0test."
# Act (действие, которое выполняем)
actual_text = unbreakables_en.process(input_text)
# Assert (утверждение, что результат соответствует ожиданиям)
assert actual_text == expected_text
# Смешанный тест для русского и английского языков
def test_mix_prepositions_are_unbreakable():
"""
Проверяет ПОВЕДЕНИЕ: короткие слова "приклеиваются" к следующему. Для смешанного русско-английского текста.
"""
# Arrange (подготовка)
unbreakables_mix = Unbreakables(langs='ru+en')
input_text = f"Для the Guardian он написал блестящую статью."
expected_text = f"Для\u00A0the\u00A0Guardian он\u00A0написал блестящую статью."
# Act (действие, которое выполняем)
actual_text = unbreakables_mix.process(input_text)
# Assert (утверждение, что результат соответствует ожиданиям)
assert actual_text == expected_text
# Список русских постпозитивных частиц, которые должны "приклеиваться" к предыдущему слову.
RUSSIAN_POSTPOSITIVE_PARTICLES_TO_TEST = [
'ли', 'ль', 'же', 'ж', 'бы', 'б'
]
@pytest.mark.parametrize("word", RUSSIAN_POSTPOSITIVE_PARTICLES_TO_TEST)
def test_russian_postpositive_particle(word):
"""
Проверяет ПОВЕДЕНИЕ: русские постпозитивные частицы "приклеиваются" к предыдущему слову.
"""
# Arrange
unbreakables_ru = Unbreakables(langs='ru')
input_text = f"Отчего {word} не поспать?"
expected_text = f"Отчего\u00A0{word} не\u00A0поспать?"
# Act
actual_text = unbreakables_ru.process(input_text)
# Assert
assert actual_text == expected_text