GitHub - asottile/re-assert: show where your regex match assertion failed! (original) (raw)

build status pre-commit.ci status

re-assert

show where your regex match assertion failed!

installation

usage

re-assert provides a helper class to make assertions of regexes simpler.

re_assert.Matches(pattern: str, *args, **kwargs)

construct a Matches object.

note: under the hood, re-assert uses the regex library for matching, any *args / **kwargs that regex.compile supports will work. in general, the regex library is 100% compatible with the re library (and will even accept its flags, etc.)

re_assert.Matches.from_pattern(pattern: Pattern[str]) -> Matches

construct a Matches object from an already-compiled regex.

this is useful (for instance) if you're testing an existing compiled regex.

import re reg = re.compile('foo') Matches.from_pattern(reg) == 'fork' False Matches.from_pattern(reg) == 'food' True

Matches.__eq__(other) (==)

the equality operator is overridden for use with assertion frameworks such as pytest

pat = Matches('foo') pat == 'bar' False pat == 'food' True

Matches.__repr__() (repr(...))

a side-effect of an equality failure changes the repr(...) of a Matchesobject. this allows for useful pytest assertion messages:

>       assert Matches('foo') == 'fork'
E       AssertionError: assert Matches('foo'...ork\n    #    ^ == 'fork'
E         -Matches('foo')\n
E         -    # regex failed to match at:\n
E         -    #\n
E         -    #> fork\n
E         -    #    ^
E         +'fork'

Matches.assert_matches(s: str)

if you're using some other test framework, this method is useful for producing a readable traceback

Matches('foo').assert_matches('food') Matches('foo').assert_matches('fork') Traceback (most recent call last): File "", line 1, in File "/home/asottile/workspace/re-assert/re_assert.py", line 63, in assert_matches assert self == s, self._fail AssertionError: regex failed to match at:

fork ^