mdgrep/tests/test_cli.py

60 lines
1.8 KiB
Python
Raw Normal View History

import json
import pytest
from mdgrep.cli import main
@pytest.fixture
def docs(tmp_path):
(tmp_path / "a.md").write_text("# A\n\nRust is fast.\n\nGo is simple.\n", encoding="utf-8")
(tmp_path / "b.md").write_text("- rust crypto wallet\n- python typing\n", encoding="utf-8")
return tmp_path
def run(capsys, *args):
code = main([*args, "--color", "never"])
out, err = capsys.readouterr()
return code, out, err
def test_match_output_and_exit_code(capsys, docs):
code, out, _ = run(capsys, "rust -crypto", str(docs))
assert code == 0
assert f"{docs / 'a.md'}:3" in out
assert "Rust is fast." in out
assert "crypto" not in out
def test_no_match_exit_1(capsys, docs):
code, out, _ = run(capsys, "haskell", str(docs))
assert code == 1 and out == ""
def test_syntax_error_exit_2_with_caret(capsys, docs):
code, _, err = run(capsys, "(rust", str(docs))
assert code == 2
assert "Missing closing parenthesis" in err and "^" in err
def test_count_and_files(capsys, docs):
assert run(capsys, "rust OR python", str(docs))[0] == 0
_, out, _ = run(capsys, "rust OR python", str(docs), "--split", "list", "-c")
assert out.strip() == "3"
_, out, _ = run(capsys, "rust", str(docs), "-l")
assert out.split() == [str(docs / "a.md"), str(docs / "b.md")]
def test_json_output(capsys, docs):
code, out, _ = run(capsys, "/fa.t/", str(docs), "--json")
data = json.loads(out)
assert code == 0 and data["total_blocks"] == 1
block = data["results"][0]["block"]
assert {"t": "fast", "hit": True} in block["segments"]
assert "markdown" not in block["meta"]
def test_color_highlight(capsys, docs):
main(["rust", str(docs / "a.md"), "--color", "always"])
out = capsys.readouterr().out
assert "\033[1;31mRust\033[0m" in out