Quellcode für text_lint.operations.assertions.assert_equal

"""AssertEqual class."""

import re
from typing import TYPE_CHECKING, Optional

from text_lint.operations.assertions.bases import assertion_regex_base
from text_lint.operations.bases.operation_base import YAML_EXAMPLE_SECTIONS
from text_lint.utilities.translations import _

if TYPE_CHECKING:  # pragma: no cover
  from text_lint.linter.states.assertion import AssertionState
  from text_lint.operations.assertions.args.split import AliasYamlSplit

YAML_EXAMPLE_COMPONENTS = (
    _("example assert blank assertion"),
    _("'case_insensitive' will match strings with differing cases."),
    _("(This defaults to false.)"),
)
YAML_EXAMPLE = """

- name: {0}
  operation: assert_equal
  expected: "simple-string-MATCHING"
  case_insensitive: False
  save: assert_equal_example
  splits:
    - group: 1
    - separator: "-"

{options_section}:
  - {1}
    {2}
{options}

""".format(
    *YAML_EXAMPLE_COMPONENTS,
    **YAML_EXAMPLE_SECTIONS,
    options=assertion_regex_base.YAML_ASSERTION_REGEX_EXAMPLE_OPTIONS,
)


[Doku] class AssertEqual(assertion_regex_base.AssertionRegexBase): """Assert that the line matches an expected static value.""" hint = _("this line must match the expected value") operation = "assert_equal" yaml_example = YAML_EXAMPLE
[Doku] def __init__( self, name: str, expected: str, save: Optional[str] = None, splits: Optional["AliasYamlSplit"] = None, case_sensitive: Optional[bool] = True, ) -> None: """Initialize AssertEqual instances. :param name: The configured name of this assertion. :param expected: The expected value to match with this assertion. :param save: An optional save id to create for matched values. :param splits: Optional text splitting configuration for matched values. :param case_sensitive: Controls case sensitivity during matches. :raises: TypeError """ self.expected = expected self.case_sensitive = case_sensitive super().__init__(name, "(.*)", save, splits)
[Doku] class Parameters(assertion_regex_base.AssertionRegexBase.Parameters): """Parameter validation for this operation.""" expected = {"type": str} case_sensitive = {"type": bool}
[Doku] def apply( self, state: "AssertionState", ) -> None: """Apply the AssertEqual assertion logic.""" data = state.next() match = re.match(self.regex, data) equality_check: bool = False if match and not self.case_sensitive: equality_check = match.group(1).lower() == self.expected.lower() if match and self.case_sensitive: equality_check = match.group(1) == self.expected if not match or not equality_check: state.fail(self.expected) else: state.save(match)