# 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