1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
import sys
from unittest.mock import call, create_autospec
import pytest
try:
from rich._win32_console import LegacyWindowsTerm, WindowsCoordinates
from rich._windows_renderer import legacy_windows_render
except:
# These modules can only be imported on Windows
pass
from rich.segment import ControlType, Segment
from rich.style import Style
pytestmark = pytest.mark.skipif(sys.platform != "win32", reason="windows only")
@pytest.fixture
def legacy_term_mock():
return create_autospec(LegacyWindowsTerm)
def test_text_only(legacy_term_mock):
text = "Hello, world!"
buffer = [Segment(text)]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.write_text.assert_called_once_with(text)
def test_text_multiple_segments(legacy_term_mock):
buffer = [Segment("Hello, "), Segment("world!")]
legacy_windows_render(buffer, legacy_term_mock)
assert legacy_term_mock.write_text.call_args_list == [
call("Hello, "),
call("world!"),
]
def test_text_with_style(legacy_term_mock):
text = "Hello, world!"
style = Style.parse("black on red")
buffer = [Segment(text, style)]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.write_styled.assert_called_once_with(text, style)
def test_control_cursor_move_to(legacy_term_mock):
buffer = [Segment("", None, [(ControlType.CURSOR_MOVE_TO, 20, 30)])]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.move_cursor_to.assert_called_once_with(
WindowsCoordinates(row=29, col=19)
)
def test_control_carriage_return(legacy_term_mock):
buffer = [Segment("", None, [(ControlType.CARRIAGE_RETURN,)])]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.write_text.assert_called_once_with("\r")
def test_control_home(legacy_term_mock):
buffer = [Segment("", None, [(ControlType.HOME,)])]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.move_cursor_to.assert_called_once_with(WindowsCoordinates(0, 0))
@pytest.mark.parametrize(
"control_type, method_name",
[
(ControlType.CURSOR_UP, "move_cursor_up"),
(ControlType.CURSOR_DOWN, "move_cursor_down"),
(ControlType.CURSOR_FORWARD, "move_cursor_forward"),
(ControlType.CURSOR_BACKWARD, "move_cursor_backward"),
],
)
def test_control_cursor_single_cell_movement(
legacy_term_mock, control_type, method_name
):
buffer = [Segment("", None, [(control_type,)])]
legacy_windows_render(buffer, legacy_term_mock)
getattr(legacy_term_mock, method_name).assert_called_once_with()
@pytest.mark.parametrize(
"erase_mode, method_name",
[
(0, "erase_end_of_line"),
(1, "erase_start_of_line"),
(2, "erase_line"),
],
)
def test_control_erase_line(legacy_term_mock, erase_mode, method_name):
buffer = [Segment("", None, [(ControlType.ERASE_IN_LINE, erase_mode)])]
legacy_windows_render(buffer, legacy_term_mock)
getattr(legacy_term_mock, method_name).assert_called_once_with()
def test_control_show_cursor(legacy_term_mock):
buffer = [Segment("", None, [(ControlType.SHOW_CURSOR,)])]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.show_cursor.assert_called_once_with()
def test_control_hide_cursor(legacy_term_mock):
buffer = [Segment("", None, [(ControlType.HIDE_CURSOR,)])]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.hide_cursor.assert_called_once_with()
def test_control_cursor_move_to_column(legacy_term_mock):
buffer = [Segment("", None, [(ControlType.CURSOR_MOVE_TO_COLUMN, 3)])]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.move_cursor_to_column.assert_called_once_with(2)
def test_control_set_terminal_window_title(legacy_term_mock):
buffer = [Segment("", None, [(ControlType.SET_WINDOW_TITLE, "Hello, world!")])]
legacy_windows_render(buffer, legacy_term_mock)
legacy_term_mock.set_title.assert_called_once_with("Hello, world!")
|