summaryrefslogtreecommitdiff
path: root/test/test_ui/test_render.py
blob: 57bd05c9fac5221e665ee6d1cc1efac104c4b0e7 (plain)
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
142
143
144
145
import pytest
from contextlib import contextmanager
from datetime import datetime
from poezio.theming import get_theme
from poezio.ui.render import build_lines, Line, write_pre
from poezio.ui.consts import SHORT_FORMAT
from poezio.ui.types import BaseMessage, Message, StatusMessage, XMLLog

def test_simple_build_basemsg():
    msg = BaseMessage(txt='coucou')
    line = build_lines(msg, 100, True, 10)[0]
    assert (line.start_pos, line.end_pos) == (0, 6)


def test_simple_render_message():
    msg = Message(txt='coucou', nickname='toto')
    line = build_lines(msg, 100, True, 10)[0]
    assert (line.start_pos, line.end_pos) == (0, 8)


def test_simple_render_xmllog():
    msg = XMLLog(txt='coucou', incoming=True)
    line = build_lines(msg, 100, True, 10)[0]
    assert (line.start_pos, line.end_pos) == (0, 6)


def test_simple_render_separator():
    line = build_lines(None, 100, True, 10)[0]
    assert line is None


def test_simple_render_status():
    class Obj:
        name = 'toto'
    msg = StatusMessage("Coucou {name}", {'name': lambda: Obj.name})
    assert msg.txt == "Coucou toto"
    Obj.name = 'titi'
    build_lines(msg, 100, True, 10)[0]
    assert msg.txt == "Coucou titi"


class FakeBuffer:
    def __init__(self):
        self.text = ''

    @contextmanager
    def colored_text(self, *args, **kwargs):
        yield None

    def addstr(self, txt):
        self.text += txt

@pytest.fixture(scope='function')
def buffer():
    return FakeBuffer()

@pytest.fixture
def time():
    return datetime.strptime('2019-09-27 10:11:12', '%Y-%m-%d %H:%M:%S')

def test_write_pre_basemsg(buffer):
    str_time = '10:11:12'
    time = datetime.strptime(str_time, '%H:%M:%S')
    msg = BaseMessage(txt='coucou', time=time)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '10:11:12 '
    assert size == len(buffer.text)

def test_write_pre_message_simple(buffer, time):
    msg = Message(txt='coucou', nickname='toto', time=time)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '10:11:12 toto> '
    assert size == len(buffer.text)


def test_write_pre_message_simple_history(buffer, time):
    msg = Message(txt='coucou', nickname='toto', time=time, history=True)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '2019-09-27 10:11:12 toto> '
    assert size == len(buffer.text)


def test_write_pre_message_highlight(buffer, time):
    msg = Message(txt='coucou', nickname='toto', time=time, highlight=True)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '10:11:12 toto> '
    assert size == len(buffer.text)

def test_write_pre_message_no_timestamp(buffer):
    msg = Message(txt='coucou', nickname='toto')
    size = write_pre(msg, buffer, False, 10)
    assert buffer.text == 'toto> '
    assert size == len(buffer.text)


def test_write_pre_message_me(buffer, time):
    msg = Message(txt='/me coucou', nickname='toto', time=time)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '10:11:12 * toto '
    assert size == len(buffer.text)


def test_write_pre_message_revisions(buffer, time):
    msg = Message(txt='coucou', nickname='toto', time=time, revisions=5)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '10:11:12 toto5> '
    assert size == len(buffer.text)

def test_write_pre_message_revisions_me(buffer, time):
    msg = Message(txt='/me coucou', nickname='toto', time=time, revisions=5)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '10:11:12 * toto5 '
    assert size == len(buffer.text)


def test_write_pre_message_ack(buffer, time):
    ack = get_theme().CHAR_ACK_RECEIVED
    expected = '10:11:12 %s toto> ' % ack
    msg = Message(txt='coucou', nickname='toto', time=time, ack=1)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == expected
    assert size == len(buffer.text)


def test_write_pre_message_nack(buffer, time):
    nack = get_theme().CHAR_NACK
    expected = '10:11:12 %s toto> ' % nack
    msg = Message(txt='coucou', nickname='toto', time=time, ack=-1)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == expected
    assert size == len(buffer.text)


def test_write_pre_xmllog_in(buffer):
    msg = XMLLog(txt="coucou", incoming=True)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '%s IN  ' % msg.time.strftime('%H:%M:%S')
    assert size == len(buffer.text)


def test_write_pre_xmllog_out(buffer):
    msg = XMLLog(txt="coucou", incoming=False)
    size = write_pre(msg, buffer, True, 10)
    assert buffer.text == '%s OUT ' % msg.time.strftime('%H:%M:%S')
    assert size == len(buffer.text)