add: обработка кавычек
This commit is contained in:
63
tests/test__typograph.py
Normal file
63
tests/test__typograph.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# tests/test__typograph.py
|
||||
# Тесты для модуля Typographer. Проверяют отключение модулей обработки текста.
|
||||
|
||||
import pytest
|
||||
from etpgrf.typograph import Typographer
|
||||
from etpgrf.config import SHY_CHAR, NBSP_CHAR
|
||||
|
||||
|
||||
def test_typographer_disables_quotes_processor():
|
||||
"""
|
||||
Проверяет, что при quotes=False модуль обработки кавычек отключается.
|
||||
"""
|
||||
# Arrange
|
||||
input_string = 'Текст "в кавычках", который не должен измениться.'
|
||||
# Создаем два экземпляра: с None и с False для полной проверки
|
||||
typo_false = Typographer(langs='ru', quotes=False)
|
||||
|
||||
# Act
|
||||
output_false = typo_false.process(input_string)
|
||||
|
||||
# Assert
|
||||
# 1. Проверяем внутреннее состояние: модуль действительно отключен
|
||||
assert typo_false.quotes is None
|
||||
|
||||
# 2. Проверяем результат: типографские кавычки НЕ появились в тексте.
|
||||
# Это главная и самая надежная проверка.
|
||||
assert '«' not in output_false and '»' not in output_false
|
||||
|
||||
|
||||
def test_typographer_disables_hyphenation():
|
||||
"""
|
||||
Проверяет, что при hyphenation=False модуль переносов отключается.
|
||||
"""
|
||||
# Arrange
|
||||
input_string = "Длинноесловодляпроверкипереносов"
|
||||
typo = Typographer(langs='ru', hyphenation=False)
|
||||
|
||||
# Act
|
||||
output_string = typo.process(input_string)
|
||||
|
||||
# Assert
|
||||
# 1. Проверяем внутреннее состояние
|
||||
assert typo.hyphenation is None
|
||||
# 2. Проверяем результат: в тексте не появилось символов мягкого переноса
|
||||
assert SHY_CHAR not in output_string
|
||||
|
||||
|
||||
def test_typographer_disables_unbreakables():
|
||||
"""
|
||||
Проверяет, что при unbreakables=False модуль неразрывных пробелов отключается.
|
||||
"""
|
||||
# Arrange
|
||||
input_string = "Он сказал: в дом вошла она."
|
||||
typo = Typographer(langs='ru', unbreakables=False)
|
||||
|
||||
# Act
|
||||
output_string = typo.process(input_string)
|
||||
|
||||
# Assert
|
||||
# 1. Проверяем внутреннее состояние
|
||||
assert typo.unbreakables is None
|
||||
# 2. Проверяем результат: в тексте не появилось неразрывных пробелов
|
||||
assert NBSP_CHAR not in output_string
|
74
tests/test_quotes.py
Normal file
74
tests/test_quotes.py
Normal file
@@ -0,0 +1,74 @@
|
||||
# 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
|
Reference in New Issue
Block a user