|
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 |
| 18 | +from .support import handle_all_events, code_to_events, more_lines, prepare_reader |
19 | 19 |
|
20 | 20 | try: |
21 | 21 | from _pyrepl.console import Event |
@@ -248,20 +248,39 @@ 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 | | - events = itertools.chain( |
252 | | - code_to_events("1"), |
253 | | - [Event(evt="key", data="left", raw=bytearray(b"\x1bOD"))], |
254 | | - code_to_events("2"), |
| 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 | + ) |
255 | 258 | ) |
256 | | - _, con = handle_events_unix_console(events) |
257 | | - _os_write.assert_any_call(ANY, b"1") |
| 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() |
258 | 271 | _os_write.assert_any_call(ANY, TERM_CAPABILITIES["cub"] + b":1") |
259 | | - _os_write.assert_any_call(ANY, b"2") |
260 | | - self.assertIsNotNone(con.ich1) |
261 | | - self.assertEqual( |
262 | | - _os_write.mock_calls.count(call(ANY, con.ich1)), |
263 | | - 1, |
264 | | - ) |
| 272 | + |
| 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",)) |
265 | 284 | con.restore() |
266 | 285 |
|
267 | 286 | def test_multiline_function_move_up_short_terminal(self, _os_write): |
|
0 commit comments