from pathlib import Path
from test_wiring import launch
def make_big_root(tmp: Path) -> Path:
root = tmp / "code"
repo = root / "big"
repo.mkdir(parents=True)
for i in range(1, 13):
text = f"// file {i}\nlet marker = needle;\n"
if i == 9:
text += "needle uniq9 marker\n"
(repo / f"f{i:02}.rs").write_text(text)
return root
def test_preview_cursor_anchors_yank(tmp_path: Path) -> None:
clip = tmp_path / "clip.txt"
root = tmp_path / "code"
(root / "alpha").mkdir(parents=True)
(root / "alpha" / "main.rs").write_text(
"fn main() {\n"
" let view = render();\n"
" println!(\"{view}\");\n"
"}\n"
"\n"
"fn render() -> &'static str {\n"
" \"rootle\"\n"
"}\n"
)
tui = launch(tmp_path, root, {"ROOTLE_CLIPBOARD": str(clip)})
try:
tui.type_query("alpha")
tui.key("ENTER")
tui.expect("local/alpha")
tui.key("ENTER")
tui.expect("main.rs") screen = tui.expect("fn main() {")
assert "1/8" in screen tui.send("J")
tui.send("J")
screen = tui.screen()
assert "3/8" in screen, screen
tui.send(" ")
tui.send("y")
tui.expect("yanked")
assert clip.read_text().endswith("#L3"), clip.read_text()
finally:
tui.stop()
def test_lazy_hit_context_and_cancel_tolerance(tmp_path: Path) -> None:
root = make_big_root(tmp_path)
tui = launch(tmp_path, root)
try:
tui.type_query("big")
tui.key("ENTER")
tui.expect("local/big")
tui.key("ENTER")
tui.expect("f01.rs")
tui.send(" ")
tui.send("g")
tui.type_query("needle")
tui.key("ENTER")
screen = tui.expect("results — 12")
assert "uniq9" not in screen
for _ in range(8):
tui.send("j")
tui.expect("uniq9")
tui.key("TAB") for _ in range(6):
tui.key("BACKSPACE")
tui.type_query("marker")
tui.key("ENTER")
tui.expect("results — 12") finally:
tui.stop()