From 90502d21d38425c1437d4d09ff49c88ad4a7cb10 Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Fri, 19 Jun 2026 14:53:49 +0200 Subject: [PATCH] test: cover char-span line-range helper --- .../tests/unit/utils/test_text_spans.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 surfsense_backend/tests/unit/utils/test_text_spans.py diff --git a/surfsense_backend/tests/unit/utils/test_text_spans.py b/surfsense_backend/tests/unit/utils/test_text_spans.py new file mode 100644 index 000000000..d70418ea5 --- /dev/null +++ b/surfsense_backend/tests/unit/utils/test_text_spans.py @@ -0,0 +1,39 @@ +"""Unit tests for char-span -> line-range conversion.""" + +from __future__ import annotations + +import pytest + +from app.utils.text_spans import char_span_to_line_range + +pytestmark = pytest.mark.unit + +_TEXT = "line1\nline2\nline3" + + +def test_single_line_span() -> None: + start = _TEXT.index("line2") + assert char_span_to_line_range(_TEXT, start, start + len("line2")) == (2, 2) + + +def test_first_line_span() -> None: + assert char_span_to_line_range(_TEXT, 0, len("line1")) == (1, 1) + + +def test_last_line_span() -> None: + start = _TEXT.index("line3") + assert char_span_to_line_range(_TEXT, start, len(_TEXT)) == (3, 3) + + +def test_multi_line_span() -> None: + # "line1\nline2" spans lines 1-2. + assert char_span_to_line_range(_TEXT, 0, _TEXT.index("line2") + 5) == (1, 2) + + +def test_empty_span_resolves_to_its_line() -> None: + start = _TEXT.index("line2") + assert char_span_to_line_range(_TEXT, start, start) == (2, 2) + + +def test_offsets_clamped_to_text_bounds() -> None: + assert char_span_to_line_range(_TEXT, -5, 10_000) == (1, 3)