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
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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
|
||||
Reference in New Issue
Block a user