|
15 | 15 | from unittest import TestCase |
16 | 16 | from unittest.mock import MagicMock, call, patch, ANY, Mock |
17 | 17 |
|
18 | | -from .support import handle_all_events, code_to_events, more_lines, prepare_reader |
| 18 | +from .support import handle_all_events, code_to_events, more_lines |
19 | 19 |
|
20 | 20 | try: |
21 | 21 | from _pyrepl.console import Event |
@@ -248,39 +248,36 @@ def test_cursor_up_down(self, _os_write): |
248 | 248 | con.restore() |
249 | 249 |
|
250 | 250 | def test_cursor_back_write(self, _os_write): |
251 | | - insert_char = b"<insert-char>" |
252 | | - events = iter( |
253 | | - itertools.chain( |
254 | | - code_to_events("1"), |
255 | | - [Event(evt="key", data="left", raw=bytearray(b"\x1bOD"))], |
256 | | - code_to_events("2"), |
257 | | - ) |
| 251 | + events = itertools.chain( |
| 252 | + code_to_events("1"), |
| 253 | + [Event(evt="key", data="left", raw=bytearray(b"\x1bOD"))], |
| 254 | + code_to_events("2"), |
258 | 255 | ) |
259 | | - con = unix_console(events, ich1=insert_char) |
260 | | - reader = prepare_reader(con) |
261 | | - |
262 | | - _os_write.reset_mock() |
263 | | - reader.handle1() |
264 | | - append_writes = [write.args[1] for write in _os_write.call_args_list] |
265 | | - self.assertIn(b"1", append_writes) |
266 | | - self.assertFalse(any(insert_char in output for output in append_writes)) |
267 | | - self.assertEqual(reader.rendered_screen.screen_lines, ("1",)) |
268 | | - |
269 | | - _os_write.reset_mock() |
270 | | - reader.handle1() |
| 256 | + _, con = handle_events_unix_console(events) |
| 257 | + _os_write.assert_any_call(ANY, b"1") |
271 | 258 | _os_write.assert_any_call(ANY, TERM_CAPABILITIES["cub"] + b":1") |
| 259 | + _os_write.assert_any_call(ANY, b"2") |
| 260 | + con.restore() |
272 | 261 |
|
273 | | - _os_write.reset_mock() |
274 | | - reader.handle1() |
275 | | - insertion_writes = [write.args[1] for write in _os_write.call_args_list] |
276 | | - insert_writes = [ |
277 | | - index |
278 | | - for index, output in enumerate(insertion_writes) |
279 | | - if insert_char in output |
280 | | - ] |
281 | | - self.assertEqual(len(insert_writes), 1) |
282 | | - self.assertEqual(insertion_writes[insert_writes[0] + 1], b"2") |
283 | | - self.assertEqual(reader.rendered_screen.screen_lines, ("21",)) |
| 262 | + def test_insert_char_only_for_midline_insert(self, _os_write): |
| 263 | + insert_char = b"<insert-char>" |
| 264 | + events = itertools.chain( |
| 265 | + code_to_events("1"), |
| 266 | + [Event(evt="key", data="left", raw=bytearray(b"\x1bOD"))], |
| 267 | + code_to_events("2"), |
| 268 | + ) |
| 269 | + _, con = handle_all_events( |
| 270 | + events, |
| 271 | + prepare_console=partial(unix_console, ich1=insert_char), |
| 272 | + ) |
| 273 | + relevant_writes = [] |
| 274 | + for write in _os_write.call_args_list: |
| 275 | + output = write.args[1] |
| 276 | + if insert_char in output: |
| 277 | + relevant_writes.append(insert_char) |
| 278 | + elif output in {b"1", b"2"}: |
| 279 | + relevant_writes.append(output) |
| 280 | + self.assertEqual(relevant_writes, [b"1", insert_char, b"2"]) |
284 | 281 | con.restore() |
285 | 282 |
|
286 | 283 | def test_multiline_function_move_up_short_terminal(self, _os_write): |
|
0 commit comments