Skip to content

Commit 860bb78

Browse files
committed
Add more tests for text entry box controls
1 parent 4442f60 commit 860bb78

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

pygame_gui/elements/ui_text_entry_box.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ def _jump_edit_pos_to_start_of_word(self, should_select=False):
499499
text_to_search = self.html_text[max(0, self.edit_position-1)::-1]
500500
match_result = re.search(r'\b\w+\b', text_to_search)
501501
if match_result is not None:
502-
next_pos = self.edit_position - match_result.regs[-1][1]
502+
next_pos = max(self.edit_position - match_result.regs[-1][1], 0)
503503
else:
504504
next_pos = self.edit_position
505505
except ValueError:
@@ -515,6 +515,7 @@ def _jump_edit_pos_to_start_of_word(self, should_select=False):
515515
# extend left
516516
self.select_range = [next_pos, self.select_range[1]]
517517
else:
518+
next_pos = self.select_range[0]
518519
self.select_range = [0, 0]
519520
else:
520521
if should_select:
@@ -528,7 +529,7 @@ def _jump_edit_pos_to_end_of_word(self, should_select=False):
528529
try:
529530
match_result = re.search(r'\b\w+\b', self.html_text[self.edit_position:])
530531
if match_result is not None:
531-
next_pos = self.edit_position + match_result.regs[0][1]
532+
next_pos = min(self.edit_position + match_result.regs[0][1], len(self.html_text))
532533
else:
533534
next_pos = self.edit_position
534535
except ValueError:

tests/test_elements/test_ui_text_entry_box.py

+63
Original file line numberDiff line numberDiff line change
@@ -1228,6 +1228,30 @@ def test_process_event_text_right_actually_move(self, _init_pygame: None,
12281228
assert text_entry.select_range == [0, 3]
12291229
assert text_entry.edit_position == 3
12301230

1231+
text_entry.set_text('dan dan')
1232+
text_entry.edit_position = 0
1233+
text_entry.select_range = [0, 0]
1234+
text_entry.focus()
1235+
1236+
text_entry.process_event(pygame.event.Event(pygame.KEYDOWN, {'key': pygame.K_RIGHT,
1237+
'mod': pygame.KMOD_CTRL | pygame.KMOD_SHIFT}))
1238+
1239+
processed_key_event = text_entry.process_event(pygame.event.Event(pygame.KEYDOWN,
1240+
{'key': pygame.K_RIGHT,
1241+
'mod': pygame.KMOD_CTRL | pygame.KMOD_SHIFT}))
1242+
1243+
assert processed_key_event
1244+
assert text_entry.select_range == [0, 7]
1245+
assert text_entry.edit_position == 7
1246+
1247+
processed_key_event = text_entry.process_event(pygame.event.Event(pygame.KEYDOWN,
1248+
{'key': pygame.K_RIGHT,
1249+
'mod': pygame.KMOD_CTRL}))
1250+
1251+
assert processed_key_event
1252+
assert text_entry.select_range == [0, 0]
1253+
assert text_entry.edit_position == 7
1254+
12311255
def test_process_event_text_left(self, _init_pygame: None, default_ui_manager: UIManager,
12321256
_display_surface_return_none: None):
12331257
text_entry = UITextEntryBox(relative_rect=pygame.Rect(100, 100, 200, 30),
@@ -1294,6 +1318,30 @@ def test_process_event_text_left(self, _init_pygame: None, default_ui_manager: U
12941318
assert text_entry.select_range == [0, 3]
12951319
assert text_entry.edit_position == 0
12961320

1321+
text_entry.set_text('dan dan')
1322+
text_entry.edit_position = 7
1323+
text_entry.select_range = [0, 0]
1324+
text_entry.focus()
1325+
1326+
text_entry.process_event(pygame.event.Event(pygame.KEYDOWN, {'key': pygame.K_LEFT,
1327+
'mod': pygame.KMOD_CTRL | pygame.KMOD_SHIFT}))
1328+
1329+
processed_key_event = text_entry.process_event(pygame.event.Event(pygame.KEYDOWN,
1330+
{'key': pygame.K_LEFT,
1331+
'mod': pygame.KMOD_CTRL | pygame.KMOD_SHIFT}))
1332+
1333+
assert processed_key_event
1334+
assert text_entry.select_range == [0, 7]
1335+
assert text_entry.edit_position == 0
1336+
1337+
processed_key_event = text_entry.process_event(pygame.event.Event(pygame.KEYDOWN,
1338+
{'key': pygame.K_LEFT,
1339+
'mod': pygame.KMOD_CTRL}))
1340+
1341+
assert processed_key_event
1342+
assert text_entry.select_range == [0, 0]
1343+
assert text_entry.edit_position == 0
1344+
12971345
def test_process_event_text_down(self, _init_pygame: None, default_ui_manager: UIManager,
12981346
_display_surface_return_none: None):
12991347
text_entry = UITextEntryBox(relative_rect=pygame.Rect(100, 100, 200, 30),
@@ -1323,6 +1371,13 @@ def test_process_event_text_down(self, _init_pygame: None, default_ui_manager: U
13231371
assert text_entry.select_range == [3, 10]
13241372
assert text_entry.edit_position == 10
13251373

1374+
processed_key_event = text_entry.process_event(pygame.event.Event(pygame.KEYDOWN,
1375+
{'key': pygame.K_DOWN,
1376+
'mod': 0}))
1377+
assert text_entry.select_range == [0, 0]
1378+
assert processed_key_event
1379+
assert text_entry.edit_position == 10
1380+
13261381
def test_process_event_text_up(self, _init_pygame: None, default_ui_manager: UIManager,
13271382
_display_surface_return_none: None):
13281383
text_entry = UITextEntryBox(relative_rect=pygame.Rect(100, 100, 200, 30),
@@ -1352,6 +1407,14 @@ def test_process_event_text_up(self, _init_pygame: None, default_ui_manager: UIM
13521407
assert text_entry.select_range == [3, 10]
13531408
assert text_entry.edit_position == 3
13541409

1410+
processed_key_event = text_entry.process_event(pygame.event.Event(pygame.KEYDOWN,
1411+
{'key': pygame.K_UP,
1412+
'mod': 0}))
1413+
1414+
assert processed_key_event
1415+
assert text_entry.select_range == [0, 0]
1416+
assert text_entry.edit_position == 3
1417+
13551418
def test_process_event_home(self, _init_pygame: None, default_ui_manager: UIManager,
13561419
_display_surface_return_none: None):
13571420
text_entry = UITextEntryBox(relative_rect=pygame.Rect(100, 100, 200, 30),

0 commit comments

Comments
 (0)