Fix an issue in xmllog rendering due to wrong offset

and improve tests to catch that
This commit is contained in:
mathieui 2019-09-29 12:20:00 +02:00
parent 32beeca480
commit 5bc510eafa
3 changed files with 28 additions and 19 deletions

View file

@ -100,7 +100,7 @@ def build_xmllog(msg: XMLLog, width: int, timestamp: bool, nick_size: int = 10)
def write_pre(msg: BaseMessage, win, with_timestamps: bool, nick_size: int) -> int:
"""Write the part before text (only the timestamp)"""
if with_timestamps:
return 1 + PreMessageHelpers.write_time(win, False, msg.time)
return PreMessageHelpers.write_time(win, False, msg.time)
return 0
@ -153,7 +153,7 @@ def write_pre_xmllog(msg: XMLLog, win, with_timestamps: bool, nick_size: int) ->
"""Write the part before the stanza (timestamp + IN/OUT)"""
offset = 0
if with_timestamps:
offset += PreMessageHelpers.write_time(win, False, msg.time)
offset += 1 + PreMessageHelpers.write_time(win, False, msg.time)
theme = get_theme()
if msg.incoming:
char = theme.CHAR_XML_IN

View file

@ -48,13 +48,12 @@ class XMLLog(BaseMessage):
def compute_offset(self, with_timestamps: bool, nick_size: int) -> int:
offset = 0
theme = get_theme()
IN, OUT = theme.CHAR_XML_IN, theme.CHAR_XML_OUT
if with_timestamps:
offset += 1 + SHORT_FORMAT_LENGTH
if self.incoming:
nick = IN
nick = theme.CHAR_XML_IN
else:
nick = OUT
nick = theme.CHAR_XML_OUT
nick = truncate_nick(nick, nick_size) or ''
offset += 1 + len(nick)
return offset

View file

@ -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)