def test_adjacent_capture_sequences(): grepper = Grepper("the %{0S1} %{1} ran away") match = grepper.match_line("the big brown fox ran away") assert bool(match) assert match.token(0) == "big brown" assert match.token(1) == "fox" assert match.re == re.compile( "^the\\ (?P<token_0>(?:\\S*\\s\\S*){1}\\S*)\\ (?P<token_1>.*?)\\ ran\\ away$" ) assert match.pattern == "the %{0S1} %{1} ran away"
def grep(pattern: str, flags: str, files: List[str]) -> str: grepper = Grepper(pattern, flags, files) return grepper.run()
def test_matches_multiple_patterns(line, expected): grepper = Grepper("foo", "baz") assert bool(grepper.match_line(line)) == expected
def test_raises_on_duplicate_tokens(): with pytest.raises(ValueError): Grepper("foo %{0} is a %{0}")
def test_patterns(pattern, test_string, expected): grepper = Grepper(pattern) assert bool(grepper.match_line(test_string)) == expected
def test_raises_when_no_patterns_provided(): with pytest.raises(ValueError): Grepper()
def test_map_token_capture_to_re(token_capture, regex): mapped = Grepper.map_pattern_to_re(re.escape(token_capture)) assert mapped == regex