diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e50891bbc1c..9e9549ed93f 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 dc27f5dfbc1..0a104578c50 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 @@ def test_simple_multiline(self): otherfunc_multi(42, 6 * 9) def test_not(self): - def f(): return 42 @@ -48,7 +45,6 @@ def f(): class TestSpecialisedExplanations(object): - def test_eq_text(self): assert "spam" == "eggs" @@ -106,7 +102,6 @@ def test_not_in_text_single_long_term(self): def test_attribute(): - class Foo(object): b = 1 @@ -115,7 +110,6 @@ class Foo(object): def test_attribute_instance(): - class Foo(object): b = 1 @@ -123,9 +117,7 @@ class Foo(object): def test_attribute_failure(): - class Foo(object): - def _get_b(self): raise Exception("Failed to get attrib") @@ -136,7 +128,6 @@ def _get_b(self): 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 @@ def test_startswith(self): assert s.startswith(g) def test_startswith_nested(self): - def f(): return "123" @@ -246,9 +233,7 @@ def test_try_finally(self): class TestCustomAssertMsg(object): - def test_single_line(self): - class A(object): a = 1 @@ -256,7 +241,6 @@ class A(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 A(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 1150ec12f66..43f748fa2c3 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 c00711dc238..eb339f47418 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 466c62c06ab..e41c4129c68 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 970800c7e61..299833f7175 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 8429dd114b1..9732dc41b5e 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 @@ def collect(self): 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 5d9a07e3e32..9c1c6fa3824 100644 --- a/doc/en/example/py2py3/conftest.py +++ b/doc/en/example/py2py3/conftest.py @@ -5,7 +5,6 @@ class DummyCollector(pytest.collect.File): - def collect(self): return [] diff --git a/doc/en/example/pythoncollection.py b/doc/en/example/pythoncollection.py index 3603361c3dc..b134d809df2 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 cb788c17f04..0e5e580b697 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 @@ def exconly(self, tryshort=False): 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 @@ def match(self, regexp): @attr.s class FormattedExcinfo(object): """ presenting information about failing Functions and Generators. """ + # for traceback entries flow_marker = ">" fail_marker = "E" @@ -556,7 +561,7 @@ def get_source(self, source, line_index=-1, excinfo=None, short=False): 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 @@ def _truncate_recursive_traceback(self, traceback): 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 @@ def repr_excinfo(self, excinfo): 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 @@ def repr_excinfo(self, excinfo): class TerminalRepr(object): - def __str__(self): s = self.__unicode__() if _PY2: @@ -759,7 +767,6 @@ def __repr__(self): class ExceptionRepr(TerminalRepr): - def __init__(self): self.sections = [] @@ -773,7 +780,6 @@ def toterminal(self, tw): class ExceptionChainRepr(ExceptionRepr): - def __init__(self, chain): super(ExceptionChainRepr, self).__init__() self.chain = chain @@ -792,7 +798,6 @@ def toterminal(self, tw): class ReprExceptionInfo(ExceptionRepr): - def __init__(self, reprtraceback, reprcrash): super(ReprExceptionInfo, self).__init__() self.reprtraceback = reprtraceback @@ -831,7 +836,6 @@ def toterminal(self, tw): class ReprTracebackNative(ReprTraceback): - def __init__(self, tblines): self.style = "native" self.reprentries = [ReprEntryNative(tblines)] @@ -885,7 +889,6 @@ def __str__(self): class ReprFileLocation(TerminalRepr): - def __init__(self, path, lineno, message): self.path = str(path) self.lineno = lineno @@ -903,7 +906,6 @@ def toterminal(self, tw): class ReprLocals(TerminalRepr): - def __init__(self, lines): self.lines = lines @@ -913,7 +915,6 @@ def toterminal(self, tw): 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 6b982a4cac4..711408f6146 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 @@ def __getitem__(self, key): 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 @@ def compile( 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 readline_generator(lines): 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 92f4ab10d5a..bc18aa1fc34 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 bcb800a4a07..08213c80e01 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 eb0fcc06f9b..53b6ebb6193 100755 --- a/src/_pytest/cacheprovider.py +++ b/src/_pytest/cacheprovider.py @@ -18,7 +18,6 @@ class Cache(object): - def __init__(self, config): self.config = config self._cachedir = Cache.cache_dir_from_config(config) @@ -199,9 +198,7 @@ def pytest_collection_modifyitems(self, session, config, items): 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 7a57adb752a..faa767a86c5 100644 --- a/src/_pytest/capture.py +++ b/src/_pytest/capture.py @@ -531,7 +531,6 @@ def snap(self): class SysCapture(object): - def __init__(self, fd, tmpfile=None): name = patchsysdict[fd] self._old = getattr(sys, name) @@ -569,7 +568,6 @@ def writeorg(self, data): 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 7abd3d53ff9..3ca27fe6071 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 @@ def _setup_collect_fakemodule(): from py.io import TextIO class CaptureIO(TextIO): - @property def encoding(self): return getattr(self, "_encoding", "UTF-8") @@ -350,7 +341,6 @@ def encoding(self): 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 11348b80d0f..7e7f3b6d216 100644 --- a/src/_pytest/config/__init__.py +++ b/src/_pytest/config/__init__.py @@ -30,7 +30,6 @@ class ConftestImportFailure(Exception): - def __init__(self, path, excinfo): Exception.__init__(self, path, excinfo) self.path = path @@ -318,9 +317,11 @@ def pytest_configure(self, config): 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 @@ def _set_initial_conftests(self, namespace): 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 @@ def _importconftest(self, conftestpath): 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 @@ def import_plugin(self, modname): 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 781d8e8c4ee..21d99b0ceec 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 @@ def __repr__(self): class OptionGroup(object): - def __init__(self, name, description="", parser=None): self.name = name self.description = description @@ -312,7 +312,6 @@ def _addoption_instance(self, option, shortupper=False): class MyOptionParser(argparse.ArgumentParser): - def __init__(self, parser, extra_info=None): if not extra_info: extra_info = {} @@ -378,9 +377,8 @@ def _format_action_invocation(self, action): 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 64bae834d1c..19fe5cb08ed 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 fde7bddb939..234aa69c734 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 2e253aaa2af..3fc3eb55290 100644 --- a/src/_pytest/debugging.py +++ b/src/_pytest/debugging.py @@ -65,6 +65,7 @@ def fin(): class pytestPDB(object): """ Pseudo PDB that defers to the real pdb. """ + _pluginmanager = None _config = None _pdb_cls = pdb.Pdb @@ -87,7 +88,6 @@ def set_trace(cls): 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 7ebdcf99972..b3c40c2ae45 100644 --- a/src/_pytest/deprecated.py +++ b/src/_pytest/deprecated.py @@ -22,7 +22,9 @@ class RemovedInPytest4Warning(DeprecationWarning): "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 b0a3ad08dfc..57d3367e403 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 @@ def toterminal(self, tw): 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 @@ def repr_failure(self, excinfo): 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 @@ def repr_failure(self, excinfo): 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 495e6b9b332..151346413a3 100644 --- a/src/_pytest/fixtures.py +++ b/src/_pytest/fixtures.py @@ -65,7 +65,6 @@ def pytest_sessionstart(session): 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 @@ def formatrepr(self): class FixtureLookupErrorRepr(TerminalRepr): - def __init__(self, filename, firstlineno, tblines, errorstring, argname): self.tblines = tblines self.errorstring = errorstring @@ -837,9 +834,10 @@ def execute(self, request): 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 @@ def _getautousenames(self, nodeid): 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 @@ def parsefactories(self, node_or_obj, nodeid=NOTSET, unittest=False): 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 5514fec404d..12c3339c647 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 29da27de7cc..86aad69bb6c 100644 --- a/src/_pytest/junitxml.py +++ b/src/_pytest/junitxml.py @@ -55,7 +55,6 @@ class Junit(py.xml.Namespace): def bin_xml_escape(arg): - def repl(matchobj): i = ord(matchobj.group()) if i <= 0xFF: @@ -67,7 +66,6 @@ def repl(matchobj): 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 @@ def pytest_sessionfinish(self): 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 00bb9aeb54a..70b6592c405 100644 --- a/src/_pytest/logging.py +++ b/src/_pytest/logging.py @@ -409,9 +409,7 @@ def _log_cli_enabled(self): """ 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 23562358d7c..7feeaf8cf14 100644 --- a/src/_pytest/main.py +++ b/src/_pytest/main.py @@ -343,7 +343,6 @@ def find_module_patched(self, fullname, path=None): 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 a3d11ee0f81..d4bfdaf34a6 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 ceacc5c6ba4..eb0349c2f64 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -25,9 +25,10 @@ def warned(self): 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 @@ def extract_from(cls, parameterset, legacy_force_tuple=False): 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 @@ def test_function(): will set a 'slowtest' :class:`MarkInfo` object on the ``test_function`` object. """ + _config = None def __getattr__(self, name): @@ -362,7 +366,6 @@ def _check(self, name): 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 16080b5d5cb..e6928f96b53 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 ef74c53eba4..e4b10fe6613 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 8a3662e1b3e..63b8453b7b2 100644 --- a/src/_pytest/outcomes.py +++ b/src/_pytest/outcomes.py @@ -43,6 +43,7 @@ def __init__(self, msg=None, pytrace=True, allow_module_level=False): 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 c9defe03a66..ce1c8ea1ce3 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 @@ def _exec_lsof(self): 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 @@ def assert_outcomes(self, passed=0, skipped=0, failed=0, error=0): "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 @@ def restore(self): class SysModulesSnapshot(object): - def __init__(self, preserve=None): self.__preserve = preserve self.__saved = dict(sys.modules) @@ -453,7 +447,6 @@ def restore(self): class SysPathsSnapshot(object): - def __init__(self): self.__saved = list(sys.path), list(sys.meta_path) @@ -778,7 +771,6 @@ def revert_warn_already_imported(): rec = [] class Collect(object): - def pytest_configure(x, config): rec.append(self.make_hook_recorder(config.pluginmanager)) @@ -910,8 +902,10 @@ def getitem(self, source, funcname="test_func"): 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 @@ def get_lines_after(self, fnline): """ 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 0dcecdd55bd..8a9c15dc22b 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 @@ def __init__(self, *k, **kw): super(PyobjMixin, self).__init__(*k, **kw) def obj(): - def fget(self): obj = getattr(self, "_obj", None) if obj is None: @@ -320,7 +318,6 @@ def reportinfo(self): class PyCollector(PyobjMixin, nodes.Collector): - def funcnamefilter(self, name): return self._matches_prefix_or_glob_option("python_functions", name) @@ -487,9 +484,11 @@ def _importtestmodule(self): 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 @@ def repr_failure(self, excinfo, outerr=None): 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 5ee16c2f855..d88d1c88bb9 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 @@ def set_default(x, default): # 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 @@ def raises(expected_exception, *args, **kwargs): 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 7839f5700c8..177757f27ec 100644 --- a/src/_pytest/recwarn.py +++ b/src/_pytest/recwarn.py @@ -193,13 +193,10 @@ def __exit__(self, *exc_info): 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 8f300c98300..0ad31b8bc80 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 18e925509ec..ee53642c7d8 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 @@ def __init__( 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 @@ def location(self): 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 @@ def teardown_exact(self, item, nextitem): 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 @@ def prepare(self, colitem): 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 a348d5484cd..64bc770aea5 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 9c4eec7531a..7dd2edd6f9d 100644 --- a/src/_pytest/terminal.py +++ b/src/_pytest/terminal.py @@ -220,7 +220,6 @@ def get_location(self, config): class TerminalReporter(object): - def __init__(self, config, file=None): import _pytest.config @@ -407,13 +406,16 @@ def pytest_runtest_logreport(self, report): 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 @@ def report_collect(self, final=False): 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 @@ def pytest_sessionstart(self, session): 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 @@ def _printcollecteditems(self, items): 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 @@ def _report_keyboardinterrupt(self): ) 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 6ad9fda8870..d6e7cb27247 100644 --- a/src/_pytest/unittest.py +++ b/src/_pytest/unittest.py @@ -163,15 +163,13 @@ def _handle_skip(self): # 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 e023d0ab491..abd04801bde 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 398af70c942..89452aa5c77 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 c2eed419c9c..88c1f87402e 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -13,7 +13,6 @@ class TestGeneralUsage(object): - def test_config_error(self, testdir): testdir.makeconftest( """ @@ -458,7 +457,6 @@ def test_foo(data): class TestInvocationVariants(object): - def test_earlyinit(self, testdir): p = testdir.makepyfile( """ @@ -557,9 +555,7 @@ def test_invoke_with_path(self, tmpdir, capsys): 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 @@ def test_core_backward_compatibility(self): """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 bfae3691882..e098f136df8 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 func(): def test_getstatement_empty_fullsource(): - def func(): return sys._getframe(0) @@ -111,7 +108,6 @@ def f(): def test_code_getargs(): - def f1(x): pass @@ -138,7 +134,6 @@ def f4(x, *y, **z): def test_frame_getargs(): - def f1(x): return sys._getframe(0) @@ -165,7 +160,6 @@ def f4(x, *y, **z): class TestExceptionInfo(object): - def test_bad_getsource(self): try: if False: @@ -178,7 +172,6 @@ def test_bad_getsource(self): class TestTracebackEntry(object): - def test_getsource(self): try: if False: @@ -194,7 +187,6 @@ def test_getsource(self): 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 f4044b6ecc4..4bac7ba4c00 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 @@ def test_traceback_filter(self): ], ) def test_traceback_filter_selective(self, tracebackhide, matching): - def f(): # raise ValueError @@ -224,7 +221,6 @@ def h(): assert len(ntraceback) == len(traceback) - 1 def test_traceback_recursion_index(self): - def f(n): if n < 10: n += 1 @@ -236,7 +232,6 @@ def f(n): 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 @@ def f(n): assert "RuntimeError: hello" in str(repr.reprcrash) def test_traceback_no_recursion_index(self): - def do_stuff(): raise RuntimeError @@ -288,7 +282,6 @@ def fail(): assert excinfo.traceback.recursionindex() is None def test_traceback_getcrashentry(self): - def i(): __tracebackhide__ = True raise ValueError @@ -312,7 +305,6 @@ def f(): assert entry.frame.code.name == "h" def test_traceback_getcrashentry_empty(self): - def g(): __tracebackhide__ = True raise ValueError @@ -429,10 +421,8 @@ def test_division_zero(): 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 @@ def test_repr_source_failing_fullsource(self): pr = FormattedExcinfo() class FakeCode(object): - class raw(object): co_filename = "?" @@ -537,7 +526,6 @@ class FakeFrame(object): f_globals = {} class FakeTracebackEntry(_pytest._code.Traceback.Entry): - def __init__(self, tb, excinfo=None): self.lineno = 5 + 3 @@ -882,7 +870,6 @@ def test_reprexcinfo_unicode(self): 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 56dad75671f..7982cfa352e 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 @@ def test_compile_and_getsource_simple(self): assert str(source) == "x=3" def test_compile_and_getsource_through_same_function(self): - def gensource(source): return _pytest._code.compile(source) @@ -337,13 +333,12 @@ def test_compile_and_getsource(self): @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: - expected = "codegen %s:%d>" % (mypath, mylineno + 2 + 3) + expected = "codegen %s:%d>" % (mypath, mylineno + 2 + 2) else: - expected = "codegen %r %s:%d>" % (name, mypath, mylineno + 2 + 3) + expected = "codegen %r %s:%d>" % (name, mypath, mylineno + 2 + 2) fn = co.co_filename assert fn.endswith(expected) @@ -359,9 +354,7 @@ def test_offsetless_synerr(self): 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 __init__(self, *args): def test_getline_finally(): - def c(): pass @@ -406,7 +398,6 @@ def g(): pass def test_getfuncsource_with_multine_string(): - def f(): c = """while True: pass @@ -538,14 +529,12 @@ class B(object): 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 __call__(self): 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 92f7412eb8c..009bb87aeea 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 39ff1f1fc38..b82dbcf7d85 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_func(): ) 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 ca2a4106537..0348b215cec 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 @@ class option(object): 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 91ed2e4758c..0a8a585063c 100644 --- a/testing/logging/test_reporting.py +++ b/testing/logging/test_reporting.py @@ -520,16 +520,22 @@ def test_log_1(fix): "=* 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 resume_global_capture(self): assert CaptureManager.resume_global_capture class DummyTerminal(six.StringIO): - def section(self, *args, **kwargs): pass @@ -865,10 +870,10 @@ def section(self, *args, **kwargs): 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 e6564789714..39f10a82116 100644 --- a/testing/python/approx.py +++ b/testing/python/approx.py @@ -13,7 +13,6 @@ class MyDocTestRunner(doctest.DocTestRunner): - def __init__(self): doctest.DocTestRunner.__init__(self) @@ -26,7 +25,6 @@ def report_failure(self, out, test, example, got): class TestApprox(object): - @pytest.fixture def plus_minus(self): return u"\u00b1" if sys.version_info[0] > 2 else u"+-" @@ -34,23 +32,20 @@ def plus_minus(self): 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 724504b1af7..46694f2d8e6 100644 --- a/testing/python/collect.py +++ b/testing/python/collect.py @@ -14,7 +14,6 @@ class TestModule(object): - def test_failing_import(self, testdir): modcol = testdir.getmodulecol("import alksdjalskdjalkjals") pytest.raises(Collector.CollectError, modcol.collect) @@ -141,7 +140,6 @@ def test_show_traceback_import_error_unicode(self, testdir): class TestClass(object): - def test_class_with_init_warning(self, testdir): testdir.makepyfile( """ @@ -246,7 +244,6 @@ def prop(self): class TestGenerator(object): - def test_generative_functions(self, testdir): modcol = testdir.getmodulecol( """ @@ -458,7 +455,6 @@ def test_setuplist(): class TestFunction(object): - def test_getmodulecollector(self, testdir): item = testdir.getitem("def test_func(): pass") modcol = item.getparent(pytest.Module) @@ -673,12 +669,10 @@ def test_pyfunc_call(self, testdir): 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 @@ def test_func(arg): class TestSorting(object): - def test_check_equality(self, testdir): modcol = testdir.getmodulecol( """ @@ -886,7 +879,6 @@ def test_a(y): 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 @@ def foo(): class TestReportInfo(object): - def test_itemreport_reportinfo(self, testdir, linecomp): testdir.makeconftest( """ @@ -1497,7 +1487,10 @@ def test_injection(self): ''' ) 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 6d2bb663b6c..9cc3b6890f2 100644 --- a/testing/python/fixture.py +++ b/testing/python/fixture.py @@ -8,7 +8,6 @@ def test_getfuncargnames(): - def f(): pass @@ -30,7 +29,6 @@ def h(arg1, arg2, arg3="hello"): assert fixtures.getfuncargnames(h) == ("arg1", "arg2") class A(object): - def f(self, arg1, arg2="hello"): pass @@ -43,7 +41,6 @@ def static(arg1, arg2): class TestFillFixtures(object): - def test_fillfuncargs_exposed(self): # used by oejskit, kept for compatibility assert pytest._fillfuncargs == fixtures.fillfixtures @@ -570,7 +567,6 @@ def test_leak(leak): class TestRequestBasic(object): - def test_request_attributes(self, testdir): item = testdir.getitem( """ @@ -1003,7 +999,6 @@ def test_1(arg): class TestRequestMarking(object): - def test_applymarker(self, testdir): item1, item2 = testdir.getitems( """ @@ -1073,7 +1068,6 @@ def test_fun2(keywords): class TestRequestCachedSetup(object): - def test_request_cachedsetup_defaultmodule(self, testdir): reprec = testdir.inline_runsource( """ @@ -1245,7 +1239,6 @@ def test_func(app): class TestFixtureUsages(object): - def test_noargfixturedec(self, testdir): testdir.makepyfile( """ @@ -1540,7 +1533,6 @@ def test_2(arg2): class TestFixtureManagerParseFactories(object): - @pytest.fixture def testdir(self, request): testdir = request.getfixturevalue("testdir") @@ -1668,7 +1660,6 @@ def test_x(one): class TestAutouseDiscovery(object): - @pytest.fixture def testdir(self, testdir): testdir.makeconftest( @@ -1845,7 +1836,6 @@ def test_world(self): class TestAutouseManagement(object): - def test_autouse_conftest_mid_directory(self, testdir): pkgdir = testdir.mkpydir("xyz123") pkgdir.join("conftest.py").write( @@ -2112,7 +2102,6 @@ def test_check(): class TestFixtureMarker(object): - def test_parametrize(self, testdir): testdir.makepyfile( """ @@ -2938,21 +2927,18 @@ def test_population(self, human): 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 @@ def test_func(arg): class TestErrors(object): - def test_subfactory_missing_funcarg(self, testdir): testdir.makepyfile( """ @@ -3203,7 +3188,6 @@ def test_something(): class TestShowFixtures(object): - def test_funcarg_compat(self, testdir): config = testdir.parseconfigure("--funcargs") assert config.option.showfixtures @@ -3480,7 +3464,6 @@ def foo(): @pytest.mark.parametrize("flavor", ["fixture", "yield_fixture"]) class TestContextManagerFixtureFuncs(object): - def test_simple(self, testdir, flavor): testdir.makepyfile( """ @@ -3622,7 +3605,6 @@ def test_1(meow): 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 f348fdc29fd..a6fb93bfb40 100644 --- a/testing/python/integration.py +++ b/testing/python/integration.py @@ -4,7 +4,6 @@ class TestOEJSKITSpecials(object): - def test_funcarg_non_pycollectobj(self, testdir): # rough jstests usage testdir.makeconftest( """ @@ -70,7 +69,6 @@ class MyClass(object): def test_wrapped_getfslineno(): - def func(): pass @@ -89,12 +87,10 @@ def wrapped_func(x, y, z): class TestMockDecoration(object): - def test_wrapped_getfuncargnames(self): from _pytest.compat import getfuncargnames def wrap(f): - def func(): pass @@ -115,7 +111,6 @@ def test_wrapped_getfuncargnames_patching(self): from _pytest.compat import getfuncargnames def wrap(f): - def func(): pass @@ -269,7 +264,6 @@ def test_simple_thing(self, mock_path, mock_getcwd): 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 @@ def test_blah(self): @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 e181d3131f5..9f425821b67 100644 --- a/testing/python/metafunc.py +++ b/testing/python/metafunc.py @@ -14,7 +14,6 @@ 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 DefinitionMock(object): return python.Metafunc(definition, fixtureinfo, config) def test_no_funcargs(self, testdir): - def function(): pass @@ -44,7 +42,6 @@ def function(): repr(metafunc._calls) def test_function_basic(self): - def func(arg1, arg2="qwe"): pass @@ -55,7 +52,6 @@ def func(arg1, arg2="qwe"): assert metafunc.cls is None def test_addcall_no_args(self): - def func(arg1): pass @@ -67,7 +63,6 @@ def func(arg1): assert not hasattr(call, "param") def test_addcall_id(self): - def func(arg1): pass @@ -83,7 +78,6 @@ def func(arg1): assert metafunc._calls[1].id == "2" def test_addcall_param(self): - def func(arg1): pass @@ -101,7 +95,6 @@ class obj(object): assert metafunc._calls[2].getparam("arg1") == 1 def test_addcall_funcargs(self): - def func(x): pass @@ -119,7 +112,6 @@ class obj(object): assert not hasattr(metafunc._calls[1], "param") def test_parametrize_error(self): - def func(x, y): pass @@ -132,7 +124,6 @@ def func(x, y): pytest.raises(ValueError, lambda: metafunc.parametrize("y", [5, 6])) def test_parametrize_bad_scope(self, testdir): - def func(x): pass @@ -143,7 +134,6 @@ def func(x): 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 @@ def func(x): 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 @@ def func(x, y): @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 @@ def pytest_make_parametrize_id(self, **kw): assert "skip" == metafunc._calls[0].marks[0].name def test_parametrize_with_userobjects(self): - def func(x, y): pass @@ -338,23 +324,20 @@ def test_idmaker_native_strings(self): 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 @@ def ids(val): 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 @@ def test_idmaker_with_ids_unique_names(self): assert result == ["a0", "a1", "b0", "c", "b1"] def test_addcall_and_parametrize(self): - def func(x, y): pass @@ -511,7 +490,6 @@ def func(x, y): @pytest.mark.issue714 def test_parametrize_indirect(self): - def func(x, y): pass @@ -526,7 +504,6 @@ def func(x, y): @pytest.mark.issue714 def test_parametrize_indirect_list(self): - def func(x, y): pass @@ -537,7 +514,6 @@ def func(x, y): @pytest.mark.issue714 def test_parametrize_indirect_list_all(self): - def func(x, y): pass @@ -548,7 +524,6 @@ def func(x, y): @pytest.mark.issue714 def test_parametrize_indirect_list_empty(self): - def func(x, y): pass @@ -588,7 +563,6 @@ def test_simple(x,y): @pytest.mark.issue714 def test_parametrize_indirect_list_error(self, testdir): - def func(x, y): pass @@ -704,7 +678,6 @@ def test_simple(x, y=1): ) def test_addcalls_and_parametrize_indirect(self): - def func(x, y): pass @@ -837,7 +810,6 @@ def test_3(self, arg, arg2): ) def test_format_args(self): - def function1(): pass @@ -860,7 +832,6 @@ def function4(arg1, *args, **kwargs): class TestMetafuncFunctional(object): - def test_attributes(self, testdir): p = testdir.makepyfile( """ @@ -1494,7 +1465,6 @@ def pytest_generate_tests(metafunc): @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 64199c3b6f5..99aeffdf279 100644 --- a/testing/python/raises.py +++ b/testing/python/raises.py @@ -4,7 +4,6 @@ class TestRaises(object): - def test_raises(self): source = "int('qwe')" excinfo = pytest.raises(ValueError, source) @@ -22,9 +21,7 @@ def test_raises_function(self): pytest.raises(ValueError, int, "hello") def test_raises_callable_no_exception(self): - class A(object): - def __call__(self): pass @@ -109,7 +106,6 @@ def test_raises_cyclic_reference(self, method): import gc class T(object): - def __call__(self): raise ValueError @@ -160,7 +156,6 @@ def test_raises_exception_looks_iterable(self): 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 b042de5ce5b..9e6b711a25d 100644 --- a/testing/test_argcomplete.py +++ b/testing/test_argcomplete.py @@ -86,7 +86,6 @@ def __call__(self, prefix, **kwargs): 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 393cf817c7e..aff644ee7d0 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -14,7 +14,6 @@ @pytest.fixture def mock_config(): - class Config(object): verbose = False @@ -27,7 +26,6 @@ def getoption(self, name): 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 @@ def test_register_assert_rewrite_checks_types(self): 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 @@ def test_Sequence(self): MutableSequence = col.MutableSequence class TestSequence(MutableSequence): # works with a Sequence subclass - def __init__(self, iterable): self.elements = list(iterable) @@ -488,9 +483,7 @@ def test_list_tuples(self): assert len(expl) > 1 def test_list_bad_repr(self): - class A(object): - def __repr__(self): raise ValueError(42) @@ -506,7 +499,6 @@ def test_one_repr_empty(self): """ class A(str): - def __repr__(self): return "" @@ -532,7 +524,6 @@ def test_nonascii_text(self): """ class A(str): - def __repr__(self): return "\xff" @@ -557,7 +548,6 @@ def test_mojibake(self): 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(): 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_hello(): def test_set_with_unsortable_elements(): # issue #718 class UnsortableKey(object): - def __init__(self, name): self.name = name @@ -1169,4 +1153,7 @@ def f(): ) 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 144f625bc6c..20cc476d894 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 @@ def test_dont_rewrite_plugin(self, testdir): assert "warnings" not in "".join(result.outlines) def test_name(self): - def f(): assert False @@ -181,7 +178,6 @@ class X(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 @@ def test_foo(): ) def test_boolop(self): - def f(): f = g = False assert f and g @@ -331,7 +326,6 @@ def f(): getmsg(f, must_pass=True) def test_short_circuit_evaluation(self): - def f(): assert True or explode # noqa @@ -344,7 +338,6 @@ def f(): getmsg(f, must_pass=True) def test_unary_op(self): - def f(): x = True assert not x @@ -370,7 +363,6 @@ def f(): assert getmsg(f) == "assert (+0 + 0)" def test_binary_op(self): - def f(): x = 1 y = -1 @@ -384,7 +376,6 @@ def f(): assert getmsg(f) == "assert not (5 % 4)" def test_boolop_percent(self): - def f(): assert 3 % 2 and False @@ -411,7 +402,6 @@ def test_multmat_operator(): testdir.runpytest().assert_outcomes(passed=1) def test_call(self): - def g(a=42, *args, **kwargs): return False @@ -483,7 +473,6 @@ def f(): ) def test_attribute(self): - class X(object): g = 3 @@ -509,7 +498,6 @@ def f(): ) def test_comparisons(self): - def f(): a, b = range(2) assert b < a @@ -542,7 +530,6 @@ def f(): getmsg(f, must_pass=True) def test_len(self): - def f(): values = list(range(10)) assert len(values) == 11 @@ -553,7 +540,6 @@ def f(): ) def test_custom_reprcompare(self, monkeypatch): - def my_reprcompare(op, left, right): return "42" @@ -575,11 +561,8 @@ def f(): 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 @@ def myany(x): 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 @@ def __repr__(self): class TestRewriteOnImport(object): - def test_pycache_is_a_file(self, testdir): testdir.tmpdir.join("__pycache__").write("Hello") testdir.makepyfile( @@ -671,9 +650,7 @@ def test_readonly(self, testdir): 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(): class TestAssertionRewriteHookDetails(object): - def test_loader_is_package_false_for_module(self, testdir): testdir.makepyfile( test_fun=""" @@ -1090,7 +1066,6 @@ def test_long_repr(): class TestIssue925(object): - def test_simple_case(self, testdir): testdir.makepyfile( """ @@ -1122,8 +1097,7 @@ def test_ternary_display(): 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 33d1dd8448c..fcf3eaf7559 100644 --- a/testing/test_cacheprovider.py +++ b/testing/test_cacheprovider.py @@ -6,11 +6,10 @@ 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 pytest_configure(config): class TestLastFailed(object): - def test_lastfailed_usecase(self, testdir, monkeypatch): monkeypatch.setenv("PYTHONDONTWRITEBYTECODE", 1) p = testdir.makepyfile( @@ -557,10 +555,9 @@ def test(): ) 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 @@ def test(): """ ) 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 @@ def test_foo_4(): """ ) 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 @@ def test_2(): class TestNewFirst(object): - def test_newfirst_usecase(self, testdir): testdir.makepyfile( **{ diff --git a/testing/test_capture.py b/testing/test_capture.py index e14b3af7851..54f0fbc44c9 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 @@ def test_capturing_error(): class TestLoggingInteraction(object): - def test_logging_stream_ownership(self, testdir): p = testdir.makepyfile( """ @@ -399,7 +396,6 @@ def test_hello(): class TestCaptureFixture(object): - @pytest.mark.parametrize("opt", [[], ["-s"]]) def test_std_functional(self, testdir, opt): reprec = testdir.inline_runsource( @@ -771,7 +767,6 @@ def bad_snap(self): 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 657d64c74e2..e12e788b4b9 100644 --- a/testing/test_collection.py +++ b/testing/test_collection.py @@ -8,7 +8,6 @@ class TestCollector(object): - def test_collect_versus_item(self): from pytest import Collector, Item @@ -115,7 +114,6 @@ def test_foo(): class TestCollectFS(object): - def test_ignored_certain_directories(self, testdir): tmpdir = testdir.tmpdir tmpdir.ensure("build", "test_notfound.py") @@ -253,12 +251,10 @@ def test_testpaths_ini(self, testdir, monkeypatch): 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 @@ def test_pytest_collect_directory(self, testdir): wascalled = [] class Plugin(object): - def pytest_collect_directory(self, path, parent): wascalled.append(path.basename) @@ -285,7 +280,6 @@ def pytest_collect_directory(self, path, parent): class TestPrunetraceback(object): - def test_custom_repr_failure(self, testdir): p = testdir.makepyfile( """ @@ -335,7 +329,6 @@ def pytest_make_collect_report(): class TestCustomConftests(object): - def test_ignore_collect_path(self, testdir): testdir.makeconftest( """ @@ -437,7 +430,6 @@ def pytest_collect_file(path, parent): class TestSession(object): - def test_parsearg(self, testdir): p = testdir.makepyfile("def test_func(): pass") subdir = testdir.mkdir("sub") @@ -634,7 +626,6 @@ def test_method(self): class Test_getinitialnodes(object): - def test_global_file(self, testdir, tmpdir): x = tmpdir.ensure("x.py") with tmpdir.as_cwd(): @@ -662,7 +653,6 @@ def test_pkgfile(self, testdir): class Test_genitems(object): - def test_check_collect_hashes(self, testdir): p = testdir.makepyfile( """ @@ -776,7 +766,6 @@ def runtest(self): 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 550a8f1b354..399b0d342b5 100644 --- a/testing/test_compat.py +++ b/testing/test_compat.py @@ -7,7 +7,6 @@ def test_is_generator(): - def zap(): yield @@ -19,9 +18,7 @@ def foo(): def test_real_func_loop_limit(): - class Evil(object): - def __init__(self): self.left = 1000 @@ -86,7 +83,6 @@ async def bar(): 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 5fb048364f7..b507bb8e823 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -10,7 +10,6 @@ class TestParseIni(object): - @pytest.mark.parametrize( "section, filename", [("pytest", "pytest.ini"), ("tool:pytest", "setup.cfg")] ) @@ -118,7 +117,6 @@ def test_confcutdir(self, testdir): class TestConfigCmdlineParsing(object): - def test_parsing_again_fails(self, testdir): config = testdir.parseconfig() pytest.raises(AssertionError, lambda: config.parse([])) @@ -172,7 +170,6 @@ def test_absolute_win32_path(self, testdir): class TestConfigAPI(object): - def test_config_trace(self, testdir): config = testdir.parseconfig() values = [] @@ -412,7 +409,6 @@ def test_iter_rewritable_modules(self, names, expected): class TestConfigFromdictargs(object): - def test_basic_behavior(self): from _pytest.config import Config @@ -479,7 +475,6 @@ def test_inifilename(self, tmpdir): 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 @@ class EntryPoint(object): dist = Dist() def load(self): - class PseudoPlugin(object): x = 42 @@ -606,9 +600,9 @@ def load(self): 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 @@ def test_hello(fix): class TestRootdir(object): - def test_simple_noini(self, tmpdir): assert get_common_ancestor([tmpdir]) == tmpdir a = tmpdir.mkdir("a") @@ -863,7 +853,6 @@ def test_with_specific_inifile(self, tmpdir): 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 61b640976f1..4b80f1f56d7 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 __init__(self): class TestConftestValueAccessGlobal(object): - def test_basic_init(self, basedir): conftest = PytestPluginManager() p = basedir.join("adir") @@ -311,7 +308,6 @@ def pytest_addoption(parser): 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 7f3aff3b0e1..6a84c5febc9 100644 --- a/testing/test_doctest.py +++ b/testing/test_doctest.py @@ -8,7 +8,6 @@ class TestDoctests(object): - def test_collect_testtextfile(self, testdir): w = testdir.maketxtfile(whatever="") checkfile = testdir.maketxtfile( @@ -723,7 +722,6 @@ def test_foo(): 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 @@ def foo(): 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 d0be5f26759..aa6b9a12050 100644 --- a/testing/test_junitxml.py +++ b/testing/test_junitxml.py @@ -29,7 +29,6 @@ def nodeval(node, name): class DomNode(object): - def __init__(self, dom): self.__node = dom @@ -81,7 +80,6 @@ def next_siebling(self): 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 getini(self, name): class TestNonPython(object): - def test_summing_simple(self, testdir): testdir.makeconftest( """ @@ -1127,18 +1123,15 @@ def test_pass(): 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 17349916e6c..084e3c3a536 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -21,7 +21,6 @@ class TestMark(object): - def test_markinfo_repr(self): from _pytest.mark import MarkInfo, Mark @@ -39,7 +38,6 @@ def test_pytest_mark_notcallable(self): pytest.raises((AttributeError, TypeError), mark) def test_mark_with_param(self): - def some_function(abc): pass @@ -487,7 +485,6 @@ def test_func(a, b): class TestFunctional(object): - def test_mark_per_function(self, testdir): p = testdir.makepyfile( """ @@ -884,7 +881,6 @@ def test_1(parameter): 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 fake_method(self): class TestMarkDecorator(object): - @pytest.mark.parametrize( "lhs, rhs, expected", [ diff --git a/testing/test_monkeypatch.py b/testing/test_monkeypatch.py index c298ce0d929..c47d10de2d2 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 @@ class A(object): 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 @@ def test_delattr(self, monkeypatch): def test_delattr(): - class A(object): x = 1 @@ -311,7 +308,6 @@ def test_importerror(monkeypatch): class SampleNew(object): - @staticmethod def hello(): return True diff --git a/testing/test_nose.py b/testing/test_nose.py index abe7323754e..d63b3058433 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 79076cafd81..3870ad419e5 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 @@ def test_argument(self): 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 @@ def test_parse_split_positional_arguments(self, parser): assert args.S is False def test_parse_defaultgetter(self): - def defaultget(option): if not hasattr(option, "type"): return @@ -204,15 +201,11 @@ def test_drop_short_helper(self): ) 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 @@ def test_drop_short_helper(self): ) 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 ad7c4d0c1c0..1005dcba4fa 100644 --- a/testing/test_pastebin.py +++ b/testing/test_pastebin.py @@ -5,7 +5,6 @@ class TestPasteCapture(object): - @pytest.fixture def pastebinlist(self, monkeypatch, request): pastebinlist = [] @@ -85,7 +84,6 @@ def test(): class TestPaste(object): - @pytest.fixture def pastebin(self, request): return request.config.pluginmanager.getplugin("pastebin") @@ -102,7 +100,6 @@ def mocked(url, data): 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 615d52e8345..08be812a2db 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 set_trace(self, frame): class TestPDB(object): - @pytest.fixture def pdblist(self, request): monkeypatch = request.getfixturevalue("monkeypatch") @@ -563,7 +560,6 @@ def test_foo(): 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 22cea4207c6..c24314d22a6 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 @@ def test_configure(self, testdir): values = [] class A(object): - def pytest_configure(self, config): values.append(self) @@ -125,12 +123,10 @@ def test_hook_tracing(self): 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 @@ def test_warn_on_deprecated_addhooks(self, pytestpm): 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_traceback(): class TestPytestPluginManager(object): - def test_register_imported_modules(self): pm = PytestPluginManager() mod = types.ModuleType("x.y.pytest_hello") @@ -363,7 +356,6 @@ def test_consider_conftest_deps(self, testdir, pytestpm): 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 b74c0b7f70c..195f2c7f181 100644 --- a/testing/test_pytester.py +++ b/testing/test_pytester.py @@ -84,9 +84,7 @@ def test_hello(testdir): def make_holder(): - class apiclass(object): - def pytest_xyz(self, arg): "x" @@ -143,7 +141,6 @@ def setup_function(function): 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 @@ def test_inline_run_test_module_not_cleaned_up(self, testdir): assert result2.ret == EXIT_TESTSFAILED def spy_factory(self): - class SysModulesSnapshotSpy(object): instances = [] @@ -220,7 +216,6 @@ def test_foo(): 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_foo(): assert sys.meta_path == original_meta_path def spy_factory(self): - class SysPathsSnapshotSpy(object): instances = [] @@ -371,7 +365,8 @@ def test_restore(self, monkeypatch, path_type): 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 a8e2fb80378..f81d278895e 100644 --- a/testing/test_recwarn.py +++ b/testing/test_recwarn.py @@ -21,7 +21,6 @@ def test_method(recwarn): class TestWarningsRecorderChecker(object): - def test_recording(self): rec = WarningsRecorder() with rec: @@ -188,7 +187,6 @@ def f(): 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 f5430a90da5..a78d4de31c7 100644 --- a/testing/test_runner.py +++ b/testing/test_runner.py @@ -12,7 +12,6 @@ class TestSetupState(object): - def test_setup(self, testdir): ss = runner.SetupState() item = testdir.getitem("def test_func(): pass") @@ -101,7 +100,6 @@ def fin_module(): class BaseFunctionalTests(object): - def test_passfunction(self, testdir): reports = testdir.runitem( """ @@ -253,10 +251,10 @@ def test_func(): """ ) 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 @@ def test_func(): class TestExecutionNonForked(BaseFunctionalTests): - def getrunner(self): - def f(item): return runner.runtestprotocol(item, log=False) @@ -439,7 +435,6 @@ def test_func(): class TestSessionReports(object): - def test_collect_result(self, testdir): col = testdir.getmodulecol( """ @@ -869,14 +864,11 @@ def test(fix): 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 4a594009bab..50ce91534bf 100644 --- a/testing/test_session.py +++ b/testing/test_session.py @@ -6,7 +6,6 @@ class SessionTests(object): - def test_basic_testitem_events(self, testdir): tfile = testdir.makepyfile( """ @@ -168,7 +167,6 @@ def test_one(): pass 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 5d970e2fea0..507ce126ad2 100644 --- a/testing/test_skipping.py +++ b/testing/test_skipping.py @@ -7,7 +7,6 @@ class TestEvaluator(object): - def test_no_marker(self, testdir): item = testdir.getitem("def test_func(): pass") evalskipif = MarkEvaluator(item, "skipif") @@ -126,7 +125,10 @@ def test_func(): ) 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 @@ def test_func(self): class TestXFail(object): - @pytest.mark.parametrize("strict", [True, False]) def test_xfail_simple(self, testdir, strict): item = testdir.getitem( @@ -514,7 +515,6 @@ def test_foo(): class TestXFailwithSetupTeardown(object): - def test_failing_setup_issue9(self, testdir): testdir.makepyfile( """ @@ -547,7 +547,6 @@ def test_func(): class TestSkip(object): - def test_skip_class(self, testdir): testdir.makepyfile( """ @@ -645,7 +644,6 @@ def test_hello(): class TestSkipif(object): - def test_skipif_conditional(self, testdir): item = testdir.getitem( """ @@ -1023,7 +1021,6 @@ def pytest_runtest_setup(item): class TestBooleanCondition(object): - def test_skipif(self, testdir): testdir.makepyfile( """ diff --git a/testing/test_terminal.py b/testing/test_terminal.py index 8f08ad34fa1..a9da27980c0 100644 --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -18,7 +18,6 @@ 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 @@ def test_rewrite(self, testdir, monkeypatch): 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 @@ def teardown_function(function): class TestTerminalFunctional(object): - def test_deselected(self, testdir): testpath = testdir.makepyfile( """ @@ -735,9 +730,7 @@ def test_this(i): 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 33624909495..db6e6867400 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 @@ def test_mktemp(self, testdir): 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 65ffdb97538..482e8928007 100644 --- a/testing/test_unittest.py +++ b/testing/test_unittest.py @@ -389,7 +389,6 @@ def test_func1(self): 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 c5bea052a47..15ec36600d6 100644 --- a/testing/test_warnings.py +++ b/testing/test_warnings.py @@ -160,9 +160,8 @@ def test_func(fix): 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 810d5597f16..adc4e974661 100644 --- a/tox.ini +++ b/tox.ini @@ -207,3 +207,4 @@ filterwarnings = [flake8] max-line-length = 120 +ignore = E203,W503