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
from __future__ import annotations
from unittest.mock import MagicMock
import pytest
from pygittools.tui import draw
@pytest.fixture
def draw_mocks(monkeypatch: pytest.MonkeyPatch) -> dict[str, MagicMock]:
mocks = {
"move": MagicMock(),
"clrtoeol": MagicMock(),
"mvaddstr": MagicMock(),
}
for name, mock in mocks.items():
monkeypatch.setattr(draw, name, mock)
return mocks
def test_clear_row_moves_and_clears(draw_mocks: dict[str, MagicMock]) -> None:
draw.clear_row(3)
draw_mocks["move"].assert_called_once_with(3, 0)
draw_mocks["clrtoeol"].assert_called_once()
def test_draw_text_empty_returns_col(draw_mocks: dict[str, MagicMock]) -> None:
assert draw.draw_text(0, 5, "", 20) == 5
draw_mocks["mvaddstr"].assert_not_called()
def test_draw_text_past_width_returns_col(draw_mocks: dict[str, MagicMock]) -> None:
assert draw.draw_text(0, 20, "hello", 20) == 20
def test_draw_text_without_attr(draw_mocks: dict[str, MagicMock]) -> None:
end = draw.draw_text(0, 0, "hi", 10)
assert end == 2
draw_mocks["mvaddstr"].assert_called_once_with(0, 0, "hi")
def test_draw_text_with_attr(draw_mocks: dict[str, MagicMock]) -> None:
draw.draw_text(0, 0, "hi", 10, attr=1)
draw_mocks["mvaddstr"].assert_called_once_with(0, 0, "hi", 1)
def test_draw_text_clips_to_width(draw_mocks: dict[str, MagicMock]) -> None:
draw.draw_text(0, 0, "hello world", 6)
draw_mocks["mvaddstr"].assert_called_once_with(0, 0, "hello")
def test_draw_line_clears_when_col_zero(draw_mocks: dict[str, MagicMock]) -> None:
draw.draw_line(2, 0, "line", 20, attr=0)
draw_mocks["move"].assert_called()
draw_mocks["mvaddstr"].assert_called_once()