From cbaa7dd56a685c887e25d4c94b62aa49e8a6a0ca Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Tue, 26 Jun 2018 06:35:27 -0700 Subject: [PATCH] Upgrade pre-commit hooks except pyupgrade --- .pre-commit-config.yaml | 8 +- doc/en/example/assertion/failure_demo.py | 17 ---- doc/en/example/assertion/test_failures.py | 2 +- .../assertion/test_setup_flow_example.py | 1 - doc/en/example/costlysetup/conftest.py | 1 - doc/en/example/multipython.py | 1 - doc/en/example/nonpython/conftest.py | 2 - doc/en/example/py2py3/conftest.py | 1 - doc/en/example/pythoncollection.py | 1 - src/_pytest/_code/code.py | 39 +++++---- src/_pytest/_code/source.py | 7 +- src/_pytest/assertion/rewrite.py | 2 +- src/_pytest/assertion/util.py | 2 +- src/_pytest/cacheprovider.py | 5 +- src/_pytest/capture.py | 2 - src/_pytest/compat.py | 20 ++--- src/_pytest/config/__init__.py | 25 +++--- src/_pytest/config/argparsing.py | 8 +- src/_pytest/config/exceptions.py | 1 + src/_pytest/config/findpaths.py | 1 - src/_pytest/debugging.py | 8 +- src/_pytest/deprecated.py | 4 +- src/_pytest/doctest.py | 15 +--- src/_pytest/fixtures.py | 14 ++- src/_pytest/helpconfig.py | 2 +- src/_pytest/junitxml.py | 7 +- src/_pytest/logging.py | 4 +- src/_pytest/main.py | 2 +- src/_pytest/mark/evaluate.py | 1 - src/_pytest/mark/structures.py | 20 +++-- src/_pytest/monkeypatch.py | 1 - src/_pytest/nodes.py | 4 +- src/_pytest/outcomes.py | 1 + src/_pytest/pytester.py | 21 ++--- src/_pytest/python.py | 29 +++---- src/_pytest/python_api.py | 6 +- src/_pytest/recwarn.py | 5 +- src/_pytest/resultlog.py | 1 - src/_pytest/runner.py | 21 +++-- src/_pytest/skipping.py | 9 +- src/_pytest/terminal.py | 27 +++--- src/_pytest/unittest.py | 12 ++- src/_pytest/warnings.py | 5 +- tasks/generate.py | 16 ++-- testing/acceptance_test.py | 11 +-- testing/code/test_code.py | 8 -- testing/code/test_excinfo.py | 15 ---- testing/code/test_source.py | 12 --- testing/code/test_source_multiline_block.py | 1 - testing/deprecated_test.py | 8 +- testing/logging/test_formatter.py | 6 +- testing/logging/test_reporting.py | 35 ++++---- testing/python/approx.py | 25 +++--- testing/python/collect.py | 15 +--- testing/python/fixture.py | 42 +++------ testing/python/integration.py | 8 -- testing/python/metafunc.py | 86 ++++++------------- testing/python/raises.py | 5 -- testing/test_argcomplete.py | 1 - testing/test_assertion.py | 37 +++----- testing/test_assertrewrite.py | 34 +------- testing/test_cacheprovider.py | 27 +++--- testing/test_capture.py | 6 -- testing/test_collection.py | 11 --- testing/test_compat.py | 4 - testing/test_config.py | 17 +--- testing/test_conftest.py | 4 - testing/test_doctest.py | 4 - testing/test_junitxml.py | 25 ++---- testing/test_mark.py | 6 -- testing/test_monkeypatch.py | 4 - testing/test_nose.py | 1 - testing/test_parseopt.py | 19 ++-- testing/test_pastebin.py | 3 - testing/test_pdb.py | 4 - testing/test_pluginmanager.py | 8 -- testing/test_pytester.py | 9 +- testing/test_recwarn.py | 2 - testing/test_runner.py | 26 ++---- testing/test_session.py | 2 - testing/test_skipping.py | 11 +-- testing/test_terminal.py | 8 -- testing/test_tmpdir.py | 2 - testing/test_unittest.py | 1 - testing/test_warnings.py | 5 +- tox.ini | 1 + 86 files changed, 309 insertions(+), 631 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e50891bbc..9e9549ed9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,19 +1,19 @@ exclude: doc/en/example/py2py3/test_py2.py repos: - repo: https://github.com/ambv/black - rev: 18.4a4 + rev: 18.6b4 hooks: - id: black args: [--safe, --quiet] language_version: python3.6 - repo: https://github.com/asottile/blacken-docs - rev: v0.1.1 + rev: v0.2.0 hooks: - id: blacken-docs - additional_dependencies: [black==18.5b1] + additional_dependencies: [black==18.6b4] language_version: python3.6 - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v1.2.3 + rev: v1.3.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer diff --git a/doc/en/example/assertion/failure_demo.py b/doc/en/example/assertion/failure_demo.py index dc27f5dfb..0a104578c 100644 --- a/doc/en/example/assertion/failure_demo.py +++ b/doc/en/example/assertion/failure_demo.py @@ -25,9 +25,7 @@ def pytest_generate_tests(metafunc): class TestFailing(object): - def test_simple(self): - def f(): return 42 @@ -40,7 +38,6 @@ class TestFailing(object): otherfunc_multi(42, 6 * 9) def test_not(self): - def f(): return 42 @@ -48,7 +45,6 @@ class TestFailing(object): class TestSpecialisedExplanations(object): - def test_eq_text(self): assert "spam" == "eggs" @@ -106,7 +102,6 @@ class TestSpecialisedExplanations(object): def test_attribute(): - class Foo(object): b = 1 @@ -115,7 +110,6 @@ def test_attribute(): def test_attribute_instance(): - class Foo(object): b = 1 @@ -123,9 +117,7 @@ def test_attribute_instance(): def test_attribute_failure(): - class Foo(object): - def _get_b(self): raise Exception("Failed to get attrib") @@ -136,7 +128,6 @@ def test_attribute_failure(): def test_attribute_multiple(): - class Foo(object): b = 1 @@ -151,7 +142,6 @@ def globf(x): class TestRaises(object): - def test_raises(self): s = "qwe" # NOQA raises(TypeError, "int(s)") @@ -193,9 +183,7 @@ def test_dynamic_compile_shows_nicely(): class TestMoreErrors(object): - def test_complex_error(self): - def f(): return 44 @@ -218,7 +206,6 @@ class TestMoreErrors(object): assert s.startswith(g) def test_startswith_nested(self): - def f(): return "123" @@ -246,9 +233,7 @@ class TestMoreErrors(object): class TestCustomAssertMsg(object): - def test_single_line(self): - class A(object): a = 1 @@ -256,7 +241,6 @@ class TestCustomAssertMsg(object): assert A.a == b, "A.a appears not to be b" def test_multiline(self): - class A(object): a = 1 @@ -266,7 +250,6 @@ class TestCustomAssertMsg(object): ), "A.a appears not to be b\n" "or does not appear to be b\none of those" def test_custom_repr(self): - class JSON(object): a = 1 diff --git a/doc/en/example/assertion/test_failures.py b/doc/en/example/assertion/test_failures.py index 1150ec12f..43f748fa2 100644 --- a/doc/en/example/assertion/test_failures.py +++ b/doc/en/example/assertion/test_failures.py @@ -2,7 +2,7 @@ import py failure_demo = py.path.local(__file__).dirpath("failure_demo.py") -pytest_plugins = "pytester", +pytest_plugins = ("pytester",) def test_failure_demo_fails_properly(testdir): diff --git a/doc/en/example/assertion/test_setup_flow_example.py b/doc/en/example/assertion/test_setup_flow_example.py index c00711dc2..eb339f474 100644 --- a/doc/en/example/assertion/test_setup_flow_example.py +++ b/doc/en/example/assertion/test_setup_flow_example.py @@ -3,7 +3,6 @@ def setup_module(module): class TestStateFullThing(object): - def setup_class(cls): cls.classcount += 1 diff --git a/doc/en/example/costlysetup/conftest.py b/doc/en/example/costlysetup/conftest.py index 466c62c06..e41c4129c 100644 --- a/doc/en/example/costlysetup/conftest.py +++ b/doc/en/example/costlysetup/conftest.py @@ -10,7 +10,6 @@ def setup(request): class CostlySetup(object): - def __init__(self): import time diff --git a/doc/en/example/multipython.py b/doc/en/example/multipython.py index 970800c7e..299833f71 100644 --- a/doc/en/example/multipython.py +++ b/doc/en/example/multipython.py @@ -21,7 +21,6 @@ def python2(request, python1): class Python(object): - def __init__(self, version, picklefile): self.pythonpath = py.path.local.sysfind(version) if not self.pythonpath: diff --git a/doc/en/example/nonpython/conftest.py b/doc/en/example/nonpython/conftest.py index 8429dd114..9732dc41b 100644 --- a/doc/en/example/nonpython/conftest.py +++ b/doc/en/example/nonpython/conftest.py @@ -9,7 +9,6 @@ def pytest_collect_file(parent, path): class YamlFile(pytest.File): - def collect(self): import yaml # we need a yaml parser, e.g. PyYAML @@ -19,7 +18,6 @@ class YamlFile(pytest.File): class YamlItem(pytest.Item): - def __init__(self, name, parent, spec): super(YamlItem, self).__init__(name, parent) self.spec = spec diff --git a/doc/en/example/py2py3/conftest.py b/doc/en/example/py2py3/conftest.py index 5d9a07e3e..9c1c6fa38 100644 --- a/doc/en/example/py2py3/conftest.py +++ b/doc/en/example/py2py3/conftest.py @@ -5,7 +5,6 @@ py3 = sys.version_info[0] >= 3 class DummyCollector(pytest.collect.File): - def collect(self): return [] diff --git a/doc/en/example/pythoncollection.py b/doc/en/example/pythoncollection.py index 3603361c3..b134d809d 100644 --- a/doc/en/example/pythoncollection.py +++ b/doc/en/example/pythoncollection.py @@ -7,7 +7,6 @@ def test_function(): class TestClass(object): - def test_method(self): pass diff --git a/src/_pytest/_code/code.py b/src/_pytest/_code/code.py index cb788c17f..0e5e580b6 100644 --- a/src/_pytest/_code/code.py +++ b/src/_pytest/_code/code.py @@ -274,6 +274,7 @@ class Traceback(list): """ Traceback objects encapsulate and offer higher level access to Traceback entries. """ + Entry = TracebackEntry def __init__(self, tb, excinfo=None): @@ -382,8 +383,11 @@ class ExceptionInfo(object): """ wraps sys.exc_info() objects and offers help for navigating the traceback. """ + _striptext = "" - _assert_start_repr = "AssertionError(u'assert " if _PY2 else "AssertionError('assert " + _assert_start_repr = ( + "AssertionError(u'assert " if _PY2 else "AssertionError('assert " + ) def __init__(self, tup=None, exprinfo=None): import _pytest._code @@ -424,7 +428,7 @@ class ExceptionInfo(object): text = text.rstrip() if tryshort: if text.startswith(self._striptext): - text = text[len(self._striptext):] + text = text[len(self._striptext) :] return text def errisinstance(self, exc): @@ -497,6 +501,7 @@ class ExceptionInfo(object): @attr.s class FormattedExcinfo(object): """ presenting information about failing Functions and Generators. """ + # for traceback entries flow_marker = ">" fail_marker = "E" @@ -556,7 +561,7 @@ class FormattedExcinfo(object): for line in source.lines[:line_index]: lines.append(space_prefix + line) lines.append(self.flow_marker + " " + source.lines[line_index]) - for line in source.lines[line_index + 1:]: + for line in source.lines[line_index + 1 :]: lines.append(space_prefix + line) if excinfo is not None: indent = 4 if short else self._getindent(source) @@ -691,7 +696,7 @@ class FormattedExcinfo(object): else: if recursionindex is not None: extraline = "!!! Recursion detected (same locals & position)" - traceback = traceback[:recursionindex + 1] + traceback = traceback[: recursionindex + 1] else: extraline = None @@ -722,15 +727,19 @@ class FormattedExcinfo(object): repr_chain += [(reprtraceback, reprcrash, descr)] if e.__cause__ is not None: e = e.__cause__ - excinfo = ExceptionInfo( - (type(e), e, e.__traceback__) - ) if e.__traceback__ else None + excinfo = ( + ExceptionInfo((type(e), e, e.__traceback__)) + if e.__traceback__ + else None + ) descr = "The above exception was the direct cause of the following exception:" - elif (e.__context__ is not None and not e.__suppress_context__): + elif e.__context__ is not None and not e.__suppress_context__: e = e.__context__ - excinfo = ExceptionInfo( - (type(e), e, e.__traceback__) - ) if e.__traceback__ else None + excinfo = ( + ExceptionInfo((type(e), e, e.__traceback__)) + if e.__traceback__ + else None + ) descr = "During handling of the above exception, another exception occurred:" else: e = None @@ -739,7 +748,6 @@ class FormattedExcinfo(object): class TerminalRepr(object): - def __str__(self): s = self.__unicode__() if _PY2: @@ -759,7 +767,6 @@ class TerminalRepr(object): class ExceptionRepr(TerminalRepr): - def __init__(self): self.sections = [] @@ -773,7 +780,6 @@ class ExceptionRepr(TerminalRepr): class ExceptionChainRepr(ExceptionRepr): - def __init__(self, chain): super(ExceptionChainRepr, self).__init__() self.chain = chain @@ -792,7 +798,6 @@ class ExceptionChainRepr(ExceptionRepr): class ReprExceptionInfo(ExceptionRepr): - def __init__(self, reprtraceback, reprcrash): super(ReprExceptionInfo, self).__init__() self.reprtraceback = reprtraceback @@ -831,7 +836,6 @@ class ReprTraceback(TerminalRepr): class ReprTracebackNative(ReprTraceback): - def __init__(self, tblines): self.style = "native" self.reprentries = [ReprEntryNative(tblines)] @@ -885,7 +889,6 @@ class ReprEntry(TerminalRepr): class ReprFileLocation(TerminalRepr): - def __init__(self, path, lineno, message): self.path = str(path) self.lineno = lineno @@ -903,7 +906,6 @@ class ReprFileLocation(TerminalRepr): class ReprLocals(TerminalRepr): - def __init__(self, lines): self.lines = lines @@ -913,7 +915,6 @@ class ReprLocals(TerminalRepr): class ReprFuncArgs(TerminalRepr): - def __init__(self, args): self.args = args diff --git a/src/_pytest/_code/source.py b/src/_pytest/_code/source.py index 6b982a4ca..711408f61 100644 --- a/src/_pytest/_code/source.py +++ b/src/_pytest/_code/source.py @@ -17,6 +17,7 @@ class Source(object): """ an immutable object holding a source code fragment, possibly deindenting it. """ + _compilecounter = 0 def __init__(self, *parts, **kwargs): @@ -60,7 +61,7 @@ class Source(object): if key.step not in (None, 1): raise IndexError("cannot slice a Source with a step") newsource = Source() - newsource.lines = self.lines[key.start:key.stop] + newsource.lines = self.lines[key.start : key.stop] return newsource def __len__(self): @@ -178,7 +179,7 @@ class Source(object): except SyntaxError: ex = sys.exc_info()[1] # re-represent syntax errors from parsing python strings - msglines = self.lines[:ex.lineno] + msglines = self.lines[: ex.lineno] if ex.offset: msglines.append(" " * ex.offset + "^") msglines.append("(code was compiled probably from here: %s)" % filename) @@ -313,7 +314,7 @@ def deindent(lines, offset=None): except (IndentationError, tokenize.TokenError): pass # Add any lines we didn't see. E.g. if an exception was raised. - newlines.extend(lines[len(newlines):]) + newlines.extend(lines[len(newlines) :]) return newlines diff --git a/src/_pytest/assertion/rewrite.py b/src/_pytest/assertion/rewrite.py index 92f4ab10d..bc18aa1fc 100644 --- a/src/_pytest/assertion/rewrite.py +++ b/src/_pytest/assertion/rewrite.py @@ -319,7 +319,7 @@ def _rewrite_test(config, fn): if ( not source.startswith(BOM_UTF8) and cookie_re.match(source[0:end1]) is None - and cookie_re.match(source[end1 + 1:end2]) is None + and cookie_re.match(source[end1 + 1 : end2]) is None ): if hasattr(state, "_indecode"): # encodings imported us again, so don't rewrite. diff --git a/src/_pytest/assertion/util.py b/src/_pytest/assertion/util.py index bcb800a4a..08213c80e 100644 --- a/src/_pytest/assertion/util.py +++ b/src/_pytest/assertion/util.py @@ -322,7 +322,7 @@ def _compare_eq_dict(left, right, verbose=False): def _notin_text(term, text, verbose=False): index = text.find(term) head = text[:index] - tail = text[index + len(term):] + tail = text[index + len(term) :] correct_text = head + tail diff = _diff_text(correct_text, text, verbose) newdiff = [u("%s is contained here:") % py.io.saferepr(term, maxsize=42)] diff --git a/src/_pytest/cacheprovider.py b/src/_pytest/cacheprovider.py index eb0fcc06f..53b6ebb61 100755 --- a/src/_pytest/cacheprovider.py +++ b/src/_pytest/cacheprovider.py @@ -18,7 +18,6 @@ from os.path import sep as _sep, altsep as _altsep class Cache(object): - def __init__(self, config): self.config = config self._cachedir = Cache.cache_dir_from_config(config) @@ -199,9 +198,7 @@ class NFPlugin(object): items[:] = self._get_increasing_order( six.itervalues(new_items) - ) + self._get_increasing_order( - six.itervalues(other_items) - ) + ) + self._get_increasing_order(six.itervalues(other_items)) self.cached_nodeids = [x.nodeid for x in items if isinstance(x, pytest.Item)] def _get_increasing_order(self, items): diff --git a/src/_pytest/capture.py b/src/_pytest/capture.py index 7a57adb75..faa767a86 100644 --- a/src/_pytest/capture.py +++ b/src/_pytest/capture.py @@ -531,7 +531,6 @@ class FDCapture(FDCaptureBinary): class SysCapture(object): - def __init__(self, fd, tmpfile=None): name = patchsysdict[fd] self._old = getattr(sys, name) @@ -569,7 +568,6 @@ class SysCapture(object): class SysCaptureBinary(SysCapture): - def snap(self): res = self.tmpfile.buffer.getvalue() self.tmpfile.seek(0) diff --git a/src/_pytest/compat.py b/src/_pytest/compat.py index 7abd3d53f..3ca27fe60 100644 --- a/src/_pytest/compat.py +++ b/src/_pytest/compat.py @@ -72,12 +72,8 @@ def iscoroutinefunction(func): Note: copied and modified from Python 3.5's builtin couroutines.py to avoid import asyncio directly, which in turns also initializes the "logging" module as side-effect (see issue #8). """ - return ( - getattr(func, "_is_coroutine", False) - or ( - hasattr(inspect, "iscoroutinefunction") - and inspect.iscoroutinefunction(func) - ) + return getattr(func, "_is_coroutine", False) or ( + hasattr(inspect, "iscoroutinefunction") and inspect.iscoroutinefunction(func) ) @@ -138,17 +134,13 @@ def getfuncargnames(function, is_method=False, cls=None): # If this function should be treated as a bound method even though # it's passed as an unbound method or function, remove the first # parameter name. - if ( - is_method - or ( - cls - and not isinstance(cls.__dict__.get(function.__name__, None), staticmethod) - ) + if is_method or ( + cls and not isinstance(cls.__dict__.get(function.__name__, None), staticmethod) ): arg_names = arg_names[1:] # Remove any names that will be replaced with mocks. if hasattr(function, "__wrapped__"): - arg_names = arg_names[num_mock_patch_args(function):] + arg_names = arg_names[num_mock_patch_args(function) :] return arg_names @@ -340,7 +332,6 @@ if _PY2: from py.io import TextIO class CaptureIO(TextIO): - @property def encoding(self): return getattr(self, "_encoding", "UTF-8") @@ -350,7 +341,6 @@ else: import io class CaptureIO(io.TextIOWrapper): - def __init__(self): super(CaptureIO, self).__init__( io.BytesIO(), encoding="UTF-8", newline="", write_through=True diff --git a/src/_pytest/config/__init__.py b/src/_pytest/config/__init__.py index 11348b80d..7e7f3b6d2 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -30,7 +30,6 @@ hookspec = HookspecMarker("pytest") class ConftestImportFailure(Exception): - def __init__(self, path, excinfo): Exception.__init__(self, path, excinfo) self.path = path @@ -318,9 +317,11 @@ class PytestPluginManager(PluginManager): self._configured = True def _warn(self, message): - kwargs = message if isinstance(message, dict) else { - "code": "I1", "message": message, "fslocation": None, "nodeid": None - } + kwargs = ( + message + if isinstance(message, dict) + else {"code": "I1", "message": message, "fslocation": None, "nodeid": None} + ) self.hook.pytest_logwarning.call_historic(kwargs=kwargs) # @@ -335,9 +336,11 @@ class PytestPluginManager(PluginManager): here. """ current = py.path.local() - self._confcutdir = current.join( - namespace.confcutdir, abs=True - ) if namespace.confcutdir else None + self._confcutdir = ( + current.join(namespace.confcutdir, abs=True) + if namespace.confcutdir + else None + ) self._noconftest = namespace.noconftest testpaths = namespace.file_or_dir foundanchor = False @@ -405,7 +408,9 @@ class PytestPluginManager(PluginManager): try: mod = conftestpath.pyimport() if hasattr(mod, "pytest_plugins") and self._configured: - from _pytest.deprecated import PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST + from _pytest.deprecated import ( + PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST + ) warnings.warn(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST) except Exception: @@ -477,7 +482,8 @@ class PytestPluginManager(PluginManager): except ImportError as e: new_exc_type = ImportError new_exc_message = 'Error importing plugin "%s": %s' % ( - modname, safe_str(e.args[0]) + modname, + safe_str(e.args[0]), ) new_exc = new_exc_type(new_exc_message) @@ -518,7 +524,6 @@ def _ensure_removed_sysmodule(modname): class Notset(object): - def __repr__(self): return "" diff --git a/src/_pytest/config/argparsing.py b/src/_pytest/config/argparsing.py index 781d8e8c4..21d99b0ce 100644 --- a/src/_pytest/config/argparsing.py +++ b/src/_pytest/config/argparsing.py @@ -149,6 +149,7 @@ class Argument(object): and ignoring choices and integer prefixes https://docs.python.org/3/library/optparse.html#optparse-standard-option-types """ + _typ_map = {"int": int, "string": str, "float": float, "complex": complex} def __init__(self, *names, **attrs): @@ -274,7 +275,6 @@ class Argument(object): class OptionGroup(object): - def __init__(self, name, description="", parser=None): self.name = name self.description = description @@ -312,7 +312,6 @@ class OptionGroup(object): class MyOptionParser(argparse.ArgumentParser): - def __init__(self, parser, extra_info=None): if not extra_info: extra_info = {} @@ -378,9 +377,8 @@ class DropShorterLongHelpFormatter(argparse.HelpFormatter): xxoption = option[2:] if xxoption.split()[0] not in option_map: shortened = xxoption.replace("-", "") - if ( - shortened not in short_long - or len(short_long[shortened]) < len(xxoption) + if shortened not in short_long or len(short_long[shortened]) < len( + xxoption ): short_long[shortened] = xxoption # now short_long has been filled out to the longest with dashes diff --git a/src/_pytest/config/exceptions.py b/src/_pytest/config/exceptions.py index 64bae834d..19fe5cb08 100644 --- a/src/_pytest/config/exceptions.py +++ b/src/_pytest/config/exceptions.py @@ -5,4 +5,5 @@ class UsageError(Exception): class PrintHelp(Exception): """Raised when pytest should print it's help to skip the rest of the argument parsing and validation.""" + pass diff --git a/src/_pytest/config/findpaths.py b/src/_pytest/config/findpaths.py index fde7bddb9..234aa69c7 100644 --- a/src/_pytest/config/findpaths.py +++ b/src/_pytest/config/findpaths.py @@ -74,7 +74,6 @@ def get_common_ancestor(paths): def get_dirs_from_args(args): - def is_option(x): return str(x).startswith("-") diff --git a/src/_pytest/debugging.py b/src/_pytest/debugging.py index 2e253aaa2..3fc3eb552 100644 --- a/src/_pytest/debugging.py +++ b/src/_pytest/debugging.py @@ -65,6 +65,7 @@ def pytest_configure(config): class pytestPDB(object): """ Pseudo PDB that defers to the real pdb. """ + _pluginmanager = None _config = None _pdb_cls = pdb.Pdb @@ -87,7 +88,6 @@ class pytestPDB(object): class PdbInvoke(object): - def pytest_exception_interact(self, node, call, report): capman = node.config.pluginmanager.getplugin("capturemanager") if capman: @@ -114,7 +114,9 @@ def _enter_pdb(node, excinfo, rep): showcapture = node.config.option.showcapture for sectionname, content in ( - ("stdout", rep.capstdout), ("stderr", rep.capstderr), ("log", rep.caplog) + ("stdout", rep.capstdout), + ("stderr", rep.capstderr), + ("log", rep.caplog), ): if showcapture in (sectionname, "all") and content: tw.sep(">", "captured " + sectionname) @@ -148,9 +150,7 @@ def _find_last_non_hidden_frame(stack): def post_mortem(t): - class Pdb(pytestPDB._pdb_cls): - def get_stack(self, f, t): stack, i = pdb.Pdb.get_stack(self, f, t) if f is None: diff --git a/src/_pytest/deprecated.py b/src/_pytest/deprecated.py index 7ebdcf999..b3c40c2ae 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -22,7 +22,9 @@ FUNCARG_PREFIX = ( "Please remove the prefix and use the @pytest.fixture decorator instead." ) -CFG_PYTEST_SECTION = "[pytest] section in {filename} files is deprecated, use [tool:pytest] instead." +CFG_PYTEST_SECTION = ( + "[pytest] section in {filename} files is deprecated, use [tool:pytest] instead." +) GETFUNCARGVALUE = "use of getfuncargvalue is deprecated, use getfixturevalue" diff --git a/src/_pytest/doctest.py b/src/_pytest/doctest.py index b0a3ad08d..57d3367e4 100644 --- a/src/_pytest/doctest.py +++ b/src/_pytest/doctest.py @@ -105,7 +105,6 @@ def _is_doctest(config, path, parent): class ReprFailDoctest(TerminalRepr): - def __init__(self, reprlocation_lines): # List of (reprlocation, lines) tuples self.reprlocation_lines = reprlocation_lines @@ -118,7 +117,6 @@ class ReprFailDoctest(TerminalRepr): class MultipleDoctestFailures(Exception): - def __init__(self, failures): super(MultipleDoctestFailures, self).__init__() self.failures = failures @@ -172,7 +170,6 @@ def _get_runner(checker=None, verbose=None, optionflags=0, continue_on_failure=T class DoctestItem(pytest.Item): - def __init__(self, name, parent, runner=None, dtest=None): super(DoctestItem, self).__init__(name, parent) self.runner = runner @@ -243,7 +240,7 @@ class DoctestItem(pytest.Item): for (i, x) in enumerate(lines) ] # trim docstring error lines to 10 - lines = lines[max(example.lineno - 9, 0):example.lineno + 1] + lines = lines[max(example.lineno - 9, 0) : example.lineno + 1] else: lines = [ "EXAMPLE LOCATION UNKNOWN, not showing all tests of that example" @@ -255,9 +252,7 @@ class DoctestItem(pytest.Item): if isinstance(failure, doctest.DocTestFailure): lines += checker.output_difference( example, failure.got, report_choice - ).split( - "\n" - ) + ).split("\n") else: inner_excinfo = ExceptionInfo(failure.exc_info) lines += ["UNEXPECTED EXCEPTION: %s" % repr(inner_excinfo.value)] @@ -347,7 +342,6 @@ def _check_all_skipped(test): class DoctestModule(pytest.Module): - def collect(self): import doctest @@ -480,9 +474,7 @@ def _get_report_choice(key): DOCTEST_REPORT_CHOICE_NDIFF: doctest.REPORT_NDIFF, DOCTEST_REPORT_CHOICE_ONLY_FIRST_FAILURE: doctest.REPORT_ONLY_FIRST_FAILURE, DOCTEST_REPORT_CHOICE_NONE: 0, - }[ - key - ] + }[key] def _fix_spoof_python2(runner, encoding): @@ -502,7 +494,6 @@ def _fix_spoof_python2(runner, encoding): from doctest import _SpoofOut class UnicodeSpoof(_SpoofOut): - def getvalue(self): result = _SpoofOut.getvalue(self) if encoding and isinstance(result, bytes): diff --git a/src/_pytest/fixtures.py b/src/_pytest/fixtures.py index 495e6b9b3..151346413 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -65,7 +65,6 @@ scope2props["function"] = scope2props["instance"] + ("function", "keywords") def scopeproperty(name=None, doc=None): - def decoratescope(func): scopename = name or func.__name__ @@ -276,7 +275,6 @@ def get_direct_param_fixture_func(request): class FuncFixtureInfo(object): - def __init__(self, argnames, names_closure, name2fixturedefs): self.argnames = argnames self.names_closure = names_closure @@ -698,7 +696,6 @@ class FixtureLookupError(LookupError): class FixtureLookupErrorRepr(TerminalRepr): - def __init__(self, filename, firstlineno, tblines, errorstring, argname): self.tblines = tblines self.errorstring = errorstring @@ -837,9 +834,10 @@ class FixtureDef(object): return hook.pytest_fixture_setup(fixturedef=self, request=request) def __repr__(self): - return ( - "" - % (self.argname, self.scope, self.baseid) + return "" % ( + self.argname, + self.scope, + self.baseid, ) @@ -1064,7 +1062,7 @@ class FixtureManager(object): if nodeid.startswith(baseid): if baseid: i = len(baseid) - nextchar = nodeid[i:i + 1] + nextchar = nodeid[i : i + 1] if nextchar and nextchar not in ":/": continue autousenames.extend(basenames) @@ -1171,7 +1169,7 @@ class FixtureManager(object): self.config.warn( "C1", deprecated.FUNCARG_PREFIX.format(name=name), nodeid=nodeid ) - name = name[len(self._argprefix):] + name = name[len(self._argprefix) :] elif not isinstance(marker, FixtureFunctionMarker): # magic globals with __getattr__ might have got us a wrong # fixture attribute diff --git a/src/_pytest/helpconfig.py b/src/_pytest/helpconfig.py index 5514fec40..12c3339c6 100644 --- a/src/_pytest/helpconfig.py +++ b/src/_pytest/helpconfig.py @@ -149,7 +149,7 @@ def showhelp(config): type = "string" spec = "%s (%s)" % (name, type) line = " %-24s %s" % (spec, help) - tw.line(line[:tw.fullwidth]) + tw.line(line[: tw.fullwidth]) tw.line() tw.line("environment variables:") diff --git a/src/_pytest/junitxml.py b/src/_pytest/junitxml.py index 29da27de7..86aad69bb 100644 --- a/src/_pytest/junitxml.py +++ b/src/_pytest/junitxml.py @@ -55,7 +55,6 @@ _py_ext_re = re.compile(r"\.py$") def bin_xml_escape(arg): - def repl(matchobj): i = ord(matchobj.group()) if i <= 0xFF: @@ -67,7 +66,6 @@ def bin_xml_escape(arg): class _NodeReporter(object): - def __init__(self, nodeid, xml): self.id = nodeid @@ -358,7 +356,6 @@ def mangle_test_address(address): class LogXML(object): - def __init__(self, logfile, prefix, suite_name="pytest", logging="no"): logfile = os.path.expanduser(os.path.expandvars(logfile)) self.logfile = os.path.normpath(os.path.abspath(logfile)) @@ -544,9 +541,7 @@ class LogXML(object): skips=self.stats["skipped"], tests=numtests, time="%.3f" % suite_time_delta, - ).unicode( - indent=0 - ) + ).unicode(indent=0) ) logfile.close() diff --git a/src/_pytest/logging.py b/src/_pytest/logging.py index 00bb9aeb5..70b6592c4 100644 --- a/src/_pytest/logging.py +++ b/src/_pytest/logging.py @@ -409,9 +409,7 @@ class LoggingPlugin(object): """ return self._config.getoption( "--log-cli-level" - ) is not None or self._config.getini( - "log_cli" - ) + ) is not None or self._config.getini("log_cli") @contextmanager def _runtest_for(self, item, when): diff --git a/src/_pytest/main.py b/src/_pytest/main.py index 23562358d..7feeaf8cf 100644 --- a/src/_pytest/main.py +++ b/src/_pytest/main.py @@ -343,7 +343,6 @@ def _patched_find_module(): class FSHookProxy(object): - def __init__(self, fspath, pm, remove_mods): self.fspath = fspath self.pm = pm @@ -361,6 +360,7 @@ class NoMatch(Exception): class Interrupted(KeyboardInterrupt): """ signals an interrupted test run. """ + __module__ = "builtins" # for py3 diff --git a/src/_pytest/mark/evaluate.py b/src/_pytest/mark/evaluate.py index a3d11ee0f..d4bfdaf34 100644 --- a/src/_pytest/mark/evaluate.py +++ b/src/_pytest/mark/evaluate.py @@ -21,7 +21,6 @@ def cached_eval(config, expr, d): class MarkEvaluator(object): - def __init__(self, item, name): self.item = item self._marks = None diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py index ceacc5c6b..eb0349c2f 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -25,9 +25,10 @@ def alias(name, warning=None): def istestfunc(func): - return hasattr(func, "__call__") and getattr( - func, "__name__", "" - ) != "" + return ( + hasattr(func, "__call__") + and getattr(func, "__name__", "") != "" + ) def get_empty_parameterset_mark(config, argnames, func): @@ -40,18 +41,20 @@ def get_empty_parameterset_mark(config, argnames, func): raise LookupError(requested_mark) fs, lineno = getfslineno(func) reason = "got empty parameter set %r, function %s at %s:%d" % ( - argnames, func.__name__, fs, lineno + argnames, + func.__name__, + fs, + lineno, ) return mark(reason=reason) class ParameterSet(namedtuple("ParameterSet", "values, marks, id")): - @classmethod def param(cls, *values, **kw): marks = kw.pop("marks", ()) if isinstance(marks, MarkDecorator): - marks = marks, + marks = (marks,) else: assert isinstance(marks, (tuple, list, set)) @@ -88,7 +91,7 @@ class ParameterSet(namedtuple("ParameterSet", "values, marks, id")): argval = argval.args[-1] assert not isinstance(argval, ParameterSet) if legacy_force_tuple: - argval = argval, + argval = (argval,) if newmarks: warnings.warn(MARK_PARAMETERSET_UNPACKING) @@ -333,6 +336,7 @@ class MarkGenerator(object): will set a 'slowtest' :class:`MarkInfo` object on the ``test_function`` object. """ + _config = None def __getattr__(self, name): @@ -362,7 +366,6 @@ MARK_GEN = MarkGenerator() class NodeKeywords(MappingMixin): - def __init__(self, node): self.node = node self.parent = node.parent @@ -409,6 +412,7 @@ class NodeMarkers(object): unstable api """ + own_markers = attr.ib(default=attr.Factory(list)) def update(self, add_markers): diff --git a/src/_pytest/monkeypatch.py b/src/_pytest/monkeypatch.py index 16080b5d5..e6928f96b 100644 --- a/src/_pytest/monkeypatch.py +++ b/src/_pytest/monkeypatch.py @@ -86,7 +86,6 @@ def derive_importpath(import_path, raising): class Notset(object): - def __repr__(self): return "" diff --git a/src/_pytest/nodes.py b/src/_pytest/nodes.py index ef74c53eb..e4b10fe66 100644 --- a/src/_pytest/nodes.py +++ b/src/_pytest/nodes.py @@ -48,7 +48,7 @@ def ischildnode(baseid, nodeid): node_parts = _splitnode(nodeid) if len(node_parts) < len(base_parts): return False - return node_parts[:len(base_parts)] == base_parts + return node_parts[: len(base_parts)] == base_parts @attr.s @@ -335,7 +335,6 @@ def _check_initialpaths_for_relpath(session, fspath): class FSCollector(Collector): - def __init__(self, fspath, parent=None, config=None, session=None, nodeid=None): fspath = py.path.local(fspath) # xxx only for test_resultlog.py? name = fspath.basename @@ -369,6 +368,7 @@ class Item(Node): """ a basic test invocation item. Note that for a single function there might be multiple test invocation items. """ + nextitem = None def __init__(self, name, parent=None, config=None, session=None, nodeid=None): diff --git a/src/_pytest/outcomes.py b/src/_pytest/outcomes.py index 8a3662e1b..63b8453b7 100644 --- a/src/_pytest/outcomes.py +++ b/src/_pytest/outcomes.py @@ -43,6 +43,7 @@ class Skipped(OutcomeException): class Failed(OutcomeException): """ raised from an explicit call to pytest.fail() """ + __module__ = "builtins" diff --git a/src/_pytest/pytester.py b/src/_pytest/pytester.py index c9defe03a..ce1c8ea1c 100644 --- a/src/_pytest/pytester.py +++ b/src/_pytest/pytester.py @@ -62,7 +62,6 @@ def pytest_configure(config): class LsofFdLeakChecker(object): - def get_open_files(self): out = self._exec_lsof() open_files = self._parse_lsof_output(out) @@ -73,7 +72,6 @@ class LsofFdLeakChecker(object): return py.process.cmdexec("lsof -Ffn0 -p %d" % pid) def _parse_lsof_output(self, out): - def isopen(line): return line.startswith("f") and ( "deleted" not in line @@ -195,7 +193,6 @@ def _pytest(request): class PytestArg(object): - def __init__(self, request): self.request = request @@ -211,7 +208,6 @@ def get_public_names(values): class ParsedCall(object): - def __init__(self, name, kwargs): self.__dict__.update(kwargs) self._name = name @@ -423,13 +419,12 @@ class RunResult(object): "failed": d.get("failed", 0), "error": d.get("error", 0), } - assert ( - obtained == dict(passed=passed, skipped=skipped, failed=failed, error=error) + assert obtained == dict( + passed=passed, skipped=skipped, failed=failed, error=error ) class CwdSnapshot(object): - def __init__(self): self.__saved = os.getcwd() @@ -438,7 +433,6 @@ class CwdSnapshot(object): class SysModulesSnapshot(object): - def __init__(self, preserve=None): self.__preserve = preserve self.__saved = dict(sys.modules) @@ -453,7 +447,6 @@ class SysModulesSnapshot(object): class SysPathsSnapshot(object): - def __init__(self): self.__saved = list(sys.path), list(sys.meta_path) @@ -778,7 +771,6 @@ class Testdir(object): rec = [] class Collect(object): - def pytest_configure(x, config): rec.append(self.make_hook_recorder(config.pluginmanager)) @@ -910,8 +902,10 @@ class Testdir(object): for item in items: if item.name == funcname: return item - assert 0, ( - "%r item not found in module:\n%s\nitems: %s" % (funcname, source, items) + assert 0, "%r item not found in module:\n%s\nitems: %s" % ( + funcname, + source, + items, ) def getitems(self, source): @@ -1115,7 +1109,6 @@ def getdecoded(out): class LineComp(object): - def __init__(self): self.stringio = py.io.TextIO() @@ -1202,7 +1195,7 @@ class LineMatcher(object): """ for i, line in enumerate(self.lines): if fnline == line or fnmatch(line, fnline): - return self.lines[i + 1:] + return self.lines[i + 1 :] raise ValueError("line %r not found in output" % fnline) def _log(self, *args): diff --git a/src/_pytest/python.py b/src/_pytest/python.py index 0dcecdd55..8a9c15dc2 100644 --- a/src/_pytest/python.py +++ b/src/_pytest/python.py @@ -69,13 +69,12 @@ def filter_traceback(entry): # entry.path might point to a non-existing file, in which case it will # also return a str object. see #1133 p = py.path.local(entry.path) - return not p.relto(_pluggy_dir) and not p.relto(_pytest_dir) and not p.relto( - _py_dir + return ( + not p.relto(_pluggy_dir) and not p.relto(_pytest_dir) and not p.relto(_py_dir) ) def pyobj_property(name): - def get(self): node = self.getparent(getattr(__import__("pytest"), name)) if node is not None: @@ -258,7 +257,6 @@ class PyobjMixin(PyobjContext): super(PyobjMixin, self).__init__(*k, **kw) def obj(): - def fget(self): obj = getattr(self, "_obj", None) if obj is None: @@ -320,7 +318,6 @@ class PyobjMixin(PyobjContext): class PyCollector(PyobjMixin, nodes.Collector): - def funcnamefilter(self, name): return self._matches_prefix_or_glob_option("python_functions", name) @@ -487,9 +484,11 @@ class Module(nodes.File, PyCollector): exc_info = ExceptionInfo() if self.config.getoption("verbose") < 2: exc_info.traceback = exc_info.traceback.filter(filter_traceback) - exc_repr = exc_info.getrepr( - style="short" - ) if exc_info.traceback else exc_info.exconly() + exc_repr = ( + exc_info.getrepr(style="short") + if exc_info.traceback + else exc_info.exconly() + ) formatted_tb = safe_str(exc_repr) raise self.CollectError( "ImportError while importing test module '{fspath}'.\n" @@ -673,7 +672,6 @@ class FunctionMixin(PyobjMixin): class Generator(FunctionMixin, PyCollector): - def collect(self): # test generators are seen as collectors but they also # invoke setup/teardown on popular request @@ -728,7 +726,6 @@ def hasnew(obj): class CallSpec2(object): - def __init__(self, metafunc): self.metafunc = metafunc self.funcargs = {} @@ -1002,9 +999,9 @@ def _find_parametrized_scope(argnames, arg2fixturedefs, indirect): from _pytest.fixtures import scopes indirect_as_list = isinstance(indirect, (list, tuple)) - all_arguments_are_fixtures = indirect is True or indirect_as_list and len( - indirect - ) == argnames + all_arguments_are_fixtures = ( + indirect is True or indirect_as_list and len(indirect) == argnames + ) if all_arguments_are_fixtures: fixturedefs = arg2fixturedefs or {} used_scopes = [fixturedef[0].scope for name, fixturedef in fixturedefs.items()] @@ -1026,8 +1023,9 @@ def _idval(val, argname, idx, idfn, config=None): # See issue https://github.com/pytest-dev/pytest/issues/2169 import warnings - msg = "Raised while trying to determine id of parameter %s at position %d." % ( - argname, idx + msg = ( + "Raised while trying to determine id of parameter %s at position %d." + % (argname, idx) ) msg += "\nUpdate your code as this will raise an error in pytest-4.0." warnings.warn(msg, DeprecationWarning) @@ -1222,6 +1220,7 @@ class Function(FunctionMixin, nodes.Item, fixtures.FuncargnamesCompatAttr): """ a Function Item is responsible for setting up and executing a Python test function. """ + _genid = None # disable since functions handle it themselfes _ALLOW_MARKERS = False diff --git a/src/_pytest/python_api.py b/src/_pytest/python_api.py index 5ee16c2f8..d88d1c88b 100644 --- a/src/_pytest/python_api.py +++ b/src/_pytest/python_api.py @@ -174,6 +174,7 @@ class ApproxScalar(ApproxBase): """ Perform approximate comparisons for single numbers only. """ + DEFAULT_ABSOLUTE_TOLERANCE = 1e-12 DEFAULT_RELATIVE_TOLERANCE = 1e-6 @@ -271,9 +272,7 @@ class ApproxScalar(ApproxBase): # we aren't even going to use it. relative_tolerance = set_default( self.rel, self.DEFAULT_RELATIVE_TOLERANCE - ) * abs( - self.expected - ) + ) * abs(self.expected) if relative_tolerance < 0: raise ValueError( @@ -652,7 +651,6 @@ raises.Exception = fail.Exception class RaisesContext(object): - def __init__(self, expected_exception, message, match_expr): self.expected_exception = expected_exception self.message = message diff --git a/src/_pytest/recwarn.py b/src/_pytest/recwarn.py index 7839f5700..177757f27 100644 --- a/src/_pytest/recwarn.py +++ b/src/_pytest/recwarn.py @@ -193,13 +193,10 @@ class WarningsRecorder(warnings.catch_warnings): class WarningsChecker(WarningsRecorder): - def __init__(self, expected_warning=None, match_expr=None): super(WarningsChecker, self).__init__() - msg = ( - "exceptions must be old-style classes or " "derived from Warning, not %s" - ) + msg = "exceptions must be old-style classes or " "derived from Warning, not %s" if isinstance(expected_warning, tuple): for exc in expected_warning: if not inspect.isclass(exc): diff --git a/src/_pytest/resultlog.py b/src/_pytest/resultlog.py index 8f300c983..0ad31b8bc 100644 --- a/src/_pytest/resultlog.py +++ b/src/_pytest/resultlog.py @@ -68,7 +68,6 @@ def generic_path(item): class ResultLog(object): - def __init__(self, config, logfile): self.config = config self.logfile = logfile # preferably line buffered diff --git a/src/_pytest/runner.py b/src/_pytest/runner.py index 18e925509..ee53642c7 100644 --- a/src/_pytest/runner.py +++ b/src/_pytest/runner.py @@ -186,6 +186,7 @@ def call_runtest_hook(item, when, **kwds): class CallInfo(object): """ Result/Exception info a function invocation. """ + #: None or ExceptionInfo object. excinfo = None @@ -221,13 +222,15 @@ def getslaveinfoline(node): d = node.slaveinfo ver = "%s.%s.%s" % d["version_info"][:3] node._slaveinfocache = s = "[%s] %s -- Python %s %s" % ( - d["id"], d["sysplatform"], ver, d["executable"] + d["id"], + d["sysplatform"], + ver, + d["executable"], ) return s class BaseReport(object): - def __init__(self, **kw): self.__dict__.update(kw) @@ -401,7 +404,9 @@ class TestReport(BaseReport): def __repr__(self): return "" % ( - self.nodeid, self.when, self.outcome + self.nodeid, + self.when, + self.outcome, ) @@ -442,7 +447,6 @@ def pytest_make_collect_report(collector): class CollectReport(BaseReport): - def __init__(self, nodeid, outcome, longrepr, result, sections=(), **extra): self.nodeid = nodeid self.outcome = outcome @@ -457,12 +461,13 @@ class CollectReport(BaseReport): def __repr__(self): return "" % ( - self.nodeid, len(self.result), self.outcome + self.nodeid, + len(self.result), + self.outcome, ) class CollectErrorRepr(TerminalRepr): - def __init__(self, msg): self.longrepr = msg @@ -529,7 +534,7 @@ class SetupState(object): def _teardown_towards(self, needed_collectors): exc = None while self.stack: - if self.stack == needed_collectors[:len(self.stack)]: + if self.stack == needed_collectors[: len(self.stack)]: break try: self._pop_and_teardown() @@ -551,7 +556,7 @@ class SetupState(object): for col in self.stack: if hasattr(col, "_prepare_exc"): py.builtin._reraise(*col._prepare_exc) - for col in needed_collectors[len(self.stack):]: + for col in needed_collectors[len(self.stack) :]: self.stack.append(col) try: col.setup() diff --git a/src/_pytest/skipping.py b/src/_pytest/skipping.py index a348d5484..64bc770ae 100644 --- a/src/_pytest/skipping.py +++ b/src/_pytest/skipping.py @@ -157,9 +157,11 @@ def pytest_runtest_makereport(item, call): else: rep.outcome = "passed" rep.wasxfail = explanation - elif getattr(item, "_skipped_by_mark", False) and rep.skipped and type( - rep.longrepr - ) is tuple: + elif ( + getattr(item, "_skipped_by_mark", False) + and rep.skipped + and type(rep.longrepr) is tuple + ): # skipped by mark.skipif; change the location of the failure # to point to the item definition, otherwise it will display # the location of where the skip exception was raised within pytest @@ -274,7 +276,6 @@ def show_skipped(terminalreporter, lines): def shower(stat, format): - def show_(terminalreporter, lines): return show_simple(terminalreporter, lines, stat, format) diff --git a/src/_pytest/terminal.py b/src/_pytest/terminal.py index 9c4eec753..7dd2edd6f 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -220,7 +220,6 @@ class WarningReport(object): class TerminalReporter(object): - def __init__(self, config, file=None): import _pytest.config @@ -407,13 +406,16 @@ class TerminalReporter(object): def pytest_runtest_logfinish(self, nodeid): if self.verbosity <= 0 and self._show_progress_info: self._progress_nodeids_reported.add(nodeid) - last_item = len( - self._progress_nodeids_reported - ) == self._session.testscollected + last_item = ( + len(self._progress_nodeids_reported) == self._session.testscollected + ) if last_item: self._write_progress_information_filling_space() else: - past_edge = self._tw.chars_on_current_line + self._PROGRESS_LENGTH + 1 >= self._screen_width + past_edge = ( + self._tw.chars_on_current_line + self._PROGRESS_LENGTH + 1 + >= self._screen_width + ) if past_edge: msg = self._get_progress_information_message() self._tw.write(msg + "\n", cyan=True) @@ -462,8 +464,8 @@ class TerminalReporter(object): line = "collected " else: line = "collecting " - line += str(self._numcollected) + " item" + ( - "" if self._numcollected == 1 else "s" + line += ( + str(self._numcollected) + " item" + ("" if self._numcollected == 1 else "s") ) if errors: line += " / %d errors" % errors @@ -495,7 +497,9 @@ class TerminalReporter(object): verinfo = ".".join(map(str, sys.pypy_version_info[:3])) msg += "[pypy-%s-%s]" % (verinfo, sys.pypy_version_info[3]) msg += ", pytest-%s, py-%s, pluggy-%s" % ( - pytest.__version__, py.__version__, pluggy.__version__ + pytest.__version__, + py.__version__, + pluggy.__version__, ) if ( self.verbosity > 0 @@ -563,10 +567,10 @@ class TerminalReporter(object): for item in items: needed_collectors = item.listchain()[1:] # strip root node while stack: - if stack == needed_collectors[:len(stack)]: + if stack == needed_collectors[: len(stack)]: break stack.pop() - for col in needed_collectors[len(stack):]: + for col in needed_collectors[len(stack) :]: stack.append(col) # if col.name == "()": # continue @@ -624,11 +628,10 @@ class TerminalReporter(object): ) def _locationline(self, nodeid, fspath, lineno, domain): - def mkrel(nodeid): line = self.config.cwd_relative_nodeid(nodeid) if domain and line.endswith(domain): - line = line[:-len(domain)] + line = line[: -len(domain)] values = domain.split("[") values[0] = values[0].replace(".", "::") # don't replace '.' in params line += "[".join(values) diff --git a/src/_pytest/unittest.py b/src/_pytest/unittest.py index 6ad9fda88..d6e7cb272 100644 --- a/src/_pytest/unittest.py +++ b/src/_pytest/unittest.py @@ -163,15 +163,13 @@ class TestCaseFunction(Function): # implements the skipping machinery (see #2137) # analog to pythons Lib/unittest/case.py:run testMethod = getattr(self._testcase, self._testcase._testMethodName) - if ( - getattr(self._testcase.__class__, "__unittest_skip__", False) - or getattr(testMethod, "__unittest_skip__", False) + if getattr(self._testcase.__class__, "__unittest_skip__", False) or getattr( + testMethod, "__unittest_skip__", False ): # If the class or method was skipped. - skip_why = ( - getattr(self._testcase.__class__, "__unittest_skip_why__", "") - or getattr(testMethod, "__unittest_skip_why__", "") - ) + skip_why = getattr( + self._testcase.__class__, "__unittest_skip_why__", "" + ) or getattr(testMethod, "__unittest_skip_why__", "") try: # PY3, unittest2 on PY2 self._testcase._addSkip(self, self._testcase, skip_why) except TypeError: # PY2 diff --git a/src/_pytest/warnings.py b/src/_pytest/warnings.py index e023d0ab4..abd04801b 100644 --- a/src/_pytest/warnings.py +++ b/src/_pytest/warnings.py @@ -75,9 +75,8 @@ def catch_warnings_for_item(item): warn_msg = warning.message unicode_warning = False - if ( - compat._PY2 - and any(isinstance(m, compat.UNICODE_TYPES) for m in warn_msg.args) + if compat._PY2 and any( + isinstance(m, compat.UNICODE_TYPES) for m in warn_msg.args ): new_args = [] for m in warn_msg.args: diff --git a/tasks/generate.py b/tasks/generate.py index 398af70c9..89452aa5c 100644 --- a/tasks/generate.py +++ b/tasks/generate.py @@ -22,16 +22,16 @@ def announce(ctx, version): contributors = set(stdout.splitlines()) - template_name = "release.minor.rst" if version.endswith( - ".0" - ) else "release.patch.rst" - template_text = Path(__file__).parent.joinpath(template_name).read_text( - encoding="UTF-8" + template_name = ( + "release.minor.rst" if version.endswith(".0") else "release.patch.rst" + ) + template_text = ( + Path(__file__).parent.joinpath(template_name).read_text(encoding="UTF-8") ) - contributors_text = "\n".join( - "* {}".format(name) for name in sorted(contributors) - ) + "\n" + contributors_text = ( + "\n".join("* {}".format(name) for name in sorted(contributors)) + "\n" + ) text = template_text.format(version=version, contributors=contributors_text) target = Path(__file__).parent.joinpath( diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index c2eed419c..88c1f8740 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -13,7 +13,6 @@ from _pytest.main import EXIT_NOTESTSCOLLECTED, EXIT_USAGEERROR class TestGeneralUsage(object): - def test_config_error(self, testdir): testdir.makeconftest( """ @@ -458,7 +457,6 @@ class TestGeneralUsage(object): class TestInvocationVariants(object): - def test_earlyinit(self, testdir): p = testdir.makepyfile( """ @@ -557,9 +555,7 @@ class TestInvocationVariants(object): out, err = capsys.readouterr() def test_invoke_plugin_api(self, testdir, capsys): - class MyPlugin(object): - def pytest_addoption(self, parser): parser.addoption("--myopt") @@ -798,9 +794,10 @@ class TestInvocationVariants(object): """Test backward compatibility for get_plugin_manager function. See #787.""" import _pytest.config - assert type( - _pytest.config.get_plugin_manager() - ) is _pytest.config.PytestPluginManager + assert ( + type(_pytest.config.get_plugin_manager()) + is _pytest.config.PytestPluginManager + ) def test_has_plugin(self, request): """Test hasplugin function of the plugin manager (#932).""" diff --git a/testing/code/test_code.py b/testing/code/test_code.py index bfae36918..e098f136d 100644 --- a/testing/code/test_code.py +++ b/testing/code/test_code.py @@ -26,7 +26,6 @@ def test_code_gives_back_name_for_not_existing_file(): def test_code_with_class(): - class A(object): pass @@ -54,7 +53,6 @@ def test_code_source(): def test_frame_getsourcelineno_myself(): - def func(): return sys._getframe(0) @@ -65,7 +63,6 @@ def test_frame_getsourcelineno_myself(): def test_getstatement_empty_fullsource(): - def func(): return sys._getframe(0) @@ -111,7 +108,6 @@ def test_unicode_handling_syntax_error(): def test_code_getargs(): - def f1(x): pass @@ -138,7 +134,6 @@ def test_code_getargs(): def test_frame_getargs(): - def f1(x): return sys._getframe(0) @@ -165,7 +160,6 @@ def test_frame_getargs(): class TestExceptionInfo(object): - def test_bad_getsource(self): try: if False: @@ -178,7 +172,6 @@ class TestExceptionInfo(object): class TestTracebackEntry(object): - def test_getsource(self): try: if False: @@ -194,7 +187,6 @@ class TestTracebackEntry(object): class TestReprFuncArgs(object): - def test_not_raise_exception_with_mixed_encoding(self): from _pytest._code.code import ReprFuncArgs diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index f4044b6ec..4bac7ba4c 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -65,7 +65,6 @@ def test_excinfo_simple(): def test_excinfo_getstatement(): - def g(): raise ValueError @@ -112,7 +111,6 @@ def h(): class TestTraceback_f_g_h(object): - def setup_method(self, method): try: h() @@ -194,7 +192,6 @@ class TestTraceback_f_g_h(object): ], ) def test_traceback_filter_selective(self, tracebackhide, matching): - def f(): # raise ValueError @@ -224,7 +221,6 @@ class TestTraceback_f_g_h(object): assert len(ntraceback) == len(traceback) - 1 def test_traceback_recursion_index(self): - def f(n): if n < 10: n += 1 @@ -236,7 +232,6 @@ class TestTraceback_f_g_h(object): assert recindex == 3 def test_traceback_only_specific_recursion_errors(self, monkeypatch): - def f(n): if n == 0: raise RuntimeError("hello") @@ -248,7 +243,6 @@ class TestTraceback_f_g_h(object): assert "RuntimeError: hello" in str(repr.reprcrash) def test_traceback_no_recursion_index(self): - def do_stuff(): raise RuntimeError @@ -288,7 +282,6 @@ class TestTraceback_f_g_h(object): assert excinfo.traceback.recursionindex() is None def test_traceback_getcrashentry(self): - def i(): __tracebackhide__ = True raise ValueError @@ -312,7 +305,6 @@ class TestTraceback_f_g_h(object): assert entry.frame.code.name == "h" def test_traceback_getcrashentry_empty(self): - def g(): __tracebackhide__ = True raise ValueError @@ -429,10 +421,8 @@ def test_match_raises_error(testdir): class TestFormattedExcinfo(object): - @pytest.fixture def importasmod(self, request): - def importasmod(source): source = _pytest._code.Source(source) tmpdir = request.getfixturevalue("tmpdir") @@ -519,7 +509,6 @@ raise ValueError() pr = FormattedExcinfo() class FakeCode(object): - class raw(object): co_filename = "?" @@ -537,7 +526,6 @@ raise ValueError() f_globals = {} class FakeTracebackEntry(_pytest._code.Traceback.Entry): - def __init__(self, tb, excinfo=None): self.lineno = 5 + 3 @@ -882,7 +870,6 @@ raise ValueError() from _pytest._code.code import TerminalRepr class MyRepr(TerminalRepr): - def toterminal(self, tw): tw.line(py.builtin._totext("я", "utf-8")) @@ -1303,7 +1290,6 @@ def test_exception_repr_extraction_error_on_recursion(): """ class numpy_like(object): - def __eq__(self, other): if type(other) is numpy_like: raise ValueError( @@ -1343,7 +1329,6 @@ def test_no_recursion_index_on_recursion_error(): try: class RecursionDepthError(object): - def __getattr__(self, attr): return getattr(self, "_" + attr) diff --git a/testing/code/test_source.py b/testing/code/test_source.py index 56dad7567..34a6dc5d1 100644 --- a/testing/code/test_source.py +++ b/testing/code/test_source.py @@ -58,9 +58,7 @@ def test_source_from_function(): def test_source_from_method(): - class TestClass(object): - def test_method(self): pass @@ -75,7 +73,6 @@ def test_source_from_lines(): def test_source_from_inner_function(): - def f(): pass @@ -199,7 +196,6 @@ class TestSourceParsingAndCompiling(object): assert str(source) == "x=3" def test_compile_and_getsource_through_same_function(self): - def gensource(source): return _pytest._code.compile(source) @@ -337,7 +333,6 @@ class TestSourceParsingAndCompiling(object): @pytest.mark.parametrize("name", ["", None, "my"]) def test_compilefuncs_and_path_sanity(self, name): - def check(comp, name): co = comp(self.source, name) if not name: @@ -359,9 +354,7 @@ class TestSourceParsingAndCompiling(object): def test_getstartingblock_singleline(): - class A(object): - def __init__(self, *args): frame = sys._getframe(1) self.source = _pytest._code.Frame(frame).statement @@ -373,7 +366,6 @@ def test_getstartingblock_singleline(): def test_getline_finally(): - def c(): pass @@ -406,7 +398,6 @@ def test_getfuncsource_dynamic(): def test_getfuncsource_with_multine_string(): - def f(): c = """while True: pass @@ -538,14 +529,12 @@ def test_getfslineno(): def test_code_of_object_instance_with_call(): - class A(object): pass pytest.raises(TypeError, lambda: _pytest._code.Source(A())) class WithCall(object): - def __call__(self): pass @@ -553,7 +542,6 @@ def test_code_of_object_instance_with_call(): assert "pass" in str(code.source()) class Hello(object): - def __call__(self): pass diff --git a/testing/code/test_source_multiline_block.py b/testing/code/test_source_multiline_block.py index 92f7412eb..009bb87ae 100644 --- a/testing/code/test_source_multiline_block.py +++ b/testing/code/test_source_multiline_block.py @@ -14,7 +14,6 @@ def test_getstartingblock_multiline(): """ class A(object): - def __init__(self, *args): frame = sys._getframe(1) self.source = _pytest._code.Frame(frame).statement diff --git a/testing/deprecated_test.py b/testing/deprecated_test.py index 39ff1f1fc..b82dbcf7d 100644 --- a/testing/deprecated_test.py +++ b/testing/deprecated_test.py @@ -84,7 +84,6 @@ def test_str_args_deprecated(tmpdir, testdir): warnings = [] class Collect(object): - def pytest_logwarning(self, message): warnings.append(message) @@ -260,6 +259,7 @@ def test_pytest_plugins_in_non_top_level_conftest_deprecated_no_false_positives( ) res = testdir.runpytest_subprocess() assert res.ret == 0 - assert str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[ - 0 - ] not in res.stderr.str() + assert ( + str(PYTEST_PLUGINS_FROM_NON_TOP_LEVEL_CONFTEST).splitlines()[0] + not in res.stderr.str() + ) diff --git a/testing/logging/test_formatter.py b/testing/logging/test_formatter.py index ca2a41065..0348b215c 100644 --- a/testing/logging/test_formatter.py +++ b/testing/logging/test_formatter.py @@ -18,7 +18,6 @@ def test_coloredlogformatter(): ) class ColorConfig(object): - class option(object): pass @@ -26,9 +25,8 @@ def test_coloredlogformatter(): tw.hasmarkup = True formatter = ColoredLevelFormatter(tw, logfmt) output = formatter.format(record) - assert ( - output - == ("dummypath 10 " "\x1b[32mINFO \x1b[0m Test Message") + assert output == ( + "dummypath 10 " "\x1b[32mINFO \x1b[0m Test Message" ) tw.hasmarkup = False diff --git a/testing/logging/test_reporting.py b/testing/logging/test_reporting.py index 91ed2e475..0a8a58506 100644 --- a/testing/logging/test_reporting.py +++ b/testing/logging/test_reporting.py @@ -520,16 +520,22 @@ def test_sections_single_new_line_after_test_outcome(testdir, request): "=* 1 passed in *=", ] ) - assert re.search( - r"(.+)live log teardown(.+)\n(.+)WARNING(.+)\n(.+)WARNING(.+)", - result.stdout.str(), - re.MULTILINE, - ) is not None - assert re.search( - r"(.+)live log finish(.+)\n(.+)WARNING(.+)\n(.+)WARNING(.+)", - result.stdout.str(), - re.MULTILINE, - ) is not None + assert ( + re.search( + r"(.+)live log teardown(.+)\n(.+)WARNING(.+)\n(.+)WARNING(.+)", + result.stdout.str(), + re.MULTILINE, + ) + is not None + ) + assert ( + re.search( + r"(.+)live log finish(.+)\n(.+)WARNING(.+)\n(.+)WARNING(.+)", + result.stdout.str(), + re.MULTILINE, + ) + is not None + ) def test_log_cli_level(testdir): @@ -850,7 +856,6 @@ def test_live_logging_suspends_capture(has_capture_manager, request): assert CaptureManager.resume_global_capture class DummyTerminal(six.StringIO): - def section(self, *args, **kwargs): pass @@ -865,10 +870,10 @@ def test_live_logging_suspends_capture(has_capture_manager, request): logger.critical("some message") if has_capture_manager: - assert ( - MockCaptureManager.calls - == ["suspend_global_capture", "resume_global_capture"] - ) + assert MockCaptureManager.calls == [ + "suspend_global_capture", + "resume_global_capture", + ] else: assert MockCaptureManager.calls == [] assert out_file.getvalue() == "\nsome message\n" diff --git a/testing/python/approx.py b/testing/python/approx.py index e65647897..39f10a821 100644 --- a/testing/python/approx.py +++ b/testing/python/approx.py @@ -13,7 +13,6 @@ inf, nan = float("inf"), float("nan") class MyDocTestRunner(doctest.DocTestRunner): - def __init__(self): doctest.DocTestRunner.__init__(self) @@ -26,7 +25,6 @@ class MyDocTestRunner(doctest.DocTestRunner): class TestApprox(object): - @pytest.fixture def plus_minus(self): return u"\u00b1" if sys.version_info[0] > 2 else u"+-" @@ -34,23 +32,20 @@ class TestApprox(object): def test_repr_string(self, plus_minus): tol1, tol2, infr = "1.0e-06", "2.0e-06", "inf" assert repr(approx(1.0)) == "1.0 {pm} {tol1}".format(pm=plus_minus, tol1=tol1) - assert ( - repr(approx([1.0, 2.0])) - == "approx([1.0 {pm} {tol1}, 2.0 {pm} {tol2}])".format( - pm=plus_minus, tol1=tol1, tol2=tol2 - ) + assert repr( + approx([1.0, 2.0]) + ) == "approx([1.0 {pm} {tol1}, 2.0 {pm} {tol2}])".format( + pm=plus_minus, tol1=tol1, tol2=tol2 ) - assert ( - repr(approx((1.0, 2.0))) - == "approx((1.0 {pm} {tol1}, 2.0 {pm} {tol2}))".format( - pm=plus_minus, tol1=tol1, tol2=tol2 - ) + assert repr( + approx((1.0, 2.0)) + ) == "approx((1.0 {pm} {tol1}, 2.0 {pm} {tol2}))".format( + pm=plus_minus, tol1=tol1, tol2=tol2 ) assert repr(approx(inf)) == "inf" assert repr(approx(1.0, rel=nan)) == "1.0 {pm} ???".format(pm=plus_minus) - assert ( - repr(approx(1.0, rel=inf)) - == "1.0 {pm} {infr}".format(pm=plus_minus, infr=infr) + assert repr(approx(1.0, rel=inf)) == "1.0 {pm} {infr}".format( + pm=plus_minus, infr=infr ) assert repr(approx(1.0j, rel=inf)) == "1j" diff --git a/testing/python/collect.py b/testing/python/collect.py index 724504b1a..46694f2d8 100644 --- a/testing/python/collect.py +++ b/testing/python/collect.py @@ -14,7 +14,6 @@ ignore_parametrized_marks = pytest.mark.filterwarnings( class TestModule(object): - def test_failing_import(self, testdir): modcol = testdir.getmodulecol("import alksdjalskdjalkjals") pytest.raises(Collector.CollectError, modcol.collect) @@ -141,7 +140,6 @@ class TestModule(object): class TestClass(object): - def test_class_with_init_warning(self, testdir): testdir.makepyfile( """ @@ -246,7 +244,6 @@ class TestClass(object): class TestGenerator(object): - def test_generative_functions(self, testdir): modcol = testdir.getmodulecol( """ @@ -458,7 +455,6 @@ class TestGenerator(object): class TestFunction(object): - def test_getmodulecollector(self, testdir): item = testdir.getitem("def test_func(): pass") modcol = item.getparent(pytest.Module) @@ -673,12 +669,10 @@ class TestFunction(object): config = item.config class MyPlugin1(object): - def pytest_pyfunc_call(self, pyfuncitem): raise ValueError class MyPlugin2(object): - def pytest_pyfunc_call(self, pyfuncitem): return True @@ -831,7 +825,6 @@ class TestFunction(object): class TestSorting(object): - def test_check_equality(self, testdir): modcol = testdir.getmodulecol( """ @@ -886,7 +879,6 @@ class TestSorting(object): class TestConftestCustomization(object): - def test_pytest_pycollect_module(self, testdir): testdir.makeconftest( """ @@ -1062,7 +1054,6 @@ def test_modulecol_roundtrip(testdir): class TestTracebackCutting(object): - def test_skip_simple(self): excinfo = pytest.raises(pytest.skip.Exception, 'pytest.skip("xxx")') assert excinfo.traceback[-1].frame.code.name == "skip" @@ -1191,7 +1182,6 @@ class TestTracebackCutting(object): class TestReportInfo(object): - def test_itemreport_reportinfo(self, testdir, linecomp): testdir.makeconftest( """ @@ -1497,7 +1487,10 @@ def test_class_injection_does_not_break_collection(testdir): ''' ) result = testdir.runpytest() - assert "RuntimeError: dictionary changed size during iteration" not in result.stdout.str() + assert ( + "RuntimeError: dictionary changed size during iteration" + not in result.stdout.str() + ) result.stdout.fnmatch_lines(["*1 passed*"]) diff --git a/testing/python/fixture.py b/testing/python/fixture.py index 6d2bb663b..9cc3b6890 100644 --- a/testing/python/fixture.py +++ b/testing/python/fixture.py @@ -8,7 +8,6 @@ from _pytest import fixtures def test_getfuncargnames(): - def f(): pass @@ -30,7 +29,6 @@ def test_getfuncargnames(): assert fixtures.getfuncargnames(h) == ("arg1", "arg2") class A(object): - def f(self, arg1, arg2="hello"): pass @@ -43,7 +41,6 @@ def test_getfuncargnames(): class TestFillFixtures(object): - def test_fillfuncargs_exposed(self): # used by oejskit, kept for compatibility assert pytest._fillfuncargs == fixtures.fillfixtures @@ -570,7 +567,6 @@ class TestFillFixtures(object): class TestRequestBasic(object): - def test_request_attributes(self, testdir): item = testdir.getitem( """ @@ -1003,7 +999,6 @@ class TestRequestBasic(object): class TestRequestMarking(object): - def test_applymarker(self, testdir): item1, item2 = testdir.getitems( """ @@ -1073,7 +1068,6 @@ class TestRequestMarking(object): class TestRequestCachedSetup(object): - def test_request_cachedsetup_defaultmodule(self, testdir): reprec = testdir.inline_runsource( """ @@ -1245,7 +1239,6 @@ class TestRequestCachedSetup(object): class TestFixtureUsages(object): - def test_noargfixturedec(self, testdir): testdir.makepyfile( """ @@ -1540,7 +1533,6 @@ class TestFixtureUsages(object): class TestFixtureManagerParseFactories(object): - @pytest.fixture def testdir(self, request): testdir = request.getfixturevalue("testdir") @@ -1668,7 +1660,6 @@ class TestFixtureManagerParseFactories(object): class TestAutouseDiscovery(object): - @pytest.fixture def testdir(self, testdir): testdir.makeconftest( @@ -1845,7 +1836,6 @@ class TestAutouseDiscovery(object): class TestAutouseManagement(object): - def test_autouse_conftest_mid_directory(self, testdir): pkgdir = testdir.mkpydir("xyz123") pkgdir.join("conftest.py").write( @@ -2112,7 +2102,6 @@ class TestAutouseManagement(object): class TestFixtureMarker(object): - def test_parametrize(self, testdir): testdir.makepyfile( """ @@ -2938,21 +2927,18 @@ class TestFixtureMarker(object): reprec = testdir.inline_run() reprec.assertoutcome(passed=6) values = reprec.getcalls("pytest_runtest_call")[0].item.module.values - assert ( - values - == [ - "test_hello", - "fin John", - "test_hello", - "fin Doe", - "test_name", - "test_population", - "fin John", - "test_name", - "test_population", - "fin Doe", - ] - ) + assert values == [ + "test_hello", + "fin John", + "test_hello", + "fin Doe", + "test_name", + "test_population", + "fin John", + "test_name", + "test_population", + "fin Doe", + ] def test_parametrize_setup_function(self, testdir): testdir.makepyfile( @@ -3135,7 +3121,6 @@ class TestRequestScopeAccess(object): class TestErrors(object): - def test_subfactory_missing_funcarg(self, testdir): testdir.makepyfile( """ @@ -3203,7 +3188,6 @@ class TestErrors(object): class TestShowFixtures(object): - def test_funcarg_compat(self, testdir): config = testdir.parseconfigure("--funcargs") assert config.option.showfixtures @@ -3480,7 +3464,6 @@ class TestShowFixtures(object): @pytest.mark.parametrize("flavor", ["fixture", "yield_fixture"]) class TestContextManagerFixtureFuncs(object): - def test_simple(self, testdir, flavor): testdir.makepyfile( """ @@ -3622,7 +3605,6 @@ class TestContextManagerFixtureFuncs(object): class TestParameterizedSubRequest(object): - def test_call_from_fixture(self, testdir): testfile = testdir.makepyfile( """ diff --git a/testing/python/integration.py b/testing/python/integration.py index f348fdc29..a6fb93bfb 100644 --- a/testing/python/integration.py +++ b/testing/python/integration.py @@ -4,7 +4,6 @@ from _pytest import runner class TestOEJSKITSpecials(object): - def test_funcarg_non_pycollectobj(self, testdir): # rough jstests usage testdir.makeconftest( """ @@ -70,7 +69,6 @@ class TestOEJSKITSpecials(object): def test_wrapped_getfslineno(): - def func(): pass @@ -89,12 +87,10 @@ def test_wrapped_getfslineno(): class TestMockDecoration(object): - def test_wrapped_getfuncargnames(self): from _pytest.compat import getfuncargnames def wrap(f): - def func(): pass @@ -115,7 +111,6 @@ class TestMockDecoration(object): from _pytest.compat import getfuncargnames def wrap(f): - def func(): pass @@ -269,7 +264,6 @@ class TestMockDecoration(object): class TestReRunTests(object): - def test_rerun(self, testdir): testdir.makeconftest( """ @@ -316,7 +310,6 @@ def test_pytestconfig_is_session_scoped(): class TestNoselikeTestAttribute(object): - def test_module_with_global_test(self, testdir): testdir.makepyfile( """ @@ -402,7 +395,6 @@ class TestNoselikeTestAttribute(object): @pytest.mark.issue351 class TestParameterize(object): - def test_idfn_marker(self, testdir): testdir.makepyfile( """ diff --git a/testing/python/metafunc.py b/testing/python/metafunc.py index e181d3131..9f425821b 100644 --- a/testing/python/metafunc.py +++ b/testing/python/metafunc.py @@ -14,7 +14,6 @@ PY3 = sys.version_info >= (3, 0) class TestMetafunc(object): - def Metafunc(self, func, config=None): # the unit tests of this class check if things work correctly # on the funcarg level, so we don't need a full blown @@ -35,7 +34,6 @@ class TestMetafunc(object): return python.Metafunc(definition, fixtureinfo, config) def test_no_funcargs(self, testdir): - def function(): pass @@ -44,7 +42,6 @@ class TestMetafunc(object): repr(metafunc._calls) def test_function_basic(self): - def func(arg1, arg2="qwe"): pass @@ -55,7 +52,6 @@ class TestMetafunc(object): assert metafunc.cls is None def test_addcall_no_args(self): - def func(arg1): pass @@ -67,7 +63,6 @@ class TestMetafunc(object): assert not hasattr(call, "param") def test_addcall_id(self): - def func(arg1): pass @@ -83,7 +78,6 @@ class TestMetafunc(object): assert metafunc._calls[1].id == "2" def test_addcall_param(self): - def func(arg1): pass @@ -101,7 +95,6 @@ class TestMetafunc(object): assert metafunc._calls[2].getparam("arg1") == 1 def test_addcall_funcargs(self): - def func(x): pass @@ -119,7 +112,6 @@ class TestMetafunc(object): assert not hasattr(metafunc._calls[1], "param") def test_parametrize_error(self): - def func(x, y): pass @@ -132,7 +124,6 @@ class TestMetafunc(object): pytest.raises(ValueError, lambda: metafunc.parametrize("y", [5, 6])) def test_parametrize_bad_scope(self, testdir): - def func(x): pass @@ -143,7 +134,6 @@ class TestMetafunc(object): assert "has an unsupported scope value 'doggy'" in str(ve) def test_parametrize_and_id(self): - def func(x, y): pass @@ -166,7 +156,6 @@ class TestMetafunc(object): assert ids == [u"basic", u"advanced"] def test_parametrize_with_wrong_number_of_ids(self, testdir): - def func(x, y): pass @@ -185,12 +174,10 @@ class TestMetafunc(object): @pytest.mark.issue510 def test_parametrize_empty_list(self): - def func(y): pass class MockConfig(object): - def getini(self, name): return "" @@ -206,7 +193,6 @@ class TestMetafunc(object): assert "skip" == metafunc._calls[0].marks[0].name def test_parametrize_with_userobjects(self): - def func(x, y): pass @@ -338,23 +324,20 @@ class TestMetafunc(object): pytest.param(b"\xc3\xb4", totext("other")), ], ) - assert ( - result - == [ - "1.0--1.1", - "2--202", - "three-three hundred", - "True-False", - "None-None", - "foo-bar", - "str-int", - "a7-b7", - "a8-b8", - "a9-b9", - "\\xc3\\xb4-name", - "\\xc3\\xb4-other", - ] - ) + assert result == [ + "1.0--1.1", + "2--202", + "three-three hundred", + "True-False", + "None-None", + "foo-bar", + "str-int", + "a7-b7", + "a8-b8", + "a9-b9", + "\\xc3\\xb4-name", + "\\xc3\\xb4-other", + ] def test_idmaker_enum(self): from _pytest.python import idmaker @@ -424,23 +407,20 @@ class TestMetafunc(object): idfn=ids, ) - assert ( - [str(i.message) for i in rec.list] - == [ - "Raised while trying to determine id of parameter a at position 0." - "\nUpdate your code as this will raise an error in pytest-4.0.", - "Raised while trying to determine id of parameter b at position 0." - "\nUpdate your code as this will raise an error in pytest-4.0.", - "Raised while trying to determine id of parameter a at position 1." - "\nUpdate your code as this will raise an error in pytest-4.0.", - "Raised while trying to determine id of parameter b at position 1." - "\nUpdate your code as this will raise an error in pytest-4.0.", - "Raised while trying to determine id of parameter a at position 2." - "\nUpdate your code as this will raise an error in pytest-4.0.", - "Raised while trying to determine id of parameter b at position 2." - "\nUpdate your code as this will raise an error in pytest-4.0.", - ] - ) + assert [str(i.message) for i in rec.list] == [ + "Raised while trying to determine id of parameter a at position 0." + "\nUpdate your code as this will raise an error in pytest-4.0.", + "Raised while trying to determine id of parameter b at position 0." + "\nUpdate your code as this will raise an error in pytest-4.0.", + "Raised while trying to determine id of parameter a at position 1." + "\nUpdate your code as this will raise an error in pytest-4.0.", + "Raised while trying to determine id of parameter b at position 1." + "\nUpdate your code as this will raise an error in pytest-4.0.", + "Raised while trying to determine id of parameter a at position 2." + "\nUpdate your code as this will raise an error in pytest-4.0.", + "Raised while trying to determine id of parameter b at position 2." + "\nUpdate your code as this will raise an error in pytest-4.0.", + ] def test_parametrize_ids_exception(self, testdir): """ @@ -496,7 +476,6 @@ class TestMetafunc(object): assert result == ["a0", "a1", "b0", "c", "b1"] def test_addcall_and_parametrize(self): - def func(x, y): pass @@ -511,7 +490,6 @@ class TestMetafunc(object): @pytest.mark.issue714 def test_parametrize_indirect(self): - def func(x, y): pass @@ -526,7 +504,6 @@ class TestMetafunc(object): @pytest.mark.issue714 def test_parametrize_indirect_list(self): - def func(x, y): pass @@ -537,7 +514,6 @@ class TestMetafunc(object): @pytest.mark.issue714 def test_parametrize_indirect_list_all(self): - def func(x, y): pass @@ -548,7 +524,6 @@ class TestMetafunc(object): @pytest.mark.issue714 def test_parametrize_indirect_list_empty(self): - def func(x, y): pass @@ -588,7 +563,6 @@ class TestMetafunc(object): @pytest.mark.issue714 def test_parametrize_indirect_list_error(self, testdir): - def func(x, y): pass @@ -704,7 +678,6 @@ class TestMetafunc(object): ) def test_addcalls_and_parametrize_indirect(self): - def func(x, y): pass @@ -837,7 +810,6 @@ class TestMetafunc(object): ) def test_format_args(self): - def function1(): pass @@ -860,7 +832,6 @@ class TestMetafunc(object): class TestMetafuncFunctional(object): - def test_attributes(self, testdir): p = testdir.makepyfile( """ @@ -1494,7 +1465,6 @@ class TestMetafuncFunctionalAuto(object): @pytest.mark.filterwarnings("ignore:Applying marks directly to parameters") @pytest.mark.issue308 class TestMarkersWithParametrization(object): - def test_simple_mark(self, testdir): s = """ import pytest diff --git a/testing/python/raises.py b/testing/python/raises.py index 64199c3b6..99aeffdf2 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -4,7 +4,6 @@ import sys class TestRaises(object): - def test_raises(self): source = "int('qwe')" excinfo = pytest.raises(ValueError, source) @@ -22,9 +21,7 @@ class TestRaises(object): pytest.raises(ValueError, int, "hello") def test_raises_callable_no_exception(self): - class A(object): - def __call__(self): pass @@ -109,7 +106,6 @@ class TestRaises(object): import gc class T(object): - def __call__(self): raise ValueError @@ -160,7 +156,6 @@ class TestRaises(object): from six import add_metaclass class Meta(type(object)): - def __getitem__(self, item): return 1 / 0 diff --git a/testing/test_argcomplete.py b/testing/test_argcomplete.py index b042de5ce..9e6b711a2 100644 --- a/testing/test_argcomplete.py +++ b/testing/test_argcomplete.py @@ -86,7 +86,6 @@ class FilesCompleter(object): class TestArgComplete(object): - @pytest.mark.skipif("sys.platform in ('win32', 'darwin')") def test_compare_with_compgen(self): from _pytest._argcomplete import FastFilesCompleter diff --git a/testing/test_assertion.py b/testing/test_assertion.py index 393cf817c..aff644ee7 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -14,7 +14,6 @@ PY3 = sys.version_info >= (3, 0) @pytest.fixture def mock_config(): - class Config(object): verbose = False @@ -27,7 +26,6 @@ def mock_config(): class TestImportHookInstallation(object): - @pytest.mark.parametrize("initial_conftest", [True, False]) @pytest.mark.parametrize("mode", ["plain", "rewrite"]) def test_conftest_assertion_rewrite(self, testdir, initial_conftest, mode): @@ -288,7 +286,6 @@ class TestImportHookInstallation(object): class TestBinReprIntegration(object): - def test_pytest_assertrepr_compare_called(self, testdir): testdir.makeconftest( """ @@ -321,7 +318,6 @@ def callequal(left, right, verbose=False): class TestAssert_reprcompare(object): - def test_different_types(self): assert callequal([0, 1], "foo") is None @@ -459,7 +455,6 @@ class TestAssert_reprcompare(object): MutableSequence = col.MutableSequence class TestSequence(MutableSequence): # works with a Sequence subclass - def __init__(self, iterable): self.elements = list(iterable) @@ -488,9 +483,7 @@ class TestAssert_reprcompare(object): assert len(expl) > 1 def test_list_bad_repr(self): - class A(object): - def __repr__(self): raise ValueError(42) @@ -506,7 +499,6 @@ class TestAssert_reprcompare(object): """ class A(str): - def __repr__(self): return "" @@ -532,7 +524,6 @@ class TestAssert_reprcompare(object): """ class A(str): - def __repr__(self): return "\xff" @@ -557,7 +548,6 @@ class TestAssert_reprcompare(object): class TestFormatExplanation(object): - def test_special_chars_full(self, testdir): # Issue 453, for the bug this would raise IndexError testdir.makepyfile( @@ -781,24 +771,19 @@ def test_rewritten(testdir): def test_reprcompare_notin(mock_config): detail = plugin.pytest_assertrepr_compare( mock_config, "not in", "foo", "aaafoobbb" - )[ - 1: - ] + )[1:] assert detail == ["'foo' is contained here:", " aaafoobbb", "? +++"] def test_reprcompare_whitespaces(mock_config): detail = plugin.pytest_assertrepr_compare(mock_config, "==", "\r\n", "\n") - assert ( - detail - == [ - r"'\r\n' == '\n'", - r"Strings contain only whitespace, escaping them using repr()", - r"- '\r\n'", - r"? --", - r"+ '\n'", - ] - ) + assert detail == [ + r"'\r\n' == '\n'", + r"Strings contain only whitespace, escaping them using repr()", + r"- '\r\n'", + r"? --", + r"+ '\n'", + ] def test_pytest_assertrepr_compare_integration(testdir): @@ -1036,7 +1021,6 @@ def test_AssertionError_message(testdir): def test_set_with_unsortable_elements(): # issue #718 class UnsortableKey(object): - def __init__(self, name): self.name = name @@ -1169,4 +1153,7 @@ def test_issue_1944(testdir): ) result = testdir.runpytest() result.stdout.fnmatch_lines(["*1 error*"]) - assert "AttributeError: 'Module' object has no attribute '_obj'" not in result.stdout.str() + assert ( + "AttributeError: 'Module' object has no attribute '_obj'" + not in result.stdout.str() + ) diff --git a/testing/test_assertrewrite.py b/testing/test_assertrewrite.py index 144f625bc..20cc476d8 100644 --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -78,9 +78,8 @@ def adjust_body_for_new_docstring_in_module_node(m): various Python 3.7 versions, but we should remove the 3.7 check after 3.7 is released as stable to make this check more straightforward. """ - if ( - sys.version_info < (3, 8) - and not ((3, 7) <= sys.version_info <= (3, 7, 0, "beta", 4)) + if sys.version_info < (3, 8) and not ( + (3, 7) <= sys.version_info <= (3, 7, 0, "beta", 4) ): assert len(m.body) > 1 assert isinstance(m.body[0], ast.Expr) @@ -89,7 +88,6 @@ def adjust_body_for_new_docstring_in_module_node(m): class TestAssertionRewrite(object): - def test_place_initial_imports(self): s = """'Doc string'\nother = stuff""" m = rewrite(s) @@ -150,7 +148,6 @@ class TestAssertionRewrite(object): assert "warnings" not in "".join(result.outlines) def test_name(self): - def f(): assert False @@ -181,7 +178,6 @@ class TestAssertionRewrite(object): assert getmsg(f, {"cls": X}) == "assert cls == 42" def test_assert_already_has_message(self): - def f(): assert False, "something bad!" @@ -251,7 +247,6 @@ class TestAssertionRewrite(object): ) def test_boolop(self): - def f(): f = g = False assert f and g @@ -331,7 +326,6 @@ class TestAssertionRewrite(object): getmsg(f, must_pass=True) def test_short_circuit_evaluation(self): - def f(): assert True or explode # noqa @@ -344,7 +338,6 @@ class TestAssertionRewrite(object): getmsg(f, must_pass=True) def test_unary_op(self): - def f(): x = True assert not x @@ -370,7 +363,6 @@ class TestAssertionRewrite(object): assert getmsg(f) == "assert (+0 + 0)" def test_binary_op(self): - def f(): x = 1 y = -1 @@ -384,7 +376,6 @@ class TestAssertionRewrite(object): assert getmsg(f) == "assert not (5 % 4)" def test_boolop_percent(self): - def f(): assert 3 % 2 and False @@ -411,7 +402,6 @@ class TestAssertionRewrite(object): testdir.runpytest().assert_outcomes(passed=1) def test_call(self): - def g(a=42, *args, **kwargs): return False @@ -483,7 +473,6 @@ class TestAssertionRewrite(object): ) def test_attribute(self): - class X(object): g = 3 @@ -509,7 +498,6 @@ class TestAssertionRewrite(object): ) def test_comparisons(self): - def f(): a, b = range(2) assert b < a @@ -542,7 +530,6 @@ class TestAssertionRewrite(object): getmsg(f, must_pass=True) def test_len(self): - def f(): values = list(range(10)) assert len(values) == 11 @@ -553,7 +540,6 @@ class TestAssertionRewrite(object): ) def test_custom_reprcompare(self, monkeypatch): - def my_reprcompare(op, left, right): return "42" @@ -575,11 +561,8 @@ class TestAssertionRewrite(object): assert getmsg(f) == "assert 5 <= 4" def test_assert_raising_nonzero_in_comparison(self): - def f(): - class A(object): - def __nonzero__(self): raise ValueError(42) @@ -597,16 +580,13 @@ class TestAssertionRewrite(object): assert " < 0" in getmsg(f) def test_formatchar(self): - def f(): assert "%test" == "test" assert getmsg(f).startswith("assert '%test' == 'test'") def test_custom_repr(self): - def f(): - class Foo(object): a = 1 @@ -620,7 +600,6 @@ class TestAssertionRewrite(object): class TestRewriteOnImport(object): - def test_pycache_is_a_file(self, testdir): testdir.tmpdir.join("__pycache__").write("Hello") testdir.makepyfile( @@ -671,9 +650,7 @@ class TestRewriteOnImport(object): def test_rewritten(): assert "@py_builtins" in globals() """ - ).encode( - "utf-8" - ), + ).encode("utf-8"), "wb", ) old_mode = sub.stat().mode @@ -870,7 +847,6 @@ def test_rewritten(): class TestAssertionRewriteHookDetails(object): - def test_loader_is_package_false_for_module(self, testdir): testdir.makepyfile( test_fun=""" @@ -1090,7 +1066,6 @@ def test_issue731(testdir): class TestIssue925(object): - def test_simple_case(self, testdir): testdir.makepyfile( """ @@ -1122,8 +1097,7 @@ class TestIssue925(object): result.stdout.fnmatch_lines("*E*assert True == ((False == True) == True)") -class TestIssue2121(): - +class TestIssue2121: def test_simple(self, testdir): testdir.tmpdir.join("tests/file.py").ensure().write( """ diff --git a/testing/test_cacheprovider.py b/testing/test_cacheprovider.py index 33d1dd844..fcf3eaf75 100644 --- a/testing/test_cacheprovider.py +++ b/testing/test_cacheprovider.py @@ -6,11 +6,10 @@ import pytest import os import shutil -pytest_plugins = "pytester", +pytest_plugins = ("pytester",) class TestNewAPI(object): - def test_config_cache_makedir(self, testdir): testdir.makeini("[pytest]") config = testdir.parseconfigure() @@ -182,7 +181,6 @@ def test_cache_show(testdir): class TestLastFailed(object): - def test_lastfailed_usecase(self, testdir, monkeypatch): monkeypatch.setenv("PYTHONDONTWRITEBYTECODE", 1) p = testdir.makepyfile( @@ -557,10 +555,9 @@ class TestLastFailed(object): ) result = testdir.runpytest() result.stdout.fnmatch_lines("*1 failed*") - assert ( - self.get_cached_last_failed(testdir) - == ["test_xfail_strict_considered_failure.py::test"] - ) + assert self.get_cached_last_failed(testdir) == [ + "test_xfail_strict_considered_failure.py::test" + ] @pytest.mark.parametrize("mark", ["mark.xfail", "mark.skip"]) def test_failed_changed_to_xfail_or_skip(self, testdir, mark): @@ -572,10 +569,9 @@ class TestLastFailed(object): """ ) result = testdir.runpytest() - assert ( - self.get_cached_last_failed(testdir) - == ["test_failed_changed_to_xfail_or_skip.py::test"] - ) + assert self.get_cached_last_failed(testdir) == [ + "test_failed_changed_to_xfail_or_skip.py::test" + ] assert result.ret == 1 testdir.makepyfile( @@ -619,10 +615,10 @@ class TestLastFailed(object): """ ) testdir.runpytest() - assert ( - self.get_cached_last_failed(testdir) - == ["test_bar.py::test_bar_2", "test_foo.py::test_foo_4"] - ) + assert self.get_cached_last_failed(testdir) == [ + "test_bar.py::test_bar_2", + "test_foo.py::test_foo_4", + ] # 2. fix test_bar_2, run only test_bar.py testdir.makepyfile( @@ -695,7 +691,6 @@ class TestLastFailed(object): class TestNewFirst(object): - def test_newfirst_usecase(self, testdir): testdir.makepyfile( **{ diff --git a/testing/test_capture.py b/testing/test_capture.py index e14b3af78..54f0fbc44 100644 --- a/testing/test_capture.py +++ b/testing/test_capture.py @@ -48,7 +48,6 @@ def StdCapture(out=True, err=True, in_=True): class TestCaptureManager(object): - def test_getmethod_default_no_fd(self, monkeypatch): from _pytest.capture import pytest_addoption from _pytest.config.argparsing import Parser @@ -150,7 +149,6 @@ def test_collect_capturing(testdir): class TestPerTestCapturing(object): - def test_capture_and_fixtures(self, testdir): p = testdir.makepyfile( """ @@ -294,7 +292,6 @@ class TestPerTestCapturing(object): class TestLoggingInteraction(object): - def test_logging_stream_ownership(self, testdir): p = testdir.makepyfile( """ @@ -399,7 +396,6 @@ class TestLoggingInteraction(object): class TestCaptureFixture(object): - @pytest.mark.parametrize("opt", [[], ["-s"]]) def test_std_functional(self, testdir, opt): reprec = testdir.inline_runsource( @@ -771,7 +767,6 @@ def test_error_during_readouterr(testdir): class TestCaptureIO(object): - def test_text(self): f = capture.CaptureIO() f.write("hello") @@ -1337,7 +1332,6 @@ def test_py36_windowsconsoleio_workaround_non_standard_streams(): from _pytest.capture import _py36_windowsconsoleio_workaround class DummyStream(object): - def write(self, s): pass diff --git a/testing/test_collection.py b/testing/test_collection.py index 657d64c74..e12e788b4 100644 --- a/testing/test_collection.py +++ b/testing/test_collection.py @@ -8,7 +8,6 @@ from _pytest.main import Session, EXIT_NOTESTSCOLLECTED, _in_venv class TestCollector(object): - def test_collect_versus_item(self): from pytest import Collector, Item @@ -115,7 +114,6 @@ class TestCollector(object): class TestCollectFS(object): - def test_ignored_certain_directories(self, testdir): tmpdir = testdir.tmpdir tmpdir.ensure("build", "test_notfound.py") @@ -253,12 +251,10 @@ class TestCollectFS(object): class TestCollectPluginHookRelay(object): - def test_pytest_collect_file(self, testdir): wascalled = [] class Plugin(object): - def pytest_collect_file(self, path, parent): if not path.basename.startswith("."): # Ignore hidden files, e.g. .testmondata. @@ -273,7 +269,6 @@ class TestCollectPluginHookRelay(object): wascalled = [] class Plugin(object): - def pytest_collect_directory(self, path, parent): wascalled.append(path.basename) @@ -285,7 +280,6 @@ class TestCollectPluginHookRelay(object): class TestPrunetraceback(object): - def test_custom_repr_failure(self, testdir): p = testdir.makepyfile( """ @@ -335,7 +329,6 @@ class TestPrunetraceback(object): class TestCustomConftests(object): - def test_ignore_collect_path(self, testdir): testdir.makeconftest( """ @@ -437,7 +430,6 @@ class TestCustomConftests(object): class TestSession(object): - def test_parsearg(self, testdir): p = testdir.makepyfile("def test_func(): pass") subdir = testdir.mkdir("sub") @@ -634,7 +626,6 @@ class TestSession(object): class Test_getinitialnodes(object): - def test_global_file(self, testdir, tmpdir): x = tmpdir.ensure("x.py") with tmpdir.as_cwd(): @@ -662,7 +653,6 @@ class Test_getinitialnodes(object): class Test_genitems(object): - def test_check_collect_hashes(self, testdir): p = testdir.makepyfile( """ @@ -776,7 +766,6 @@ def test_matchnodes_two_collections_same_file(testdir): class TestNodekeywords(object): - def test_no_under(self, testdir): modcol = testdir.getmodulecol( """ diff --git a/testing/test_compat.py b/testing/test_compat.py index 550a8f1b3..399b0d342 100644 --- a/testing/test_compat.py +++ b/testing/test_compat.py @@ -7,7 +7,6 @@ from _pytest.outcomes import OutcomeException def test_is_generator(): - def zap(): yield @@ -19,9 +18,7 @@ def test_is_generator(): def test_real_func_loop_limit(): - class Evil(object): - def __init__(self): self.left = 1000 @@ -86,7 +83,6 @@ def test_is_generator_async_syntax(testdir): class ErrorsHelper(object): - @property def raise_exception(self): raise Exception("exception should be catched") diff --git a/testing/test_config.py b/testing/test_config.py index 5fb048364..b507bb8e8 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -10,7 +10,6 @@ from _pytest.main import EXIT_NOTESTSCOLLECTED class TestParseIni(object): - @pytest.mark.parametrize( "section, filename", [("pytest", "pytest.ini"), ("tool:pytest", "setup.cfg")] ) @@ -118,7 +117,6 @@ class TestParseIni(object): class TestConfigCmdlineParsing(object): - def test_parsing_again_fails(self, testdir): config = testdir.parseconfig() pytest.raises(AssertionError, lambda: config.parse([])) @@ -172,7 +170,6 @@ class TestConfigCmdlineParsing(object): class TestConfigAPI(object): - def test_config_trace(self, testdir): config = testdir.parseconfig() values = [] @@ -412,7 +409,6 @@ class TestConfigAPI(object): class TestConfigFromdictargs(object): - def test_basic_behavior(self): from _pytest.config import Config @@ -479,7 +475,6 @@ class TestConfigFromdictargs(object): def test_options_on_small_file_do_not_blow_up(testdir): - def runfiletest(opts): reprec = testdir.inline_run(*opts) passed, skipped, failed = reprec.countoutcomes() @@ -526,7 +521,6 @@ def test_preparse_ordering_with_setuptools(testdir, monkeypatch): dist = Dist() def load(self): - class PseudoPlugin(object): x = 42 @@ -606,9 +600,9 @@ def test_plugin_preparse_prevents_setuptools_loading(testdir, monkeypatch, block assert "mytestplugin" not in sys.modules assert config.pluginmanager.get_plugin("mytestplugin") is None else: - assert config.pluginmanager.get_plugin( - "mytestplugin" - ) is plugin_module_placeholder + assert ( + config.pluginmanager.get_plugin("mytestplugin") is plugin_module_placeholder + ) def test_cmdline_processargs_simple(testdir): @@ -709,7 +703,6 @@ def test_notify_exception(testdir, capfd): assert "ValueError" in err class A(object): - def pytest_internalerror(self, excrepr): return True @@ -725,7 +718,6 @@ def test_load_initial_conftest_last_ordering(testdir): pm = get_config().pluginmanager class My(object): - def pytest_load_initial_conftests(self): pass @@ -754,7 +746,6 @@ def test_get_plugin_specs_as_list(): class TestWarning(object): - def test_warn_config(self, testdir): testdir.makeconftest( """ @@ -804,7 +795,6 @@ class TestWarning(object): class TestRootdir(object): - def test_simple_noini(self, tmpdir): assert get_common_ancestor([tmpdir]) == tmpdir a = tmpdir.mkdir("a") @@ -863,7 +853,6 @@ class TestRootdir(object): class TestOverrideIniArgs(object): - @pytest.mark.parametrize("name", "setup.cfg tox.ini pytest.ini".split()) def test_override_ini_names(self, testdir, name): testdir.tmpdir.join(name).write( diff --git a/testing/test_conftest.py b/testing/test_conftest.py index 61b640976..4b80f1f56 100644 --- a/testing/test_conftest.py +++ b/testing/test_conftest.py @@ -28,9 +28,7 @@ def ConftestWithSetinitial(path): def conftest_setinitial(conftest, args, confcutdir=None): - class Namespace(object): - def __init__(self): self.file_or_dir = args self.confcutdir = str(confcutdir) @@ -40,7 +38,6 @@ def conftest_setinitial(conftest, args, confcutdir=None): class TestConftestValueAccessGlobal(object): - def test_basic_init(self, basedir): conftest = PytestPluginManager() p = basedir.join("adir") @@ -311,7 +308,6 @@ def test_conftest_found_with_double_dash(testdir): class TestConftestVisibility(object): - def _setup_tree(self, testdir): # for issue616 # example mostly taken from: # https://mail.python.org/pipermail/pytest-dev/2014-September/002617.html diff --git a/testing/test_doctest.py b/testing/test_doctest.py index 7f3aff3b0..6a84c5feb 100644 --- a/testing/test_doctest.py +++ b/testing/test_doctest.py @@ -8,7 +8,6 @@ import pytest class TestDoctests(object): - def test_collect_testtextfile(self, testdir): w = testdir.maketxtfile(whatever="") checkfile = testdir.maketxtfile( @@ -723,7 +722,6 @@ class TestDoctests(object): class TestLiterals(object): - @pytest.mark.parametrize("config_mode", ["ini", "comment"]) def test_allow_unicode(self, testdir, config_mode): """Test that doctests which output unicode work in all python versions @@ -841,7 +839,6 @@ class TestDoctestSkips(object): @pytest.fixture(params=["text", "module"]) def makedoctest(self, testdir, request): - def makeit(doctest): mode = request.param if mode == "text": @@ -1122,7 +1119,6 @@ class TestDoctestNamespaceFixture(object): class TestDoctestReportingOption(object): - def _run_doctest_report(self, testdir, format): testdir.makepyfile( """ diff --git a/testing/test_junitxml.py b/testing/test_junitxml.py index d0be5f267..aa6b9a120 100644 --- a/testing/test_junitxml.py +++ b/testing/test_junitxml.py @@ -29,7 +29,6 @@ def assert_attr(node, **kwargs): class DomNode(object): - def __init__(self, dom): self.__node = dom @@ -81,7 +80,6 @@ class DomNode(object): class TestPython(object): - def test_summing_simple(self, testdir): testdir.makepyfile( """ @@ -713,7 +711,6 @@ def test_dont_configure_on_slaves(tmpdir): gotten = [] class FakeConfig(object): - def __init__(self): self.pluginmanager = self self.option = self @@ -737,7 +734,6 @@ def test_dont_configure_on_slaves(tmpdir): class TestNonPython(object): - def test_summing_simple(self, testdir): testdir.makeconftest( """ @@ -1127,18 +1123,15 @@ def test_fancy_items_regression(testdir): import pprint pprint.pprint(items) - assert ( - items - == [ - u"conftest a conftest.py", - u"conftest a conftest.py", - u"conftest b conftest.py", - u"test_fancy_items_regression a test_fancy_items_regression.py", - u"test_fancy_items_regression a test_fancy_items_regression.py", - u"test_fancy_items_regression b test_fancy_items_regression.py", - u"test_fancy_items_regression test_pass" u" test_fancy_items_regression.py", - ] - ) + assert items == [ + u"conftest a conftest.py", + u"conftest a conftest.py", + u"conftest b conftest.py", + u"test_fancy_items_regression a test_fancy_items_regression.py", + u"test_fancy_items_regression a test_fancy_items_regression.py", + u"test_fancy_items_regression b test_fancy_items_regression.py", + u"test_fancy_items_regression test_pass" u" test_fancy_items_regression.py", + ] def test_global_properties(testdir): diff --git a/testing/test_mark.py b/testing/test_mark.py index 17349916e..084e3c3a5 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -21,7 +21,6 @@ ignore_markinfo = pytest.mark.filterwarnings( class TestMark(object): - def test_markinfo_repr(self): from _pytest.mark import MarkInfo, Mark @@ -39,7 +38,6 @@ class TestMark(object): pytest.raises((AttributeError, TypeError), mark) def test_mark_with_param(self): - def some_function(abc): pass @@ -487,7 +485,6 @@ def test_parametrized_with_kwargs(testdir): class TestFunctional(object): - def test_mark_per_function(self, testdir): p = testdir.makepyfile( """ @@ -884,7 +881,6 @@ class TestFunctional(object): class TestKeywordSelection(object): - def test_select_simple(self, testdir): file_test = testdir.makepyfile( """ @@ -1037,7 +1033,6 @@ def test_parameterset_extractfrom(argval, expected): def test_legacy_transfer(): - class FakeModule(object): pytestmark = [] @@ -1058,7 +1053,6 @@ def test_legacy_transfer(): class TestMarkDecorator(object): - @pytest.mark.parametrize( "lhs, rhs, expected", [ diff --git a/testing/test_monkeypatch.py b/testing/test_monkeypatch.py index c298ce0d9..c47d10de2 100644 --- a/testing/test_monkeypatch.py +++ b/testing/test_monkeypatch.py @@ -17,7 +17,6 @@ def mp(): def test_setattr(): - class A(object): x = 1 @@ -42,7 +41,6 @@ def test_setattr(): class TestSetattrWithImportPath(object): - def test_string_expression(self, monkeypatch): monkeypatch.setattr("os.path.abspath", lambda x: "hello2") assert os.path.abspath("123") == "hello2" @@ -84,7 +82,6 @@ class TestSetattrWithImportPath(object): def test_delattr(): - class A(object): x = 1 @@ -311,7 +308,6 @@ def test_importerror(testdir): class SampleNew(object): - @staticmethod def hello(): return True diff --git a/testing/test_nose.py b/testing/test_nose.py index abe732375..d63b30584 100644 --- a/testing/test_nose.py +++ b/testing/test_nose.py @@ -33,7 +33,6 @@ def test_setup_func_with_setup_decorator(): values = [] class A(object): - @pytest.fixture(autouse=True) def f(self): values.append(1) diff --git a/testing/test_parseopt.py b/testing/test_parseopt.py index 79076cafd..3870ad419 100644 --- a/testing/test_parseopt.py +++ b/testing/test_parseopt.py @@ -13,7 +13,6 @@ def parser(): class TestParser(object): - def test_no_help_by_default(self, capsys): parser = parseopt.Parser(usage="xyz") pytest.raises(SystemExit, lambda: parser.parse(["-h"])) @@ -34,9 +33,8 @@ class TestParser(object): assert argument.dest == "test" argument = parseopt.Argument("-t", "--test", dest="abc") assert argument.dest == "abc" - assert ( - str(argument) - == ("Argument(_short_opts: ['-t'], _long_opts: ['--test'], dest: 'abc')") + assert str(argument) == ( + "Argument(_short_opts: ['-t'], _long_opts: ['--test'], dest: 'abc')" ) def test_argument_type(self): @@ -180,7 +178,6 @@ class TestParser(object): assert args.S is False def test_parse_defaultgetter(self): - def defaultget(option): if not hasattr(option, "type"): return @@ -204,15 +201,11 @@ class TestParser(object): ) parser.add_argument( "-t", "--twoword", "--duo", "--two-word", "--two", help="foo" - ).map_long_option = { - "two": "two-word" - } + ).map_long_option = {"two": "two-word"} # throws error on --deux only! parser.add_argument( "-d", "--deuxmots", "--deux-mots", action="store_true", help="foo" - ).map_long_option = { - "deux": "deux-mots" - } + ).map_long_option = {"deux": "deux-mots"} parser.add_argument("-s", action="store_true", help="single short") parser.add_argument("--abc", "-a", action="store_true", help="bar") parser.add_argument("--klm", "-k", "--kl-m", action="store_true", help="bar") @@ -224,9 +217,7 @@ class TestParser(object): ) parser.add_argument( "-x", "--exit-on-first", "--exitfirst", action="store_true", help="spam" - ).map_long_option = { - "exitfirst": "exit-on-first" - } + ).map_long_option = {"exitfirst": "exit-on-first"} parser.add_argument("files_and_dirs", nargs="*") args = parser.parse_args(["-k", "--duo", "hallo", "--exitfirst"]) assert args.twoword == "hallo" diff --git a/testing/test_pastebin.py b/testing/test_pastebin.py index ad7c4d0c1..1005dcba4 100644 --- a/testing/test_pastebin.py +++ b/testing/test_pastebin.py @@ -5,7 +5,6 @@ import pytest class TestPasteCapture(object): - @pytest.fixture def pastebinlist(self, monkeypatch, request): pastebinlist = [] @@ -85,7 +84,6 @@ class TestPasteCapture(object): class TestPaste(object): - @pytest.fixture def pastebin(self, request): return request.config.pluginmanager.getplugin("pastebin") @@ -102,7 +100,6 @@ class TestPaste(object): calls.append((url, data)) class DummyFile(object): - def read(self): # part of html of a normal response return b'View raw.' diff --git a/testing/test_pdb.py b/testing/test_pdb.py index 615d52e83..08be812a2 100644 --- a/testing/test_pdb.py +++ b/testing/test_pdb.py @@ -25,7 +25,6 @@ def custom_pdb_calls(): # install dummy debugger class and track which methods were called on it class _CustomPdb(object): - def __init__(self, *args, **kwargs): called.append("init") @@ -45,7 +44,6 @@ def custom_debugger_hook(): # install dummy debugger class and track which methods were called on it class _CustomDebugger(object): - def __init__(self, *args, **kwargs): called.append("init") @@ -65,7 +63,6 @@ def custom_debugger_hook(): class TestPDB(object): - @pytest.fixture def pdblist(self, request): monkeypatch = request.getfixturevalue("monkeypatch") @@ -563,7 +560,6 @@ class TestPDB(object): class TestDebuggingBreakpoints(object): - def test_supports_breakpoint_module_global(self): """ Test that supports breakpoint global marks on Python 3.7+ and not on diff --git a/testing/test_pluginmanager.py b/testing/test_pluginmanager.py index 22cea4207..c24314d22 100644 --- a/testing/test_pluginmanager.py +++ b/testing/test_pluginmanager.py @@ -16,7 +16,6 @@ def pytestpm(): class TestPytestPluginInteractions(object): - def test_addhooks_conftestplugin(self, testdir): testdir.makepyfile( newhooks=""" @@ -104,7 +103,6 @@ class TestPytestPluginInteractions(object): values = [] class A(object): - def pytest_configure(self, config): values.append(self) @@ -125,12 +123,10 @@ class TestPytestPluginInteractions(object): saveindent = [] class api1(object): - def pytest_plugin_registered(self): saveindent.append(pytestpm.trace.root.indent) class api2(object): - def pytest_plugin_registered(self): saveindent.append(pytestpm.trace.root.indent) raise ValueError() @@ -175,12 +171,10 @@ class TestPytestPluginInteractions(object): warnings = [] class get_warnings(object): - def pytest_logwarning(self, code, fslocation, message, nodeid): warnings.append(message) class Plugin(object): - def pytest_testhook(): pass @@ -232,7 +226,6 @@ def test_importplugin_error_message(testdir, pytestpm): class TestPytestPluginManager(object): - def test_register_imported_modules(self): pm = PytestPluginManager() mod = types.ModuleType("x.y.pytest_hello") @@ -363,7 +356,6 @@ class TestPytestPluginManager(object): class TestPytestPluginManagerBootstrapming(object): - def test_preparse_args(self, pytestpm): pytest.raises( ImportError, lambda: pytestpm.consider_preparse(["xyz", "-p", "hello123"]) diff --git a/testing/test_pytester.py b/testing/test_pytester.py index b74c0b7f7..195f2c7f1 100644 --- a/testing/test_pytester.py +++ b/testing/test_pytester.py @@ -84,9 +84,7 @@ def test_testdir_runs_with_plugin(testdir): def make_holder(): - class apiclass(object): - def pytest_xyz(self, arg): "x" @@ -143,7 +141,6 @@ def test_makepyfile_utf8(testdir): class TestInlineRunModulesCleanup(object): - def test_inline_run_test_module_not_cleaned_up(self, testdir): test_mod = testdir.makepyfile("def test_foo(): assert True") result = testdir.inline_run(str(test_mod)) @@ -154,7 +151,6 @@ class TestInlineRunModulesCleanup(object): assert result2.ret == EXIT_TESTSFAILED def spy_factory(self): - class SysModulesSnapshotSpy(object): instances = [] @@ -220,7 +216,6 @@ class TestInlineRunModulesCleanup(object): def test_inline_run_clean_sys_paths(testdir): - def test_sys_path_change_cleanup(self, testdir): test_path1 = testdir.tmpdir.join("boink1").strpath test_path2 = testdir.tmpdir.join("boink2").strpath @@ -245,7 +240,6 @@ def test_inline_run_clean_sys_paths(testdir): assert sys.meta_path == original_meta_path def spy_factory(self): - class SysPathsSnapshotSpy(object): instances = [] @@ -371,7 +365,8 @@ class TestSysPathsSnapshot(object): original_other = list(getattr(sys, other_path_type)) snapshot = SysPathsSnapshot() transformation = { - "source": (0, 1, 2, 3, 4, 5), "target": (6, 2, 9, 7, 5, 8) + "source": (0, 1, 2, 3, 4, 5), + "target": (6, 2, 9, 7, 5, 8), } # noqa: E201 assert sys_path == [self.path(x) for x in transformation["source"]] sys_path[1] = self.path(6) diff --git a/testing/test_recwarn.py b/testing/test_recwarn.py index a8e2fb803..f81d27889 100644 --- a/testing/test_recwarn.py +++ b/testing/test_recwarn.py @@ -21,7 +21,6 @@ def test_recwarn_functional(testdir): class TestWarningsRecorderChecker(object): - def test_recording(self): rec = WarningsRecorder() with rec: @@ -188,7 +187,6 @@ class TestDeprecatedCall(object): class TestWarns(object): - def test_strings(self): # different messages, b/c Python suppresses multiple identical warnings source1 = "warnings.warn('w1', RuntimeWarning)" diff --git a/testing/test_runner.py b/testing/test_runner.py index f5430a90d..a78d4de31 100644 --- a/testing/test_runner.py +++ b/testing/test_runner.py @@ -12,7 +12,6 @@ from _pytest import runner, main, outcomes class TestSetupState(object): - def test_setup(self, testdir): ss = runner.SetupState() item = testdir.getitem("def test_func(): pass") @@ -101,7 +100,6 @@ class TestSetupState(object): class BaseFunctionalTests(object): - def test_passfunction(self, testdir): reports = testdir.runitem( """ @@ -253,10 +251,10 @@ class BaseFunctionalTests(object): """ ) reps = rec.getcalls("pytest_runtest_logstart pytest_runtest_logfinish") - assert ( - [x._name for x in reps] - == ["pytest_runtest_logstart", "pytest_runtest_logfinish"] - ) + assert [x._name for x in reps] == [ + "pytest_runtest_logstart", + "pytest_runtest_logfinish", + ] for rep in reps: assert rep.nodeid == "test_logstart_logfinish_hooks.py::test_func" assert rep.location == ("test_logstart_logfinish_hooks.py", 1, "test_func") @@ -395,9 +393,7 @@ class BaseFunctionalTests(object): class TestExecutionNonForked(BaseFunctionalTests): - def getrunner(self): - def f(item): return runner.runtestprotocol(item, log=False) @@ -439,7 +435,6 @@ class TestExecutionForked(BaseFunctionalTests): class TestSessionReports(object): - def test_collect_result(self, testdir): col = testdir.getmodulecol( """ @@ -869,14 +864,11 @@ def test_current_test_env_var(testdir, monkeypatch): result = testdir.runpytest_inprocess() assert result.ret == 0 test_id = "test_current_test_env_var.py::test" - assert ( - pytest_current_test_vars - == [ - ("setup", test_id + " (setup)"), - ("call", test_id + " (call)"), - ("teardown", test_id + " (teardown)"), - ] - ) + assert pytest_current_test_vars == [ + ("setup", test_id + " (setup)"), + ("call", test_id + " (call)"), + ("teardown", test_id + " (teardown)"), + ] assert "PYTEST_CURRENT_TEST" not in os.environ diff --git a/testing/test_session.py b/testing/test_session.py index 4a594009b..50ce91534 100644 --- a/testing/test_session.py +++ b/testing/test_session.py @@ -6,7 +6,6 @@ from _pytest.main import EXIT_NOTESTSCOLLECTED class SessionTests(object): - def test_basic_testitem_events(self, testdir): tfile = testdir.makepyfile( """ @@ -168,7 +167,6 @@ class SessionTests(object): class TestNewSession(SessionTests): - def test_order_of_execution(self, testdir): reprec = testdir.inline_runsource( """ diff --git a/testing/test_skipping.py b/testing/test_skipping.py index 5d970e2fe..507ce126a 100644 --- a/testing/test_skipping.py +++ b/testing/test_skipping.py @@ -7,7 +7,6 @@ from _pytest.runner import runtestprotocol class TestEvaluator(object): - def test_no_marker(self, testdir): item = testdir.getitem("def test_func(): pass") evalskipif = MarkEvaluator(item, "skipif") @@ -126,7 +125,10 @@ class TestEvaluator(object): ) ev = MarkEvaluator(item, "skipif") exc = pytest.raises(pytest.fail.Exception, ev.istrue) - assert """Failed: you need to specify reason=STRING when using booleans as conditions.""" in exc.value.msg + assert ( + """Failed: you need to specify reason=STRING when using booleans as conditions.""" + in exc.value.msg + ) def test_skipif_class(self, testdir): item, = testdir.getitems( @@ -146,7 +148,6 @@ class TestEvaluator(object): class TestXFail(object): - @pytest.mark.parametrize("strict", [True, False]) def test_xfail_simple(self, testdir, strict): item = testdir.getitem( @@ -514,7 +515,6 @@ class TestXFail(object): class TestXFailwithSetupTeardown(object): - def test_failing_setup_issue9(self, testdir): testdir.makepyfile( """ @@ -547,7 +547,6 @@ class TestXFailwithSetupTeardown(object): class TestSkip(object): - def test_skip_class(self, testdir): testdir.makepyfile( """ @@ -645,7 +644,6 @@ class TestSkip(object): class TestSkipif(object): - def test_skipif_conditional(self, testdir): item = testdir.getitem( """ @@ -1023,7 +1021,6 @@ def test_imperativeskip_on_xfail_test(testdir): class TestBooleanCondition(object): - def test_skipif(self, testdir): testdir.makepyfile( """ diff --git a/testing/test_terminal.py b/testing/test_terminal.py index 8f08ad34f..a9da27980 100644 --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -18,7 +18,6 @@ DistInfo = collections.namedtuple("DistInfo", ["project_name", "version"]) class Option(object): - def __init__(self, verbose=False, fulltrace=False): self.verbose = verbose self.fulltrace = fulltrace @@ -68,7 +67,6 @@ def test_plugin_nameversion(input, expected): class TestTerminal(object): - def test_pass_skip_fail(self, testdir, option): testdir.makepyfile( """ @@ -248,7 +246,6 @@ class TestTerminal(object): class TestCollectonly(object): - def test_collectonly_basic(self, testdir): testdir.makepyfile( """ @@ -356,7 +353,6 @@ def test_repr_python_version(monkeypatch): class TestFixtureReporting(object): - def test_setup_fixture_error(self, testdir): testdir.makepyfile( """ @@ -457,7 +453,6 @@ class TestFixtureReporting(object): class TestTerminalFunctional(object): - def test_deselected(self, testdir): testpath = testdir.makepyfile( """ @@ -735,9 +730,7 @@ def test_color_yes_collection_on_non_atty(testdir, verbose): def test_getreportopt(): - class Config(object): - class Option(object): reportchars = "" disable_warnings = True @@ -1102,7 +1095,6 @@ def test_no_trailing_whitespace_after_inifile_word(testdir): class TestProgress(object): - @pytest.fixture def many_tests_files(self, testdir): testdir.makepyfile( diff --git a/testing/test_tmpdir.py b/testing/test_tmpdir.py index 336249094..db6e68674 100644 --- a/testing/test_tmpdir.py +++ b/testing/test_tmpdir.py @@ -42,7 +42,6 @@ def test_ensuretemp(recwarn): class TestTempdirHandler(object): - def test_mktemp(self, testdir): from _pytest.tmpdir import TempdirFactory @@ -59,7 +58,6 @@ class TestTempdirHandler(object): class TestConfigTmpdir(object): - def test_getbasetemp_custom_removes_old(self, testdir): mytemp = testdir.tmpdir.join("xyz") p = testdir.makepyfile( diff --git a/testing/test_unittest.py b/testing/test_unittest.py index 65ffdb975..482e89280 100644 --- a/testing/test_unittest.py +++ b/testing/test_unittest.py @@ -389,7 +389,6 @@ def test_module_level_pytestmark(testdir): class TestTrialUnittest(object): - def setup_class(cls): cls.ut = pytest.importorskip("twisted.trial.unittest") # on windows trial uses a socket for a reactor and apparently doesn't close it properly diff --git a/testing/test_warnings.py b/testing/test_warnings.py index c5bea052a..15ec36600 100644 --- a/testing/test_warnings.py +++ b/testing/test_warnings.py @@ -160,9 +160,8 @@ def test_unicode(testdir, pyfile_with_warnings): reason="warnings message is broken as it is not str instance", ) def test_py2_unicode(testdir, pyfile_with_warnings): - if ( - getattr(sys, "pypy_version_info", ())[:2] == (5, 9) - and sys.platform.startswith("win") + if getattr(sys, "pypy_version_info", ())[:2] == (5, 9) and sys.platform.startswith( + "win" ): pytest.xfail("fails with unicode error on PyPy2 5.9 and Windows (#2905)") testdir.makepyfile( diff --git a/tox.ini b/tox.ini index 810d5597f..adc4e9746 100644 --- a/tox.ini +++ b/tox.ini @@ -207,3 +207,4 @@ filterwarnings = [flake8] max-line-length = 120 +ignore = E203,W503