74 lines
4.6 KiB
Python
74 lines
4.6 KiB
Python
# tests/test_quotes.py
|
||
# Тесты для модуля QuotesProcessor. Проверяют обработку кавычек в тексте.
|
||
|
||
import pytest
|
||
from etpgrf.quotes import QuotesProcessor
|
||
|
||
# Набор тестовых случаев в формате:
|
||
# (язык, входная_строка, ожидаемый_результат)
|
||
QUOTES_TEST_CASES = [
|
||
# --- Базовые случаи ---
|
||
('ru', 'Текст \"в кавычках\"', 'Текст «в кавычках»'),
|
||
('en', 'Text \"in quotes\"', 'Text “in quotes”'),
|
||
('ru', '(\"в скобках\")', '(«в скобках»)'),
|
||
|
||
# --- Случаи, которые не должны меняться ---
|
||
('ru', 'Текст без кавычек.', 'Текст без кавычек.'),
|
||
('ru', 'Уже есть «ёлочки» и „лапки“', 'Уже есть «ёлочки» и „лапки“'),
|
||
('en', 'Already have “curly” and ‘single’ quotes', 'Already have “curly” and ‘single’ quotes'),
|
||
|
||
# --- Сложные случаи и исключения (QuotesProcessor должен их игнорировать) ---
|
||
('ru', 'Размер экрана 17"', 'Размер экрана 17"'),
|
||
('en', 'Screen size 17"', 'Screen size 17"'),
|
||
('ru', 'Код print("Hello, World!")', 'Код print(«Hello, World!»)'), # Скобки помогают определить контекст
|
||
('ru', ' " одинокая кавычка " ', ' " одинокая кавычка " '), # Кавычки окружены пробелами
|
||
('ru', 'слово"вплотную', 'слово"вплотную'),
|
||
('ru', 'вплотную"слово', 'вплотную"слово'),
|
||
|
||
# --- Вложенность и несколько пар ---
|
||
('ru', 'Он сказал: "Привет, мир!"', 'Он сказал: «Привет, мир!»'),
|
||
('ru', 'Она ответила: "И тебе "привет"!"', 'Она ответила: «И тебе «привет»!»'),
|
||
|
||
# --- Обработка пунктуации ---
|
||
# Точка СНАРУЖИ кавычек - правильная пунктуация, корректно обрабатывается
|
||
('ru', 'Текст "в кавычках".', 'Текст «в кавычках».'),
|
||
('en', '"Word".', '“Word”.'),
|
||
# Точка ВНУТРИ кавычек - неправильная пунктуация, закрывающая кавычка не обрабатывается (согласно README)
|
||
('ru', 'Текст "в кавычках."', 'Текст «в кавычках."'),
|
||
('en', '"Word."', '“Word."'),
|
||
# Знаки ?, !, … ВНУТРИ кавычек - правильная пунктуация, корректно обрабатывается
|
||
('ru', '"Слово?"', '«Слово?»'),
|
||
('en', '"Word?"', '“Word?”'),
|
||
('ru', '"Слово!"', '«Слово!»'),
|
||
('en', '"Word!"', '“Word!”'),
|
||
('ru', '"Слово…"', '«Слово…»'),
|
||
('en', '"Word…"', '“Word…”'),
|
||
# Запятая СНАРУЖИ кавычек
|
||
('ru', '"Слово", - сказал он.', '«Слово», - сказал он.'),
|
||
# Цифры в кавычках не обрабатываются
|
||
('ru', 'Цифры "123" в кавычках', 'Цифры "123" в кавычках'),
|
||
('en', 'Numbers "123" in quotes', 'Numbers "123" in quotes'),
|
||
|
||
# --- Языки и приоритеты ---
|
||
(None, 'Текст "в кавычках"', 'Текст «в кавычках»'), # Язык не указан -> используется DEFAULT_LANGS[0] ('ru')
|
||
('ru-en', 'Текст "в кавычках"', 'Текст «в кавычках»'), # 'ru' первый в списке -> используются русские кавычки
|
||
('en-ru', 'Text "in quotes"', 'Text “in quotes”'), # 'en' первый в списке -> используются английские кавычки
|
||
]
|
||
|
||
|
||
@pytest.mark.parametrize("lang, input_string, expected_output", QUOTES_TEST_CASES)
|
||
def test_quotes_processor(lang, input_string, expected_output):
|
||
"""
|
||
Проверяет работу QuotesProcessor в изоляции.
|
||
"""
|
||
# Arrange (подготовка)
|
||
# Создаем экземпляр процессора только для этого теста
|
||
processor = QuotesProcessor(langs=lang)
|
||
|
||
# Act (действие)
|
||
# Выполняем обработку
|
||
actual_output = processor.process(input_string)
|
||
|
||
# Assert (проверка)
|
||
# Сравниваем результат с ожидаемым
|
||
assert actual_output == expected_output |