|
|
import pytest
|
|
|
from IPython.terminal.shortcuts import _apply_autosuggest
|
|
|
|
|
|
from unittest.mock import Mock
|
|
|
|
|
|
|
|
|
def make_event(text, cursor, suggestion):
|
|
|
event = Mock()
|
|
|
event.current_buffer = Mock()
|
|
|
event.current_buffer.suggestion = Mock()
|
|
|
event.current_buffer.cursor_position = cursor
|
|
|
event.current_buffer.suggestion.text = suggestion
|
|
|
event.current_buffer.document = Mock()
|
|
|
event.current_buffer.document.get_end_of_line_position = Mock(return_value=0)
|
|
|
event.current_buffer.document.text = text
|
|
|
event.current_buffer.document.cursor_position = cursor
|
|
|
return event
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
|
"text, cursor, suggestion, called",
|
|
|
[
|
|
|
("123456", 6, "123456789", True),
|
|
|
("123456", 3, "123456789", False),
|
|
|
("123456 \n789", 6, "123456789", True),
|
|
|
],
|
|
|
)
|
|
|
def test_autosuggest_at_EOL(text, cursor, suggestion, called):
|
|
|
"""
|
|
|
test that autosuggest is only applied at end of line.
|
|
|
"""
|
|
|
|
|
|
event = make_event(text, cursor, suggestion)
|
|
|
event.current_buffer.insert_text = Mock()
|
|
|
_apply_autosuggest(event)
|
|
|
if called:
|
|
|
event.current_buffer.insert_text.assert_called()
|
|
|
else:
|
|
|
event.current_buffer.insert_text.assert_not_called()
|
|
|
# event.current_buffer.document.get_end_of_line_position.assert_called()
|
|
|
|