From 0dcdb6c3cc54eb11d8af55157c1910acddfa7d00 Mon Sep 17 00:00:00 2001 From: Miroslav Date: Fri, 2 Mar 2018 23:40:58 +0200 Subject: [PATCH] Finalization of tests. Conditions rewritten again. --- mitmproxy/tools/console/master.py | 5 ++- mitmproxy/tools/console/statusbar.py | 15 ++++--- .../mitmproxy/tools/console/test_statusbar.py | 42 ++++++++++--------- 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/mitmproxy/tools/console/master.py b/mitmproxy/tools/console/master.py index 397fc8e86..5cc1cf43c 100644 --- a/mitmproxy/tools/console/master.py +++ b/mitmproxy/tools/console/master.py @@ -94,8 +94,9 @@ class ConsoleMaster(master.Master): self.start_err = entry else: signals.status_message.send( - message=(entry.level, "{}: {}".format(entry.level.title(), - entry.msg.lstrip())), + message=(entry.level, + "{}: {}".format(entry.level.title(), + str(entry.msg).lstrip())), expire=5 ) diff --git a/mitmproxy/tools/console/statusbar.py b/mitmproxy/tools/console/statusbar.py index a8806b305..caffe4e64 100644 --- a/mitmproxy/tools/console/statusbar.py +++ b/mitmproxy/tools/console/statusbar.py @@ -72,15 +72,18 @@ class ActionBar(urwid.WidgetWrap): msg_lines = msg_text.split("\n") first_line = msg_lines[0] + if len(msg_lines) > 1: + # Messages with a few lines must end with prompt. + line_length = len(first_line) + len(prompt) + else: + line_length = len(first_line) - oneline_fits = len(first_line) > cols and len(msg_lines) == 1 - manylines_first_fits = (len(first_line) + len(prompt) > cols and - len(msg_lines) > 1) - if oneline_fits or manylines_first_fits: + if line_length > cols: shortening_index = max(0, cols - len(prompt) - 3) first_line = first_line[:shortening_index] + "..." - elif len(msg_lines) == 1 and len(first_line) <= cols: - prompt = "" + else: + if len(msg_lines) == 1: + prompt = "" return [(disp_attr, first_line), ("warn", prompt)] diff --git a/test/mitmproxy/tools/console/test_statusbar.py b/test/mitmproxy/tools/console/test_statusbar.py index 22bb761f3..7b991890e 100644 --- a/test/mitmproxy/tools/console/test_statusbar.py +++ b/test/mitmproxy/tools/console/test_statusbar.py @@ -1,6 +1,7 @@ +import pytest + from mitmproxy import options from mitmproxy.tools.console import statusbar, master - from unittest import mock @@ -35,24 +36,27 @@ def test_statusbar(monkeypatch): assert bar.ib._w -def test_prep_message(): - o = options.Options() - m = master.ConsoleMaster(o) - m.ui = mock.MagicMock() - m.ui.get_cols_rows = mock.MagicMock(return_value=(50, 50)) +@pytest.mark.parametrize("message,ready_message", [ + ("", [(None, ""), ("warn", "")]), + (("info", "Line fits into statusbar"), [("info", "Line fits into statusbar"), + ("warn", "")]), + ("Line doesn't fit into statusbar", [(None, "Line does..."), + ("warn", "(more in eventlog)")]), + (("alert", "Two lines.\nFirst fits"), [("alert", "Two lines."), + ("warn", "(more in eventlog)")]), + ("Two long lines\nFirst doesn't fit", [(None, "Two long ..."), + ("warn", "(more in eventlog)")]) +]) +def test_prep_message(message, ready_message): + m = mock.Mock() + m.ui.get_cols_rows.return_value = (30, 30) ab = statusbar.ActionBar(m) + assert ab.prep_message(message) == ready_message - prep_msg = ab.prep_message("Error: Fits into statusbar") - assert prep_msg == [(None, "Error: Fits into statusbar"), ("warn", "")] - prep_msg = ab.prep_message("Error: Doesn't fit into statusbar"*2) - assert prep_msg == [(None, "Error: Doesn't fit into statu..."), - ("warn", "(more in eventlog)")] - - prep_msg = ab.prep_message("Error: Two lines.\nFirst fits") - assert prep_msg == [(None, "Error: Two lines."), - ("warn", "(more in eventlog)")] - - prep_msg = ab.prep_message("Error: Two lines"*4 + "\nFirst doensn't fit") - assert prep_msg == [(None, "Error: Two linesError: Two li..."), - ("warn", "(more in eventlog)")] +def test_prep_message_narrow(): + m = mock.Mock() + m.ui.get_cols_rows.return_value = (4, 4) + ab = statusbar.ActionBar(m) + prep_msg = ab.prep_message("error") + assert prep_msg == [(None, "..."), ("warn", "(more in eventlog)")]