bdd: Improve output when comparing sessions

See #1440.
This commit is contained in:
Florian Bruhin 2016-04-21 00:14:52 +02:00
parent e53c136342
commit a55952375b
2 changed files with 22 additions and 10 deletions

View File

@ -28,7 +28,6 @@ import collections
import textwrap
import pytest
import yaml
import pytest_bdd as bdd
from helpers import utils
@ -315,14 +314,7 @@ def compare_session(quteproc, expected):
partial_compare is used, which means only the keys/values listed will be
compared.
"""
# Translate ... to ellipsis in YAML.
loader = yaml.SafeLoader(expected)
loader.add_constructor('!ellipsis', lambda loader, node: ...)
loader.add_implicit_resolver('!ellipsis', re.compile(r'\.\.\.'), None)
data = quteproc.get_session()
expected = loader.get_data()
assert utils.partial_compare(data, expected)
quteproc.compare_session(expected)
@bdd.then("no crash should happen")

View File

@ -419,7 +419,7 @@ class QuteProc(testprocess.Process):
with open(session, encoding='utf-8') as f:
data = f.read()
self._log(data)
self._log('\nCurrent session data:\n' + data)
return yaml.load(data)
def get_content(self, plain=True):
@ -464,6 +464,26 @@ class QuteProc(testprocess.Process):
raise ValueError('Invalid response from qutebrowser: {}'
.format(message))
def compare_session(self, expected):
"""Compare the current sessions against the given template.
partial_compare is used, which means only the keys/values listed will
be compared.
"""
__tracebackhide__ = True
# Translate ... to ellipsis in YAML.
loader = yaml.SafeLoader(expected)
loader.add_constructor('!ellipsis', lambda loader, node: ...)
loader.add_implicit_resolver('!ellipsis', re.compile(r'\.\.\.'), None)
data = self.get_session()
expected = loader.get_data()
outcome = testutils.partial_compare(data, expected)
if not outcome:
msg = "Session comparison failed: {}".format(outcome.error)
msg += '\nsee stdout for details'
pytest.fail(msg)
def _xpath_escape(text):
"""Escape a string to be used in an XPath expression.