# tests/test__typograph.py
# Тесты для модуля Typographer. Проверяют отключение модулей обработки текста.

import pytest
from etpgrf.typograph import Typographer
from etpgrf.config import CHAR_SHY, CHAR_NBSP, CHAR_COPY, CHAR_MDASH, CHAR_ARROW_L


def test_typographer_disables_symbols_processor():
    """
    Проверяет, что при symbols=False модуль обработки символов отключается.
    """
    # Arrange
    input_string = "Текст --- с символами (c) и стрелками A --> B."
    typo = Typographer(langs='ru-en', symbols=False)

    # Act
    output_string = typo.process(input_string)

    # Assert
    # 1. Проверяем внутреннее состояние: модуль действительно отключен
    assert typo.symbols is None
    # 2. Проверяем результат: символы НЕ появились в тексте.
    #    Это главная и самая надежная проверка.
    assert CHAR_MDASH not in output_string  # длинное тире
    assert CHAR_COPY not in output_string  # символ копирайта
    assert CHAR_ARROW_L not in output_string  # стрелка

    def test_typographer_disable_layout_processor():
        """
        Проверяет, что при layout=False модуль обработки компоновки отключается.
        """
        # Arrange
        input_string = "Текст — с тире, которое не должно измениться."
        typo = Typographer(langs='ru', layout=False)

        # Act
        output_string = typo.process(input_string)

        # Assert
        # 1. Проверяем внутреннее состояние: модуль действительно отключен
        assert typo.layout is None
        # 2. Проверяем результат: пробелы вокруг тире НЕ появились в тексте.
        #    Это главная и самая надежная проверка.
        assert CHAR_NBSP in output_string


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 CHAR_SHY 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 CHAR_NBSP not in output_string