diff --git a/_pytest/deprecated.py b/_pytest/deprecated.py index 385742111..4f7b9e936 100644 --- a/_pytest/deprecated.py +++ b/_pytest/deprecated.py @@ -36,4 +36,4 @@ MARK_PARAMETERSET_UNPACKING = RemovedInPytest4Warning( "Applying marks directly to parameters is deprecated," " please use pytest.param(..., marks=...) instead.\n" "For more details, see: https://docs.pytest.org/en/latest/parametrize.html" -) \ No newline at end of file +) diff --git a/_pytest/mark.py b/_pytest/mark.py index 7714c7f5e..c2959606c 100644 --- a/_pytest/mark.py +++ b/_pytest/mark.py @@ -8,6 +8,7 @@ from operator import attrgetter from .compat import imap from .deprecated import MARK_INFO_ATTRIBUTE, MARK_PARAMETERSET_UNPACKING + def alias(name, warning=None): getter = attrgetter(name) @@ -351,6 +352,7 @@ class MarkDecorator: mark = Mark(self.name, args, kwargs) return self.__class__(self.mark.combined_with(mark)) + def get_unpacked_marks(obj): """ obtain the unpacked marks that are stored on a object diff --git a/_pytest/python.py b/_pytest/python.py index bf3b1965d..dca900a6a 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -281,7 +281,10 @@ class PyCollector(PyobjMixin, main.Collector): obj = safe_getattr(obj, '__func__', False) if obj is False: # Python 2.6 wraps in a different way that we won't try to handle - self.warn(code="C2", message="cannot collect static method %r because it is not a function (always the case in Python 2.6)" % name) + msg = "cannot collect static method %r because " \ + "it is not a function (always the case in Python 2.6)" + self.warn( + code="C2", message=msg % name) return False return ( safe_getattr(obj, "__call__", False) and fixtures.getfixturemarker(obj) is None @@ -1510,6 +1513,7 @@ class ApproxNonIterable(object): # the basic pytest Function item # + class Function(FunctionMixin, main.Item, fixtures.FuncargnamesCompatAttr): """ a Function Item is responsible for setting up and executing a Python test function. diff --git a/_pytest/python_api.py b/_pytest/python_api.py index cb7d5e459..c5493f495 100644 --- a/_pytest/python_api.py +++ b/_pytest/python_api.py @@ -9,6 +9,7 @@ import _pytest._code # builtin pytest.approx helper + class ApproxBase(object): """ Provide shared utilities for making approximate comparisons between numbers @@ -26,8 +27,8 @@ class ApproxBase(object): def __eq__(self, actual): return all( - a == self._approx_scalar(x) - for a, x in self._yield_comparisons(actual)) + a == self._approx_scalar(x) + for a, x in self._yield_comparisons(actual)) __hash__ = None @@ -138,7 +139,7 @@ class ApproxMapping(ApproxBase): def __repr__(self): return "approx({0!r})".format(dict( (k, self._approx_scalar(v)) - for k,v in self.expected.items())) + for k, v in self.expected.items())) def __eq__(self, actual): if set(actual.keys()) != set(self.expected.keys()): @@ -241,7 +242,7 @@ class ApproxScalar(ApproxBase): absolute tolerance or a relative tolerance, depending on what the user specified or which would be larger. """ - set_default = lambda x, default: x if x is not None else default + def set_default(x, default): return x if x is not None else default # Figure out what the absolute tolerance should be. ``self.abs`` is # either None or a value specified by the user. @@ -274,7 +275,6 @@ class ApproxScalar(ApproxBase): return max(relative_tolerance, absolute_tolerance) - def approx(expected, rel=None, abs=None, nan_ok=False): """ Assert that two numbers (or two sets of numbers) are equal to each other @@ -574,7 +574,7 @@ def raises(expected_exception, *args, **kwargs): frame = sys._getframe(1) loc = frame.f_locals.copy() loc.update(kwargs) - #print "raises frame scope: %r" % frame.f_locals + # print "raises frame scope: %r" % frame.f_locals try: code = _pytest._code.Source(code).compile() py.builtin.exec_(code, frame.f_globals, loc) @@ -593,6 +593,7 @@ def raises(expected_exception, *args, **kwargs): raises.Exception = fail.Exception + class RaisesContext(object): def __init__(self, expected_exception, message, match_expr): self.expected_exception = expected_exception diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index a7dfe80a6..37ceeb423 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -144,10 +144,10 @@ class TestTraceback_f_g_h(object): xyz() """) try: - exec (source.compile()) + exec(source.compile()) except NameError: tb = _pytest._code.ExceptionInfo().traceback - print (tb[-1].getsource()) + print(tb[-1].getsource()) s = str(tb[-1].getsource()) assert s.startswith("def xyz():\n try:") assert s.strip().endswith("except somenoname:") @@ -341,7 +341,7 @@ def test_excinfo_errisinstance(): def test_excinfo_no_sourcecode(): try: - exec ("raise ValueError()") + exec("raise ValueError()") except ValueError: excinfo = _pytest._code.ExceptionInfo() s = str(excinfo.traceback[-1]) @@ -431,7 +431,7 @@ class TestFormattedExcinfo(object): def excinfo_from_exec(self, source): source = _pytest._code.Source(source).strip() try: - exec (source.compile()) + exec(source.compile()) except KeyboardInterrupt: raise except: @@ -471,7 +471,7 @@ class TestFormattedExcinfo(object): pr = FormattedExcinfo() co = compile("raise ValueError()", "", "exec") try: - exec (co) + exec(co) except ValueError: excinfo = _pytest._code.ExceptionInfo() repr = pr.repr_excinfo(excinfo) @@ -486,7 +486,7 @@ a = 1 raise ValueError() """, "", "exec") try: - exec (co) + exec(co) except ValueError: excinfo = _pytest._code.ExceptionInfo() repr = pr.repr_excinfo(excinfo) @@ -992,7 +992,7 @@ raise ValueError() tw = TWMock() r.toterminal(tw) for line in tw.lines: - print (line) + print(line) assert tw.lines[0] == "" assert tw.lines[1] == " def f():" assert tw.lines[2] == "> g()" @@ -1040,7 +1040,7 @@ raise ValueError() tw = TWMock() r.toterminal(tw) for line in tw.lines: - print (line) + print(line) assert tw.lines[0] == "" assert tw.lines[1] == " def f():" assert tw.lines[2] == " try:" diff --git a/testing/code/test_source.py b/testing/code/test_source.py index f7f272c7b..6432bf95c 100644 --- a/testing/code/test_source.py +++ b/testing/code/test_source.py @@ -170,12 +170,12 @@ class TestSourceParsingAndCompiling(object): def test_compile(self): co = _pytest._code.compile("x=3") d = {} - exec (co, d) + exec(co, d) assert d['x'] == 3 def test_compile_and_getsource_simple(self): co = _pytest._code.compile("x=3") - exec (co) + exec(co) source = _pytest._code.Source(co) assert str(source) == "x=3" @@ -342,8 +342,7 @@ def test_getstartingblock_multiline(): self.source = _pytest._code.Frame(frame).statement x = A('x', - 'y' - , + 'y', 'z') l = [i for i in x.source.lines if i.strip()] diff --git a/testing/python/approx.py b/testing/python/approx.py index 9aed0fa0a..ebd0234de 100644 --- a/testing/python/approx.py +++ b/testing/python/approx.py @@ -9,6 +9,7 @@ from decimal import Decimal from fractions import Fraction inf, nan = float('inf'), float('nan') + class MyDocTestRunner(doctest.DocTestRunner): def __init__(self): @@ -37,8 +38,8 @@ class TestApprox(object): # Dictionaries aren't ordered, so we need to check both orders. assert repr(approx({'a': 1.0, 'b': 2.0})) in ( - "approx({{'a': 1.0 {pm} {tol1}, 'b': 2.0 {pm} {tol2}}})".format(pm=plus_minus, tol1=tol1, tol2=tol2), - "approx({{'b': 2.0 {pm} {tol2}, 'a': 1.0 {pm} {tol1}}})".format(pm=plus_minus, tol1=tol1, tol2=tol2), + "approx({{'a': 1.0 {pm} {tol1}, 'b': 2.0 {pm} {tol2}}})".format(pm=plus_minus, tol1=tol1, tol2=tol2), + "approx({{'b': 2.0 {pm} {tol2}, 'a': 1.0 {pm} {tol1}}})".format(pm=plus_minus, tol1=tol1, tol2=tol2), ) def test_operator_overloading(self): @@ -218,11 +219,11 @@ class TestApprox(object): def test_expecting_nan(self): examples = [ - (eq, nan, nan), - (eq, -nan, -nan), - (eq, nan, -nan), - (ne, 0.0, nan), - (ne, inf, nan), + (eq, nan, nan), + (eq, -nan, -nan), + (eq, nan, -nan), + (ne, 0.0, nan), + (ne, inf, nan), ] for op, a, x in examples: # Nothing is equal to NaN by default. @@ -266,10 +267,10 @@ class TestApprox(object): def test_complex(self): within_1e6 = [ - ( 1.000001 + 1.0j, 1.0 + 1.0j), - (1.0 + 1.000001j, 1.0 + 1.0j), - (-1.000001 + 1.0j, -1.0 + 1.0j), - (1.0 - 1.000001j, 1.0 - 1.0j), + (1.000001 + 1.0j, 1.0 + 1.0j), + (1.0 + 1.000001j, 1.0 + 1.0j), + (-1.000001 + 1.0j, -1.0 + 1.0j), + (1.0 - 1.000001j, 1.0 - 1.0j), ] for a, x in within_1e6: assert a == approx(x, rel=5e-6, abs=0) @@ -289,7 +290,7 @@ class TestApprox(object): def test_list_wrong_len(self): assert [1, 2] != approx([1]) - assert [1, 2] != approx([1,2,3]) + assert [1, 2] != approx([1, 2, 3]) def test_tuple(self): actual = (1 + 1e-7, 2 + 1e-8) @@ -303,7 +304,7 @@ class TestApprox(object): def test_tuple_wrong_len(self): assert (1, 2) != approx((1,)) - assert (1, 2) != approx((1,2,3)) + assert (1, 2) != approx((1, 2, 3)) def test_dict(self): actual = {'a': 1 + 1e-7, 'b': 2 + 1e-8} @@ -344,7 +345,7 @@ class TestApprox(object): np = pytest.importorskip('numpy') a12 = np.array([[1, 2]]) - a21 = np.array([[1],[2]]) + a21 = np.array([[1], [2]]) assert a12 != approx(a21) assert a21 != approx(a12) diff --git a/testing/python/collect.py b/testing/python/collect.py index 64a4ff7aa..977ef1c82 100644 --- a/testing/python/collect.py +++ b/testing/python/collect.py @@ -151,7 +151,7 @@ class TestClass(object): pass """) result = testdir.runpytest() - if sys.version_info < (2,7): + if sys.version_info < (2, 7): # in 2.6, the code to handle static methods doesn't work result.stdout.fnmatch_lines([ "*collected 0 items*", diff --git a/testing/test_cache.py b/testing/test_cache.py index 7fea5cdfd..36059ec29 100755 --- a/testing/test_cache.py +++ b/testing/test_cache.py @@ -119,6 +119,7 @@ class TestNewAPI(object): testdir.runpytest() assert testdir.tmpdir.join('custom_cache_dir').isdir() + def test_cache_reportheader(testdir): testdir.makepyfile(""" def test_hello(): diff --git a/testing/test_capture.py b/testing/test_capture.py index 302a02d10..a5d8c9c13 100644 --- a/testing/test_capture.py +++ b/testing/test_capture.py @@ -83,14 +83,14 @@ class TestCaptureManager(object): assert outerr == ("", "") outerr = capman.suspendcapture() assert outerr == ("", "") - print ("hello") + print("hello") out, err = capman.suspendcapture() if method == "no": assert old == (sys.stdout, sys.stderr, sys.stdin) else: assert not out capman.resumecapture() - print ("hello") + print("hello") out, err = capman.suspendcapture() if method != "no": assert out == "hello\n" @@ -305,7 +305,7 @@ class TestLoggingInteraction(object): assert 0 """) for optargs in (('--capture=sys',), ('--capture=fd',)): - print (optargs) + print(optargs) result = testdir.runpytest_subprocess(p, *optargs) s = result.stdout.str() result.stdout.fnmatch_lines([ @@ -331,7 +331,7 @@ class TestLoggingInteraction(object): assert 0 """) for optargs in (('--capture=sys',), ('--capture=fd',)): - print (optargs) + print(optargs) result = testdir.runpytest_subprocess(p, *optargs) s = result.stdout.str() result.stdout.fnmatch_lines([ @@ -879,7 +879,7 @@ class TestStdCapture(object): def test_capturing_readouterr(self): with self.getcapture() as cap: - print ("hello world") + print("hello world") sys.stderr.write("hello error\n") out, err = cap.readouterr() assert out == "hello world\n" @@ -890,7 +890,7 @@ class TestStdCapture(object): def test_capturing_readouterr_unicode(self): with self.getcapture() as cap: - print ("hx\xc4\x85\xc4\x87") + print("hx\xc4\x85\xc4\x87") out, err = cap.readouterr() assert out == py.builtin._totext("hx\xc4\x85\xc4\x87\n", "utf8") @@ -905,7 +905,7 @@ class TestStdCapture(object): def test_reset_twice_error(self): with self.getcapture() as cap: - print ("hello") + print("hello") out, err = cap.readouterr() pytest.raises(ValueError, cap.stop_capturing) assert out == "hello\n" @@ -919,7 +919,7 @@ class TestStdCapture(object): sys.stderr.write("world") sys.stdout = capture.CaptureIO() sys.stderr = capture.CaptureIO() - print ("not seen") + print("not seen") sys.stderr.write("not seen\n") out, err = cap.readouterr() assert out == "hello" @@ -929,9 +929,9 @@ class TestStdCapture(object): def test_capturing_error_recursive(self): with self.getcapture() as cap1: - print ("cap1") + print("cap1") with self.getcapture() as cap2: - print ("cap2") + print("cap2") out2, err2 = cap2.readouterr() out1, err1 = cap1.readouterr() assert out1 == "cap1\n" @@ -961,9 +961,9 @@ class TestStdCapture(object): assert sys.stdin is old def test_stdin_nulled_by_default(self): - print ("XXX this test may well hang instead of crashing") - print ("XXX which indicates an error in the underlying capturing") - print ("XXX mechanisms") + print("XXX this test may well hang instead of crashing") + print("XXX which indicates an error in the underlying capturing") + print("XXX mechanisms") with self.getcapture(): pytest.raises(IOError, "sys.stdin.read()") diff --git a/testing/test_conftest.py b/testing/test_conftest.py index 05453f766..39590f5f2 100644 --- a/testing/test_conftest.py +++ b/testing/test_conftest.py @@ -321,9 +321,9 @@ class TestConftestVisibility(object): # use value from parent dir's """)) - print ("created directory structure:") + print("created directory structure:") for x in testdir.tmpdir.visit(): - print (" " + x.relto(testdir.tmpdir)) + print(" " + x.relto(testdir.tmpdir)) return { "runner": runner, diff --git a/testing/test_mark.py b/testing/test_mark.py index 744e6ce52..f3966d733 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -791,11 +791,10 @@ def test_legacy_transfer(): def fake_method(self): pass - transfer_markers(fake_method, FakeClass, FakeModule) # legacy marks transfer smeared assert fake_method.nofun assert fake_method.fun # pristine marks dont transfer - assert fake_method.pytestmark == [pytest.mark.fun.mark] \ No newline at end of file + assert fake_method.pytestmark == [pytest.mark.fun.mark] diff --git a/testing/test_runner.py b/testing/test_runner.py index 842810f1b..567b98eeb 100644 --- a/testing/test_runner.py +++ b/testing/test_runner.py @@ -226,7 +226,7 @@ class BaseFunctionalTests(object): raise ValueError(42) """) reps = rec.getreports("pytest_runtest_logreport") - print (reps) + print(reps) for i in range(2): assert reps[i].nodeid.endswith("test_method") assert reps[i].passed @@ -253,7 +253,7 @@ class BaseFunctionalTests(object): assert True """) reps = rec.getreports("pytest_runtest_logreport") - print (reps) + print(reps) assert len(reps) == 3 # assert reps[0].nodeid.endswith("test_method")