From e6f7b668ce22b21a5c74beb52591b821f24a6d1c Mon Sep 17 00:00:00 2001 From: natsuoto <279971144+natsuoto@users.noreply.github.com> Date: Wed, 15 Jul 2026 14:12:59 +0530 Subject: perf(builder): lazy source_line and cached co_positions/abspath cut chain-step allocation by ~4.6x --- tests/errors/context.test.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'tests/errors/context.test.py') diff --git a/tests/errors/context.test.py b/tests/errors/context.test.py index 6595e92..60e7add 100644 --- a/tests/errors/context.test.py +++ b/tests/errors/context.test.py @@ -1,5 +1,6 @@ """Tests for the caller-source-location capture helpers in :mod:`edify.errors.context`.""" +import linecache from unittest import mock from edify.errors.context import CallerContext, capture_caller_context @@ -10,7 +11,21 @@ def test_capture_caller_context_returns_none_when_every_frame_is_inside_edify(): assert capture_caller_context() is None -def test_caller_context_dataclass_is_frozen_and_holds_all_five_fields(): - context = CallerContext(filename="a.py", lineno=1, colno=1, end_colno=5, source_line="x = 1") +def test_caller_context_dataclass_is_frozen_and_holds_position_fields(): + context = CallerContext(filename="a.py", lineno=1, colno=1, end_colno=5) assert context.filename == "a.py" + assert context.lineno == 1 + assert context.colno == 1 + assert context.end_colno == 5 + + +def test_caller_context_source_line_property_reads_lazily_via_linecache(): + filename = "/tmp/lazy_source_test.py" + linecache.cache[filename] = (5, None, ["x = 1\n"], filename) + context = CallerContext(filename=filename, lineno=1, colno=1, end_colno=5) assert context.source_line == "x = 1" + + +def test_caller_context_source_line_returns_empty_string_when_line_is_unreadable(): + context = CallerContext(filename="/tmp/no_such_file.py", lineno=999, colno=1, end_colno=1) + assert context.source_line == "" -- cgit v1.2.3