Files
manual_slop/tests/test_fuzzy_anchor.py
T
ed 772d567301 test(coverage): add FuzzyAnchor and HistoryManager unit tests
- test_fuzzy_anchor.py: 6 tests for fuzzy slice resolution
- test_history_manager.py: 8 tests for undo/redo and UISnapshot roundtrip
2026-05-10 15:42:54 -04:00

60 lines
2.3 KiB
Python

import pytest
from src.fuzzy_anchor import FuzzyAnchor
class TestFuzzyAnchor:
def test_create_slice_basic(self):
text = "line0\nline1\nline2\nline3\nline4\n"
result = FuzzyAnchor.create_slice(text, 2, 4)
assert "start_line" in result
assert "end_line" in result
assert "content_hash" in result
assert "start_context" in result
assert "end_context" in result
assert result["start_line"] == 2
assert result["end_line"] == 4
assert result["start_context"] == result["end_context"]
def test_resolve_slice_exact_match(self):
text = "line0\nline1\nline2\nline3\nline4\n"
slc = FuzzyAnchor.create_slice(text, 2, 4)
result = FuzzyAnchor.resolve_slice(text, slc)
assert result is not None
start, end = result
assert start == 2
assert end == 4
def test_resolve_slice_line_inserted_before(self):
original = "line0\nline1\nline2\nline3\nline4\n"
modified = "NEW\nline0\nline1\nline2\nline3\nline4\n"
slc = FuzzyAnchor.create_slice(original, 2, 4)
result = FuzzyAnchor.resolve_slice(modified, slc)
assert result is not None
start, end = result
assert start == 3
assert end == 5
def test_resolve_slice_line_deleted_before_returns_none(self):
original = "line0\nline1\nline2\nline3\nline4\n"
modified = "line0\nline2\nline3\nline4\n"
slc = FuzzyAnchor.create_slice(original, 2, 4)
result = FuzzyAnchor.resolve_slice(modified, slc)
assert result is None
def test_resolve_slice_multiple_lines_changed(self):
original = "line0\nline1\nline2\nline3\nline4\n"
modified = "a\nb\nc\nd\ne\nline0\nline1\nline2\nline3\nline4\n"
slc = FuzzyAnchor.create_slice(original, 1, 2)
result = FuzzyAnchor.resolve_slice(modified, slc)
assert result is not None
start, end = result
assert start == 6
assert end == 7
def test_resolve_slice_anchor_mismatch_returns_none(self):
original = "alpha\nbeta\ngamma\ndelta\nepsilon\n"
modified = "foo\nbar\nbaz\ndelta\nepsilon\n"
slc = FuzzyAnchor.create_slice(original, 2, 3)
result = FuzzyAnchor.resolve_slice(modified, slc)
assert result is None