Hello community, here is the log from the commit of package python-py for openSUSE:Factory checked in at 2019-03-01 20:26:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-py (Old) and /work/SRC/openSUSE:Factory/.python-py.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-py" Fri Mar 1 20:26:20 2019 rev:32 rq:679826 version:1.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-py/python-py.changes 2019-02-20 14:08:12.731001614 +0100 +++ /work/SRC/openSUSE:Factory/.python-py.new.28833/python-py.changes 2019-03-01 20:26:21.938055560 +0100 @@ -1,0 +2,10 @@ +Wed Feb 27 13:48:08 UTC 2019 - Tomáš Chvátal <tchva...@suse.com> + +- Update to 1.8.0: + * add ``"importlib"`` pyimport mode for python3.5+, allowing unimportable test suites + to contain identically named modules. + * fix ``LocalPath.as_cwd()`` not calling ``os.chdir()`` with ``None``, when + being invoked from a non-existing directory. +- Drop merged patch separators.patch + +------------------------------------------------------------------- Old: ---- py-1.7.0.tar.gz separators.patch New: ---- py-1.8.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-py.spec ++++++ --- /var/tmp/diff_new_pack.eScFyV/_old 2019-03-01 20:26:22.370055459 +0100 +++ /var/tmp/diff_new_pack.eScFyV/_new 2019-03-01 20:26:22.374055458 +0100 @@ -19,14 +19,13 @@ %define oldpython python %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-py -Version: 1.7.0 +Version: 1.8.0 Release: 0 Summary: Library with cross-python path, ini-parsing, io, code, log facilities License: MIT Group: Development/Languages/Python URL: https://github.com/pytest-dev/py Source: https://files.pythonhosted.org/packages/source/p/py/py-%{version}.tar.gz -Patch0: separators.patch BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools_scm} BuildRequires: %{python_module setuptools} @@ -48,7 +47,6 @@ %prep %setup -q -n py-%{version} -%patch0 -p1 rm -rf py.egg-info rm -f tox.ini ++++++ py-1.7.0.tar.gz -> py-1.8.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/.travis.yml new/py-1.8.0/.travis.yml --- old/py-1.7.0/.travis.yml 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/.travis.yml 2019-02-22 02:33:43.000000000 +0100 @@ -1,44 +1,67 @@ -sudo: false +dist: xenial language: python + python: -- '2.7' -- '3.4' -- '3.5' -- '3.6' -- 'pypy-5.4' + - '2.7' + - '3.4' + - '3.5' + - '3.6' + - '3.7' + # - 'pypy2.7-6.0' + - 'pypy3.5-6.0' + env: -- DEPS="pytest~=2.9.0" -- DEPS="pytest~=3.0.0" -#- DEPS="pytest~=3.1.0" + global: + - COVERAGE_PROCESS_START=$PWD/tox.ini + matrix: + - DEPS="pytest~=2.9.0" + - DEPS="pytest~=3.0.0" + #- DEPS="pytest~=3.1.0" -matrix: +stages: + - name: deploy + if: tag IS present +matrix: include: - - python: '2.7' - # using a different option due to pytest-addopts pytester issues - env: PYTEST_XADDOPTS="-n 3 --runslowtests" DEPS="pytest~=3.0.0 pytest-xdist" - - - stage: deploy - python: '3.6' - env: - install: pip install -U setuptools setuptools_scm - script: skip - deploy: - provider: pypi - user: nicoddemus - distributions: sdist bdist_wheel - skip_upload_docs: true - password: - secure: VNYW/sZoD+9DzKCe6vANNXXJR7jP7rwySafQ33N1jAnCrdylQjEN/p6tSfUe8jDi3wDpLPL9h8pwfxuUT7CRxglHov3Qe7zSeywixvHan5aFahQiQ8+gucYIM7wITHH3oQs7jN35pnhdnF+QlW2+eDCL6qOLU5XwuRhsDKXjQ/hUWR5hlX5EniD1gzyKEf6j1YCpST87tKpeLwVEYEmsucdkUZuXhxDtyaWQHWiPsLWwh/slQtUJEHeLF26r8UxFy0RiGne9jR+CzRfH5ktcA9/pArvp4VuwOii+1TDxVSYP7+I8Z+eUKN9JBg12QLaHwoIN/8J+MvHCkuf+OGSLM3sEyNRJGDev372xg3K7ylIkeeK4WXirKEp2ojgN8tniloDjnwdu/gPWBnrXuooA60tNoByHFa8KbMZAr2B2sQeMxD4VZGr1N8l0rX4gRTrwvdk3i3ulLKVSwkXaGn+GrfZTTboa7dEnpuma8tv1niNCSpStYIy7atS8129+5ijV3OC8DzOMh/rVbO9WsDb/RPG3yjFiDvEJPIPeE0l/m5u42QBqtdZSS2ia7UWTJBiEY09uFMTRmH5hhE/1aiYBbvAztf5CReUbeKdSQz3L8TTSZqewtFZmXTkX97/xQnrEpsnGezIM2DNuMEuQG3MxGkNCxwbQKpx/bkHdrD75yMk= - on: - tags: true - repo: pytest-dev/py - + - python: '2.7' + # using a different option due to pytest-addopts pytester issues + env: PYTEST_XADDOPTS="-n auto --runslowtests" DEPS="pytest~=3.0.0 pytest-xdist<1.25 pytest-forked<0.3" + + - stage: deploy + python: '3.6' + env: + install: pip install -U setuptools setuptools_scm + script: skip + deploy: + provider: pypi + user: nicoddemus + distributions: sdist bdist_wheel + skip_upload_docs: true + password: + secure: VNYW/sZoD+9DzKCe6vANNXXJR7jP7rwySafQ33N1jAnCrdylQjEN/p6tSfUe8jDi3wDpLPL9h8pwfxuUT7CRxglHov3Qe7zSeywixvHan5aFahQiQ8+gucYIM7wITHH3oQs7jN35pnhdnF+QlW2+eDCL6qOLU5XwuRhsDKXjQ/hUWR5hlX5EniD1gzyKEf6j1YCpST87tKpeLwVEYEmsucdkUZuXhxDtyaWQHWiPsLWwh/slQtUJEHeLF26r8UxFy0RiGne9jR+CzRfH5ktcA9/pArvp4VuwOii+1TDxVSYP7+I8Z+eUKN9JBg12QLaHwoIN/8J+MvHCkuf+OGSLM3sEyNRJGDev372xg3K7ylIkeeK4WXirKEp2ojgN8tniloDjnwdu/gPWBnrXuooA60tNoByHFa8KbMZAr2B2sQeMxD4VZGr1N8l0rX4gRTrwvdk3i3ulLKVSwkXaGn+GrfZTTboa7dEnpuma8tv1niNCSpStYIy7atS8129+5ijV3OC8DzOMh/rVbO9WsDb/RPG3yjFiDvEJPIPeE0l/m5u42QBqtdZSS2ia7UWTJBiEY09uFMTRmH5hhE/1aiYBbvAztf5CReUbeKdSQz3L8TTSZqewtFZmXTkX97/xQnrEpsnGezIM2DNuMEuQG3MxGkNCxwbQKpx/bkHdrD75yMk= + on: + tags: true + repo: pytest-dev/py + + exclude: + - python: '3.7' + env: DEPS="pytest~=2.9.0" + allow_failures: - - python: 'pypy-5.4' + - python: 'pypy2.7-6.0' + - python: 'pypy3.5-6.0' + install: -- pip install -U setuptools setuptools_scm -- pip install $DEPS -- pip install -U . --force-reinstall + - pip install -U coverage coverage-enable-subprocess pip setuptools setuptools_scm + - pip install $DEPS + - pip install -U . --force-reinstall + script: -- py.test --lsof $PYTEST_XADDOPTS + - coverage run -m pytest --lsof $PYTEST_XADDOPTS + +after_success: + - coverage combine + - coverage report -m + - coverage xml + - bash <(curl -s https://codecov.io/bash) -Z -X gcov -X coveragepy -X search -X xcode -X gcovout -X fix -f coverage.xml -e TRAVIS_PYTHON_VERSION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/CHANGELOG new/py-1.8.0/CHANGELOG --- old/py-1.7.0/CHANGELOG 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/CHANGELOG 2019-02-22 02:33:43.000000000 +0100 @@ -1,3 +1,13 @@ +1.8.0 (2019-02-21) +================== + +- add ``"importlib"`` pyimport mode for python3.5+, allowing unimportable test suites + to contain identically named modules. + +- fix ``LocalPath.as_cwd()`` not calling ``os.chdir()`` with ``None``, when + being invoked from a non-existing directory. + + 1.7.0 (2018-10-11) ================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/PKG-INFO new/py-1.8.0/PKG-INFO --- old/py-1.7.0/PKG-INFO 2018-10-12 12:52:19.000000000 +0200 +++ new/py-1.8.0/PKG-INFO 2019-02-22 02:34:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: py -Version: 1.7.0 +Version: 1.8.0 Summary: library with cross-python path, ini-parsing, io, code, log facilities Home-page: http://py.readthedocs.io/ Author: holger krekel, Ronny Pfannschmidt, Benjamin Peterson and others diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/codecov.yml new/py-1.8.0/codecov.yml --- old/py-1.7.0/codecov.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/py-1.8.0/codecov.yml 2019-02-22 02:33:43.000000000 +0100 @@ -0,0 +1,8 @@ +coverage: + status: + project: true + patch: true + changes: true + +comment: + layout: "diff" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/py/_builtin.py new/py-1.8.0/py/_builtin.py --- old/py-1.7.0/py/_builtin.py 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/py/_builtin.py 2019-02-22 02:33:43.000000000 +0100 @@ -1,120 +1,21 @@ import sys -try: - reversed = reversed -except NameError: - def reversed(sequence): - """reversed(sequence) -> reverse iterator over values of the sequence - - Return a reverse iterator - """ - if hasattr(sequence, '__reversed__'): - return sequence.__reversed__() - if not hasattr(sequence, '__getitem__'): - raise TypeError("argument to reversed() must be a sequence") - return reversed_iterator(sequence) - - class reversed_iterator(object): - - def __init__(self, seq): - self.seq = seq - self.remaining = len(seq) - - def __iter__(self): - return self - - def next(self): - i = self.remaining - if i > 0: - i -= 1 - item = self.seq[i] - self.remaining = i - return item - raise StopIteration - - def __length_hint__(self): - return self.remaining - -try: - any = any -except NameError: - def any(iterable): - for x in iterable: - if x: - return True - return False - -try: - all = all -except NameError: - def all(iterable): - for x in iterable: - if not x: - return False - return True - -try: - sorted = sorted -except NameError: - builtin_cmp = cmp # need to use cmp as keyword arg - - def sorted(iterable, cmp=None, key=None, reverse=0): - use_cmp = None - if key is not None: - if cmp is None: - def use_cmp(x, y): - return builtin_cmp(x[0], y[0]) - else: - def use_cmp(x, y): - return cmp(x[0], y[0]) - l = [(key(element), element) for element in iterable] - else: - if cmp is not None: - use_cmp = cmp - l = list(iterable) - if use_cmp is not None: - l.sort(use_cmp) - else: - l.sort() - if reverse: - l.reverse() - if key is not None: - return [element for (_, element) in l] - return l - -try: - set, frozenset = set, frozenset -except NameError: - from sets import set, frozenset - -# pass through -enumerate = enumerate - -try: - BaseException = BaseException -except NameError: - BaseException = Exception - -try: - GeneratorExit = GeneratorExit -except NameError: - class GeneratorExit(Exception): - """ This exception is never raised, it is there to make it possible to - write code compatible with CPython 2.5 even in lower CPython - versions.""" - pass - GeneratorExit.__module__ = 'exceptions' +# Passthrough for builtins supported with py27. +BaseException = BaseException +GeneratorExit = GeneratorExit _sysex = (KeyboardInterrupt, SystemExit, MemoryError, GeneratorExit) +all = all +any = any +callable = callable +enumerate = enumerate +reversed = reversed +set, frozenset = set, frozenset +sorted = sorted -try: - callable = callable -except NameError: - def callable(obj): - return hasattr(obj, "__call__") if sys.version_info >= (3, 0): - exec ("print_ = print ; exec_=exec") + exec("print_ = print ; exec_=exec") import builtins # some backward compatibility helpers @@ -131,13 +32,13 @@ def _isbytes(x): return isinstance(x, bytes) + def _istext(x): return isinstance(x, str) text = str bytes = bytes - def _getimself(function): return getattr(function, '__self__', None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/py/_io/terminalwriter.py new/py-1.8.0/py/_io/terminalwriter.py --- old/py-1.7.0/py/_io/terminalwriter.py 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/py/_io/terminalwriter.py 2019-02-22 02:33:43.000000000 +0100 @@ -227,7 +227,7 @@ # i.e. 2 + 2*len(sepchar)*N + len(title) <= fullwidth # 2*len(sepchar)*N <= fullwidth - len(title) - 2 # N <= (fullwidth - len(title) - 2) // (2*len(sepchar)) - N = (fullwidth - len(title) - 2) // (2*len(sepchar)) + N = max((fullwidth - len(title) - 2) // (2*len(sepchar)), 1) fill = sepchar * N line = "%s %s %s" % (fill, title, fill) else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/py/_path/local.py new/py-1.8.0/py/_path/local.py --- old/py-1.7.0/py/_path/local.py 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/py/_path/local.py 2019-02-22 02:33:43.000000000 +0100 @@ -18,6 +18,11 @@ else: map_as_list = map +ALLOW_IMPORTLIB_MODE = sys.version_info > (3,5) +if ALLOW_IMPORTLIB_MODE: + import importlib + + class Stat(object): def __getattr__(self, name): return getattr(self._osstatresult, "st_" + name) @@ -574,14 +579,17 @@ @contextmanager def as_cwd(self): - """ return context manager which changes to current dir during the - managed "with" context. On __enter__ it returns the old dir. + """ + Return a context manager, which changes to the path's dir during the + managed "with" context. + On __enter__ it returns the old dir, which might be ``None``. """ old = self.chdir() try: yield old finally: - old.chdir() + if old is not None: + old.chdir() def realpath(self): """ return a new path which contains no symbolic links.""" @@ -647,10 +655,35 @@ If ensuresyspath=="append" the root dir will be appended if it isn't already contained in sys.path. if ensuresyspath is False no modification of syspath happens. + + Special value of ensuresyspath=="importlib" is intended + purely for using in pytest, it is capable only of importing + separate .py files outside packages, e.g. for test suite + without any __init__.py file. It effectively allows having + same-named test modules in different places and offers + mild opt-in via this option. Note that it works only in + recent versions of python. """ if not self.check(): raise py.error.ENOENT(self) + if ensuresyspath == 'importlib': + if modname is None: + modname = self.purebasename + if not ALLOW_IMPORTLIB_MODE: + raise ImportError( + "Can't use importlib due to old version of Python") + spec = importlib.util.spec_from_file_location( + modname, str(self)) + if spec is None: + raise ImportError( + "Can't find module %s at location %s" % + (modname, str(self)) + ) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + pkgpath = None if modname is None: pkgpath = self.pypkgpath() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/py/_version.py new/py-1.8.0/py/_version.py --- old/py-1.7.0/py/_version.py 2018-10-12 12:52:18.000000000 +0200 +++ new/py-1.8.0/py/_version.py 2019-02-22 02:34:00.000000000 +0100 @@ -1,4 +1,4 @@ # coding: utf-8 # file generated by setuptools_scm # don't change, don't track in version control -version = '1.7.0' +version = '1.8.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/py.egg-info/PKG-INFO new/py-1.8.0/py.egg-info/PKG-INFO --- old/py-1.7.0/py.egg-info/PKG-INFO 2018-10-12 12:52:18.000000000 +0200 +++ new/py-1.8.0/py.egg-info/PKG-INFO 2019-02-22 02:34:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: py -Version: 1.7.0 +Version: 1.8.0 Summary: library with cross-python path, ini-parsing, io, code, log facilities Home-page: http://py.readthedocs.io/ Author: holger krekel, Ronny Pfannschmidt, Benjamin Peterson and others diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/py.egg-info/SOURCES.txt new/py-1.8.0/py.egg-info/SOURCES.txt --- old/py-1.7.0/py.egg-info/SOURCES.txt 2018-10-12 12:52:18.000000000 +0200 +++ new/py-1.8.0/py.egg-info/SOURCES.txt 2019-02-22 02:34:00.000000000 +0100 @@ -8,6 +8,7 @@ MANIFEST.in README.rst appveyor.yml +codecov.yml conftest.py setup.cfg setup.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/testing/io_/test_terminalwriter.py new/py-1.8.0/testing/io_/test_terminalwriter.py --- old/py-1.7.0/testing/io_/test_terminalwriter.py 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/testing/io_/test_terminalwriter.py 2019-02-22 02:33:43.000000000 +0100 @@ -165,6 +165,12 @@ assert len(l) == 1 assert l[0] == "-" * 26 + " hello " + "-" * (27-win32) + "\n" + def test_sep_longer_than_width(self, tw): + tw.sep('-', 'a' * 10, fullwidth=5) + line, = tw.getlines() + # even though the string is wider than the line, still have a separator + assert line == '- aaaaaaaaaa -\n' + @py.test.mark.skipif("sys.platform == 'win32'") def test__escaped(self, tw): text2 = tw._escaped("hello", (31)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/testing/path/test_local.py new/py-1.8.0/testing/path/test_local.py --- old/py-1.7.0/testing/path/test_local.py 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/testing/path/test_local.py 2019-02-22 02:33:43.000000000 +0100 @@ -125,6 +125,19 @@ assert path1.chdir() is None assert os.getcwd() == str(path1) + with pytest.raises(py.error.ENOENT): + with p.as_cwd(): + raise NotImplementedError + + @skiponwin32 + def test_chdir_gone_in_as_cwd(self, path1): + p = path1.ensure("dir_to_be_removed", dir=1) + p.chdir() + p.remove() + + with path1.as_cwd() as old: + assert old is None + def test_as_cwd(self, path1): dir = path1.ensure("subdir", dir=1) old = py.path.local() @@ -581,6 +594,39 @@ assert str(root1) not in sys.path[:-1] +class TestImportlibImport: + pytestmark = py.test.mark.skipif("sys.version_info < (3, 5)") + + OPTS = {'ensuresyspath': 'importlib'} + + def test_pyimport(self, path1): + obj = path1.join('execfile.py').pyimport(**self.OPTS) + assert obj.x == 42 + assert obj.__name__ == 'execfile' + + def test_pyimport_dir_fails(self, tmpdir): + p = tmpdir.join("hello_123") + p.ensure("__init__.py") + with pytest.raises(ImportError): + p.pyimport(**self.OPTS) + + def test_pyimport_execfile_different_name(self, path1): + obj = path1.join('execfile.py').pyimport(modname="0x.y.z", **self.OPTS) + assert obj.x == 42 + assert obj.__name__ == '0x.y.z' + + def test_pyimport_relative_import_fails(self, path1): + otherdir = path1.join('otherdir') + with pytest.raises(ImportError): + otherdir.join('a.py').pyimport(**self.OPTS) + + def test_pyimport_doesnt_use_sys_modules(self, tmpdir): + p = tmpdir.ensure('file738jsk.py') + mod = p.pyimport(**self.OPTS) + assert mod.__name__ == 'file738jsk' + assert 'file738jsk' not in sys.modules + + def test_pypkgdir(tmpdir): pkg = tmpdir.ensure('pkg1', dir=1) pkg.ensure("__init__.py") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/testing/root/test_builtin.py new/py-1.8.0/testing/root/test_builtin.py --- old/py-1.7.0/testing/root/test_builtin.py 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/testing/root/test_builtin.py 2019-02-22 02:33:43.000000000 +0100 @@ -1,7 +1,7 @@ import sys import types import py -from py.builtin import set, frozenset, reversed, sorted +from py.builtin import set, frozenset def test_enumerate(): l = [0,1,2] @@ -53,29 +53,6 @@ s = set([frozenset([0, 1]), frozenset([1, 0])]) assert len(s) == 1 -def test_sorted(): - if sorted == py.builtin.sorted: - return # don't test a real builtin - for s in [py.builtin.sorted]: - def test(): - assert s([3, 2, 1]) == [1, 2, 3] - assert s([1, 2, 3], reverse=True) == [3, 2, 1] - l = s([1, 2, 3, 4, 5, 6], key=lambda x: x % 2) - assert l == [2, 4, 6, 1, 3, 5] - l = s([1, 2, 3, 4], cmp=lambda x, y: -cmp(x, y)) - assert l == [4, 3, 2, 1] - l = s([1, 2, 3, 4], cmp=lambda x, y: -cmp(x, y), - key=lambda x: x % 2) - assert l == [1, 3, 2, 4] - - def compare(x, y): - assert type(x) == str - assert type(y) == str - return cmp(x, y) - data = 'The quick Brown fox Jumped over The lazy Dog'.split() - s(data, cmp=compare, key=str.lower) - yield test - def test_print_simple(): from py.builtin import print_ @@ -116,7 +93,7 @@ def test_getfuncdict(): def f(): - pass + raise NotImplementedError f.x = 4 assert py.builtin._getfuncdict(f)["x"] == 4 assert py.builtin._getfuncdict(2) is None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-1.7.0/tox.ini new/py-1.8.0/tox.ini --- old/py-1.7.0/tox.ini 2018-10-12 12:51:54.000000000 +0200 +++ new/py-1.8.0/tox.ini 2019-02-22 02:33:43.000000000 +0100 @@ -3,10 +3,9 @@ envlist=py{27,34,35,36}-pytest{29,30,31},py37-pytest{30,31} [testenv] -changedir=testing commands= - pip install -U .. # hande the install order fallout since pytest depends on pip - py.test --confcutdir=.. -rfsxX --junitxml={envlogdir}/junit-{envname}.xml [] + pip install -U . # hande the install order fallout since pytest depends on pip + py.test --confcutdir=. --junitxml={envlogdir}/junit-{envname}.xml [] deps= attrs pytest29: pytest~=2.9.0 @@ -20,15 +19,26 @@ pytest-xdist<=1.16.0 commands= pip install -U .. # hande the install order fallout since pytest depends on pip - py.test -n3 -rfsxX --confcutdir=.. --runslowtests \ + py.test -n3 --confcutdir=.. --runslowtests \ --junitxml={envlogdir}/junit-{envname}.xml [] [testenv:jython] changedir=testing commands= {envpython} -m pip install -U .. # hande the install order fallout since pytest depends on pip - {envpython} -m pytest --confcutdir=.. -rfsxX --junitxml={envlogdir}/junit-{envname}0.xml {posargs:io_ code} + {envpython} -m pytest --confcutdir=.. --junitxml={envlogdir}/junit-{envname}0.xml {posargs:io_ code} [pytest] rsyncdirs = conftest.py py doc testing addopts = -ra +testpaths = testing + +[coverage:run] +branch = 1 +source = . +parallel = 1 +[coverage:report] +include = py/*,testing/* +exclude_lines = + #\s*(pragma|PRAGMA)[:\s]?\s*(no|NO)\s*(cover|COVER) + ^\s*raise NotImplementedError\b