From 32beeca48018422499b9c0af55a5c5b1eaa67d75 Mon Sep 17 00:00:00 2001 From: mathieui Date: Sat, 28 Sep 2019 18:35:50 +0200 Subject: Add tests for the new modules --- test/test_ui/test_render.py | 124 +++++++++++++++++++++++++++++++++++++++++++ test/test_ui/test_types.py | 126 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 250 insertions(+) create mode 100644 test/test_ui/test_render.py create mode 100644 test/test_ui/test_types.py (limited to 'test/test_ui') diff --git a/test/test_ui/test_render.py b/test/test_ui/test_render.py new file mode 100644 index 00000000..ae32059e --- /dev/null +++ b/test/test_ui/test_render.py @@ -0,0 +1,124 @@ +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, 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 + +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) + + write_pre(msg, buffer, True, 10) + assert buffer.text == '10:11:12 ' + +def test_write_pre_message_simple(buffer, time): + msg = Message(txt='coucou', nickname='toto', time=time) + write_pre(msg, buffer, True, 10) + assert buffer.text == '10:11:12 toto> ' + + +def test_write_pre_message_simple_history(buffer, time): + msg = Message(txt='coucou', nickname='toto', time=time, history=True) + write_pre(msg, buffer, True, 10) + assert buffer.text == '2019-09-27 10:11:12 toto> ' + + +def test_write_pre_message_highlight(buffer, time): + msg = Message(txt='coucou', nickname='toto', time=time, highlight=True) + write_pre(msg, buffer, True, 10) + assert buffer.text == '10:11:12 toto> ' + +def test_write_pre_message_no_timestamp(buffer): + msg = Message(txt='coucou', nickname='toto') + write_pre(msg, buffer, False, 10) + assert buffer.text == 'toto> ' + + +def test_write_pre_message_me(buffer, time): + msg = Message(txt='/me coucou', nickname='toto', time=time) + write_pre(msg, buffer, True, 10) + assert buffer.text == '10:11:12 * toto ' + + +def test_write_pre_message_revisions(buffer, time): + msg = Message(txt='coucou', nickname='toto', time=time, revisions=5) + write_pre(msg, buffer, True, 10) + assert buffer.text == '10:11:12 toto5> ' + + +def test_write_pre_message_revisions_me(buffer, time): + msg = Message(txt='/me coucou', nickname='toto', time=time, revisions=5) + write_pre(msg, buffer, True, 10) + assert buffer.text == '10:11:12 * toto5 ' + + +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) + write_pre(msg, buffer, True, 10) + assert buffer.text == expected + + +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) + write_pre(msg, buffer, True, 10) + assert buffer.text == expected + + +def test_write_pre_xmllog_in(buffer): + msg = XMLLog(txt="coucou", incoming=True) + write_pre(msg, buffer, True, 10) + assert buffer.text == '%s IN ' % msg.time.strftime('%H:%M:%S') + + +def test_write_pre_xmllog_out(buffer): + msg = XMLLog(txt="coucou", incoming=False) + write_pre(msg, buffer, True, 10) + assert buffer.text == '%s OUT ' % msg.time.strftime('%H:%M:%S') diff --git a/test/test_ui/test_types.py b/test/test_ui/test_types.py new file mode 100644 index 00000000..e4c6c010 --- /dev/null +++ b/test/test_ui/test_types.py @@ -0,0 +1,126 @@ +import pytest +from datetime import datetime + +from poezio.ui.types import BaseMessage, Message, XMLLog + + +def test_create_message(): + now = datetime.now() + msg = Message( + txt="coucou", + nickname="toto", + ) + assert now < msg.time < datetime.now() + + msg = Message( + txt="coucou", + nickname="toto", + time=now, + ) + assert msg.time == now + + +def test_message_offset_simple(): + msg = Message( + txt="coucou", + nickname="toto", + ) + example = "10:10:10 toto> " + assert msg.compute_offset(True, 10) == len(example) + + msg = Message( + txt="coucou", + nickname="toto", + history=True, + ) + example = "2019:09:01 10:10:10 toto> " + assert msg.compute_offset(True, 10) == len(example) + +def test_message_offset_no_nick(): + msg = Message( + txt="coucou", + nickname="", + ) + example = "10:10:10 " + assert msg.compute_offset(True, 10) == len(example) + +def test_message_offset_ack(): + msg = Message( + txt="coucou", + nickname="toto", + ack=1, + ) + example = "10:10:10 V toto> " + assert msg.compute_offset(True, 10) == len(example) + + msg = Message( + txt="coucou", + nickname="toto", + ack=-1, + ) + example = "10:10:10 X toto> " + assert msg.compute_offset(True, 10) == len(example) + + +def test_message_offset_me(): + msg = Message( + txt="/me coucou", + nickname="toto", + ) + example = "10:10:10 * toto " + assert msg.compute_offset(True, 10) == len(example) + + +def test_message_offset_revisions(): + msg = Message( + txt="coucou", + nickname="toto", + revisions=3, + ) + example = "10:10:10 toto3> " + assert msg.compute_offset(True, 10) == len(example) + + msg = Message( + txt="coucou", + nickname="toto", + revisions=250, + ) + example = "10:10:10 toto250> " + assert msg.compute_offset(True, 10) == len(example) + + +def test_message_repr_works(): + msg1 = Message( + txt="coucou", + nickname="toto", + revisions=250, + ) + msg2 = Message( + txt="coucou", + nickname="toto", + old_message=msg1 + ) + + assert repr(msg2) is not None + +def test_xmllog_offset(): + msg = XMLLog( + txt='toto', + incoming=True, + ) + example = '10:10:10 IN ' + assert msg.compute_offset(True, 10) == len(example) + + msg = XMLLog( + txt='toto', + incoming=False, + ) + example = '10:10:10 OUT ' + assert msg.compute_offset(True, 10) == len(example) + +def test_basemessage_offset(): + msg = BaseMessage( + txt='coucou', + ) + example = '10:10:10 ' + assert msg.compute_offset(True, 10) == len(example) -- cgit v1.2.3 From 5bc510eafa5d3e9c735687f0b8c9d446159fffca Mon Sep 17 00:00:00 2001 From: mathieui Date: Sun, 29 Sep 2019 12:20:00 +0200 Subject: Fix an issue in xmllog rendering due to wrong offset and improve tests to catch that --- test/test_ui/test_render.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'test/test_ui') diff --git a/test/test_ui/test_render.py b/test/test_ui/test_render.py index ae32059e..d13751d1 100644 --- a/test/test_ui/test_render.py +++ b/test/test_ui/test_render.py @@ -51,74 +51,84 @@ 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) - - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + 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') - write_pre(msg, buffer, False, 10) + 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) - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + 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) - write_pre(msg, buffer, True, 10) + size = write_pre(msg, buffer, True, 10) assert buffer.text == '%s OUT ' % msg.time.strftime('%H:%M:%S') + assert size == len(buffer.text) -- cgit v1.2.3 From 076314fc21aa6cfb64412cedbcda1ab40c6adaae Mon Sep 17 00:00:00 2001 From: mathieui Date: Sun, 29 Sep 2019 12:51:05 +0200 Subject: Add tests for ui-related funcs --- test/test_ui/test_funcs.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 test/test_ui/test_funcs.py (limited to 'test/test_ui') diff --git a/test/test_ui/test_funcs.py b/test/test_ui/test_funcs.py new file mode 100644 index 00000000..0e61549c --- /dev/null +++ b/test/test_ui/test_funcs.py @@ -0,0 +1,46 @@ +from poezio.ui.funcs import ( + find_first_format_char, + parse_attrs, + truncate_nick, +) + + +def test_find_char_not_present(): + assert find_first_format_char("toto") == -1 + + +def test_find_char(): + assert find_first_format_char('a \x1A 1') == 2 + + +def test_truncate_nick(): + assert truncate_nick("toto") == "toto" + + +def test_truncate_nick_wrong_size(): + assert truncate_nick("toto", -10) == "t…" + + +def test_truncate_nick_too_long(): + nick = "012345678901234567" + assert truncate_nick(nick) == nick[:10] + "…" + + +def test_truncate_nick_no_nick(): + assert truncate_nick('') == '' + + +def test_parse_attrs(): + text = "\x19o\x19u\x19b\x19i\x191}\x19o\x194}" + assert parse_attrs(text) == ['4}'] + + +def test_parse_attrs_broken_char(): + text = "coucou\x19" + assert parse_attrs(text) == [] + + +def test_parse_attrs_previous(): + text = "coucou" + previous = ['u'] + assert parse_attrs(text, previous=previous) == previous -- cgit v1.2.3 From a5e92800477f6195a6b2e8c6e64a56859117d5b8 Mon Sep 17 00:00:00 2001 From: mathieui Date: Sun, 29 Sep 2019 18:12:48 +0200 Subject: Pass a message to add_message instead of messed up kwargs everywhere Changes LOTS of things --- test/test_ui/test_render.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'test/test_ui') diff --git a/test/test_ui/test_render.py b/test/test_ui/test_render.py index d13751d1..57bd05c9 100644 --- a/test/test_ui/test_render.py +++ b/test/test_ui/test_render.py @@ -4,7 +4,7 @@ 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, XMLLog +from poezio.ui.types import BaseMessage, Message, StatusMessage, XMLLog def test_simple_build_basemsg(): msg = BaseMessage(txt='coucou') @@ -28,6 +28,17 @@ 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 = '' -- cgit v1.2.3 From cf026cf1b1786a69db05408e9a18627dd3d533c3 Mon Sep 17 00:00:00 2001 From: mathieui Date: Sun, 29 Dec 2019 15:07:53 +0100 Subject: Fix tests for message rendering --- test/test_ui/test_render.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/test_ui') diff --git a/test/test_ui/test_render.py b/test/test_ui/test_render.py index 57bd05c9..e0db5a8f 100644 --- a/test/test_ui/test_render.py +++ b/test/test_ui/test_render.py @@ -15,7 +15,7 @@ def test_simple_build_basemsg(): 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) + assert (line.start_pos, line.end_pos) == (0, 6) def test_simple_render_xmllog(): -- cgit v1.2.3