Merge branch 'expected-error' of https://github.com/Kingdread/qutebrowser into Kingdread-expected-error
This commit is contained in:
commit
f6cd73c784
@ -92,9 +92,10 @@ class LogLine(testprocess.Line):
|
|||||||
self.message = msg_match.group('message')
|
self.message = msg_match.group('message')
|
||||||
|
|
||||||
self.expected = is_ignored_qt_message(self.message)
|
self.expected = is_ignored_qt_message(self.message)
|
||||||
|
self.use_color = False
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.formatted_str(colorized=False)
|
return self.formatted_str(colorized=self.use_color)
|
||||||
|
|
||||||
def formatted_str(self, colorized=True):
|
def formatted_str(self, colorized=True):
|
||||||
"""Return a formatted colorized line.
|
"""Return a formatted colorized line.
|
||||||
@ -113,7 +114,18 @@ class LogLine(testprocess.Line):
|
|||||||
r.module = self.module
|
r.module = self.module
|
||||||
r.funcName = self.function
|
r.funcName = self.function
|
||||||
|
|
||||||
formatter = log.ColoredFormatter(log.EXTENDED_FMT, log.DATEFMT, '{',
|
format_str = log.EXTENDED_FMT
|
||||||
|
# Mark expected errors with (expected) so it's less confusing for tests
|
||||||
|
# which expect errors but fail due to other errors.
|
||||||
|
if self.expected and self.loglevel > logging.INFO:
|
||||||
|
new_color = '{' + log.LOG_COLORS['DEBUG'] + '}'
|
||||||
|
format_str = format_str.replace('{log_color}', new_color)
|
||||||
|
format_str = re.sub(r'{levelname:(\d*)}',
|
||||||
|
# Leave away the padding because (expected) is
|
||||||
|
# longer anyway.
|
||||||
|
r'{levelname} (expected)', format_str)
|
||||||
|
|
||||||
|
formatter = log.ColoredFormatter(format_str, log.DATEFMT, '{',
|
||||||
use_colors=colorized)
|
use_colors=colorized)
|
||||||
result = formatter.format(r)
|
result = formatter.format(r)
|
||||||
# Manually append the stringified traceback if one is present
|
# Manually append the stringified traceback if one is present
|
||||||
@ -186,11 +198,8 @@ class QuteProc(testprocess.Process):
|
|||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
if self._config.getoption('--color') != 'no':
|
log_line.use_color = self._config.getoption('--color') != 'no'
|
||||||
line_to_log = log_line.formatted_str()
|
self._log(log_line)
|
||||||
else:
|
|
||||||
line_to_log = log_line.formatted_str(colorized=False)
|
|
||||||
self._log(line_to_log)
|
|
||||||
|
|
||||||
start_okay_message_load = (
|
start_okay_message_load = (
|
||||||
"load status for <qutebrowser.browser.webkit.webview.WebView "
|
"load status for <qutebrowser.browser.webkit.webview.WebView "
|
||||||
|
@ -176,11 +176,11 @@ def test_log_line_parse(data, attrs):
|
|||||||
assert actual == expected, name
|
assert actual == expected, name
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('data, colorized, expected', [
|
@pytest.mark.parametrize('data, colorized, expect_error, expected', [
|
||||||
(
|
(
|
||||||
{'created': 0, 'levelname': 'DEBUG', 'name': 'foo', 'module': 'bar',
|
{'created': 0, 'levelname': 'DEBUG', 'name': 'foo', 'module': 'bar',
|
||||||
'funcName': 'qux', 'lineno': 10, 'levelno': 10, 'message': 'quux'},
|
'funcName': 'qux', 'lineno': 10, 'levelno': 10, 'message': 'quux'},
|
||||||
False,
|
False, False,
|
||||||
'{timestamp} DEBUG foo bar:qux:10 quux',
|
'{timestamp} DEBUG foo bar:qux:10 quux',
|
||||||
),
|
),
|
||||||
# Traceback attached
|
# Traceback attached
|
||||||
@ -189,7 +189,7 @@ def test_log_line_parse(data, attrs):
|
|||||||
'funcName': 'qux', 'lineno': 10, 'levelno': 10, 'message': 'quux',
|
'funcName': 'qux', 'lineno': 10, 'levelno': 10, 'message': 'quux',
|
||||||
'traceback': 'Traceback (most recent call last):\n here be '
|
'traceback': 'Traceback (most recent call last):\n here be '
|
||||||
'dragons'},
|
'dragons'},
|
||||||
False,
|
False, False,
|
||||||
'{timestamp} DEBUG foo bar:qux:10 quux\n'
|
'{timestamp} DEBUG foo bar:qux:10 quux\n'
|
||||||
'Traceback (most recent call last):\n'
|
'Traceback (most recent call last):\n'
|
||||||
' here be dragons',
|
' here be dragons',
|
||||||
@ -198,14 +198,38 @@ def test_log_line_parse(data, attrs):
|
|||||||
(
|
(
|
||||||
{'created': 0, 'levelname': 'DEBUG', 'name': 'foo', 'module': 'bar',
|
{'created': 0, 'levelname': 'DEBUG', 'name': 'foo', 'module': 'bar',
|
||||||
'funcName': 'qux', 'lineno': 10, 'levelno': 10, 'message': 'quux'},
|
'funcName': 'qux', 'lineno': 10, 'levelno': 10, 'message': 'quux'},
|
||||||
True,
|
True, False,
|
||||||
'\033[32m{timestamp}\033[0m \033[37mDEBUG \033[0m \033[36mfoo '
|
'\033[32m{timestamp}\033[0m \033[37mDEBUG \033[0m \033[36mfoo '
|
||||||
' bar:qux:10\033[0m \033[37mquux\033[0m',
|
' bar:qux:10\033[0m \033[37mquux\033[0m',
|
||||||
),
|
),
|
||||||
], ids=['normal', 'traceback', 'colored'])
|
# Expected error
|
||||||
def test_log_line_formatted(data, colorized, expected):
|
(
|
||||||
|
{'created': 0, 'levelname': 'ERROR', 'name': 'foo', 'module': 'bar',
|
||||||
|
'funcName': 'qux', 'lineno': 10, 'levelno': 40, 'message': 'quux'},
|
||||||
|
False, True,
|
||||||
|
'{timestamp} ERROR (expected) foo bar:qux:10 quux',
|
||||||
|
),
|
||||||
|
# Expected other message (i.e. should make no difference)
|
||||||
|
(
|
||||||
|
{'created': 0, 'levelname': 'DEBUG', 'name': 'foo', 'module': 'bar',
|
||||||
|
'funcName': 'qux', 'lineno': 10, 'levelno': 10, 'message': 'quux'},
|
||||||
|
False, True,
|
||||||
|
'{timestamp} DEBUG foo bar:qux:10 quux',
|
||||||
|
),
|
||||||
|
# Expected error colorized (shouldn't be red)
|
||||||
|
(
|
||||||
|
{'created': 0, 'levelname': 'ERROR', 'name': 'foo', 'module': 'bar',
|
||||||
|
'funcName': 'qux', 'lineno': 10, 'levelno': 40, 'message': 'quux'},
|
||||||
|
True, True,
|
||||||
|
'\033[32m{timestamp}\033[0m \033[37mERROR (expected)\033[0m '
|
||||||
|
'\033[36mfoo bar:qux:10\033[0m \033[37mquux\033[0m',
|
||||||
|
),
|
||||||
|
], ids=['normal', 'traceback', 'colored', 'expected error', 'expected other',
|
||||||
|
'expected error colorized'])
|
||||||
|
def test_log_line_formatted(data, colorized, expect_error, expected):
|
||||||
line = json.dumps(data)
|
line = json.dumps(data)
|
||||||
record = quteprocess.LogLine(line)
|
record = quteprocess.LogLine(line)
|
||||||
|
record.expected = expect_error
|
||||||
ts = datetime.datetime.fromtimestamp(data['created']).strftime('%H:%M:%S')
|
ts = datetime.datetime.fromtimestamp(data['created']).strftime('%H:%M:%S')
|
||||||
expected = expected.format(timestamp=ts)
|
expected = expected.format(timestamp=ts)
|
||||||
assert record.formatted_str(colorized=colorized) == expected
|
assert record.formatted_str(colorized=colorized) == expected
|
||||||
|
@ -78,6 +78,7 @@ class Line:
|
|||||||
def _render_log(data, threshold=100):
|
def _render_log(data, threshold=100):
|
||||||
"""Shorten the given log without -v and convert to a string."""
|
"""Shorten the given log without -v and convert to a string."""
|
||||||
# pylint: disable=no-member
|
# pylint: disable=no-member
|
||||||
|
data = [str(d) for d in data]
|
||||||
is_exception = any('Traceback (most recent call last):' in line
|
is_exception = any('Traceback (most recent call last):' in line
|
||||||
for line in data)
|
for line in data)
|
||||||
if (len(data) > threshold and
|
if (len(data) > threshold and
|
||||||
|
Loading…
Reference in New Issue
Block a user