diff --git a/_pytest/assertion/__init__.py b/_pytest/assertion/__init__.py index c4758bbfd..5c64c908f 100644 --- a/_pytest/assertion/__init__.py +++ b/_pytest/assertion/__init__.py @@ -78,12 +78,10 @@ def pytest_runtest_setup(item): for new_expl in hook_result: if new_expl: - # Don't include pageloads of data unless we - # are very verbose (-vv) + # Don't include pageloads of data unless we are very verbose (-vv) if len(''.join(new_expl[1:])) > 80*8 and item.config.option.verbose < 2: new_expl[1:] = ['Detailed information truncated, use "-vv" to see'] - res = '\n'.join(new_expl) - print res + res = '\n~'.join(new_expl) if item.config.getvalue("assertmode") == "rewrite": # The result will be fed back a python % formatting # operation, which will fail if there are extraneous diff --git a/_pytest/assertion/util.py b/_pytest/assertion/util.py index 3abd746ec..ad8ed070f 100644 --- a/_pytest/assertion/util.py +++ b/_pytest/assertion/util.py @@ -95,6 +95,9 @@ except NameError: def assertrepr_compare(config, op, left, right): """Return specialised explanations for some operators/operands""" width = 80 - 15 - len(op) - 2 # 15 chars indentation, 1 space around op + left_repr = py.io.saferepr(left, maxsize=int(width/2)) + right_repr = py.io.saferepr(right, maxsize=width-len(left_repr)) + summary = '%s %s %s' % (left_repr, op, right_repr) issequence = lambda x: (isinstance(x, (list, tuple, Sequence)) and not isinstance(x, basestring)) @@ -117,7 +120,9 @@ def assertrepr_compare(config, op, left, right): elif op == 'not in': if istext(left) and istext(right): explanation = _notin_text(left, right, verbose) - except Exception: + except py.builtin._sysex: + raise + except: excinfo = py.code.ExceptionInfo() explanation = [ '(pytest_assertion plugin: representation of details failed. ' @@ -125,15 +130,7 @@ def assertrepr_compare(config, op, left, right): if not explanation: return None - if istext(left): - left_repr = left[:int(width/2)] - else: - left_repr = py.io.saferepr(left, maxsize=int(width/2)) - if istext(right): - right_repr = right[:int(width/2)] - else: - right_repr = py.io.saferepr(right, maxsize=width-len(left_repr)) - summary = '%s %s %s' % (left_repr, op, right_repr) + return [summary] + explanation diff --git a/doc/en/customize.txt b/doc/en/customize.txt index 99fd8ffc8..d436a0672 100644 --- a/doc/en/customize.txt +++ b/doc/en/customize.txt @@ -121,8 +121,6 @@ Builtin configuration file options .. confval:: python_functions One or more name prefixes determining which test functions - and methods are considered as test modules. Note that this - has no effect on methods that live on a ``unittest.TestCase`` - derived class. + and methods are considered as test modules. See :ref:`change naming conventions` for examples. diff --git a/doc/en/example/pythoncollection.txt b/doc/en/example/pythoncollection.txt index 311140c91..abf6340c0 100644 --- a/doc/en/example/pythoncollection.txt +++ b/doc/en/example/pythoncollection.txt @@ -53,12 +53,6 @@ then the test collection looks like this:: ============================= in 0.01 seconds ============================= -.. note:: - - the ``python_functions`` and ``python_classes`` has no effect - for ``unittest.TestCase`` test discovery because pytest delegates - detection of test case methods to unittest code. - Interpreting cmdline arguments as Python packages -----------------------------------------------------