test: Add method to easily set last_visited attributes

This commit is contained in:
Arvin Verain 2025-03-28 21:35:01 +08:00
parent 07f30122e6
commit 6d75f7cff4
No known key found for this signature in database
GPG key ID: EC2BB2E0EC3CE2FA
3 changed files with 25 additions and 20 deletions

View file

@ -1302,6 +1302,9 @@ class Screen:
def scroll_to_prompt(self, num_of_prompts: int = -1) -> bool:
pass
def set_last_visited_prompt(self, visual_y: int = 0) -> bool:
pass
def reverse_scroll(self, amt: int, fill_from_scrollback: bool = False) -> bool:
pass

View file

@ -4702,6 +4702,13 @@ scroll_to_prompt(Screen *self, PyObject *args) {
Py_RETURN_FALSE;
}
static PyObject*
set_last_visited_prompt(Screen *self, PyObject *args) {
index_type visual_y = 0;
if (!PyArg_ParseTuple(args, "|I", &visual_y)) return NULL;
if (screen_set_last_visited_prompt(self, visual_y)) { Py_RETURN_TRUE; }
Py_RETURN_FALSE;
}
bool
screen_is_selection_dirty(Screen *self) {
@ -5550,6 +5557,7 @@ static PyMethodDef methods[] = {
MND(is_rectangle_select, METH_NOARGS)
MND(scroll, METH_VARARGS)
MND(scroll_to_prompt, METH_VARARGS)
MND(set_last_visited_prompt, METH_VARARGS)
MND(send_escape_code_to_child, METH_VARARGS)
MND(pause_rendering, METH_VARARGS)
MND(hyperlink_at, METH_VARARGS)

View file

@ -1294,41 +1294,35 @@ def lvco():
self.ae(lvco(), '0x\n1x')
# test: obscure prompt
s.scroll(2, False)
s.set_last_visited_prompt()
self.ae(lvco(), '0x\n1x')
# test: prompts without output
s.scroll(s.scrolled_by, False)
s.resize(5, s.columns + 5)
draw_prompt('4')
# resizing resets last visited, rely on scroll_to_prompt
s.resize(2, s.columns + 4)
s.scroll_to_prompt()
s.scroll_to_prompt(1)
self.ae(str(s.visual_line(0)), '$ 4')
s.set_last_visited_prompt(2)
self.ae(lvco(), '')
s.resize(5, s.columns)
draw_prompt('wrapcmd')
s.scroll_to_prompt(1)
self.ae(lvco(), '')
draw_output(1, 'wrapout'), draw_output(1, 'y', False)
s.set_last_visited_prompt(0)
self.ae(lvco(), '0wrapout\n0y\n')
# wrap long prompt with long output
s.resize(5, s.columns - 4)
self.ae(str(s.visual_line(0)), 'pcmd')
s.resize(5, s.columns - 5)
# test: set last visited to previous empty prompt
s.scroll_to_prompt(-2)
self.ae(str(s.visual_line(0)), '$ 4')
self.ae(lvco(), '0wrapout\n0y\n')
mark_prompt(), s.draw('$ end')
draw_prompt('end')
s.scroll_to_prompt(-1)
self.ae(lvco(), '0wrapout\n0y')
s.scroll_to_prompt(1)
self.ae(lvco(), '0wrapout\n0y')
# test: set last visited to continued line of long prompt
s.scroll_to_prompt(2)
self.ae(str(s.visual_line(0)), 'pcmd')
self.ae(lvco(), '0wrapout\n0y')
s.scroll_to_prompt()
s.set_last_visited_prompt(1)
self.ae(lvco(), '0wrapout\n0y')
# test: set last visited to continued line of output
s.carriage_return(), s.index()
draw_output(1, 'z')
s.scroll_to_prompt(1)
s.set_last_visited_prompt(3)
self.ae(lvco(), '0wrapout\n0y')
# test: losing markers past scrollback
@ -1339,16 +1333,16 @@ def lvco():
draw_output(1, 'x')
# remove prompt start above, set last visited to within prompt
s.clear_scrollback()
s.scroll_to_prompt(1)
s.set_last_visited_prompt(0)
self.ae(lvco(), '0vvvvvvvvvv\n0w')
# remove output start above, set last visited to within output
draw_output(3, 'y', False), draw_output(1, 'z', False)
s.clear_scrollback()
s.scroll_to_prompt(1)
s.set_last_visited_prompt(0)
self.ae(lvco(), 'vvvvvv\n0w')
draw_output(1, 'end', False)
s.clear_scrollback()
s.scroll_to_prompt(1)
s.set_last_visited_prompt(0)
self.ae(lvco(), 'v\n0w')
# clear last visited line without setting new one
draw_output(1, 'end', False)