772d567301
- test_fuzzy_anchor.py: 6 tests for fuzzy slice resolution - test_history_manager.py: 8 tests for undo/redo and UISnapshot roundtrip
60 lines
2.3 KiB
Python
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
|