def pos2xy(self) -> tuple[int, int]:
"""Return the x, y coordinates of position 'pos'."""
# this *is* incomprehensible, yes.
- y = 0
+ p, y = 0, 0
+ l2: list[int] = []
pos = self.pos
assert 0 <= pos <= len(self.buffer)
- if pos == len(self.buffer):
+ if pos == len(self.buffer) and len(self.screeninfo) > 0:
y = len(self.screeninfo) - 1
p, l2 = self.screeninfo[y]
return p + sum(l2) + l2.count(0), y
from unittest import TestCase
from unittest.mock import MagicMock
-from .support import handle_all_events, handle_events_narrow_console, code_to_events, prepare_reader
+from .support import handle_all_events, handle_events_narrow_console, code_to_events, prepare_reader, prepare_console
from _pyrepl.console import Event
from _pyrepl.reader import Reader
reader, _ = handle_all_events(events, prepare_reader=completing_reader)
self.assert_screen_equals(reader, f"{code}a")
+
+ def test_pos2xy_with_no_columns(self):
+ console = prepare_console([])
+ reader = prepare_reader(console)
+ # Simulate a resize to 0 columns
+ reader.screeninfo = []
+ self.assertEqual(reader.pos2xy(), (0, 0))