Accepting request 938526 from devel:languages:python
OBS-URL: https://build.opensuse.org/request/show/938526 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-coverage?expand=0&rev=46
This commit is contained in:
commit
38c47a9379
@ -1,140 +0,0 @@
|
||||
From e36b42e2db46e892d9347ba0408c99b187ba8cb8 Mon Sep 17 00:00:00 2001
|
||||
From: Ned Batchelder <ned@nedbatchelder.com>
|
||||
Date: Mon, 3 May 2021 07:56:05 -0400
|
||||
Subject: [PATCH] fix: make data collection operations thread-safe
|
||||
|
||||
---
|
||||
CHANGES.rst | 3 +++
|
||||
coverage/sqldata.py | 20 ++++++++++++++++++++
|
||||
tests/test_data.py | 7 ++++++-
|
||||
3 files changed, 29 insertions(+), 1 deletion(-)
|
||||
|
||||
#diff --git a/CHANGES.rst b/CHANGES.rst
|
||||
#index 29af7340..3c65e5d8 100644
|
||||
#--- a/CHANGES.rst
|
||||
#+++ b/CHANGES.rst
|
||||
#@@ -26,6 +26,9 @@ Unreleased
|
||||
#
|
||||
# - Dropped support for Python 2.7, PyPy 2, and Python 3.5.
|
||||
#
|
||||
#+- Data collection is now thread-safe. There may have been rare instances of
|
||||
#+ exceptions raised in multi-threaded programs.
|
||||
#+
|
||||
# - Plugins (like the `Django coverage plugin`_) were generating "Already
|
||||
# imported a file that will be measured" warnings about Django itself. These
|
||||
# have been fixed, closing `issue 1150`_.
|
||||
Index: coverage-5.5/coverage/sqldata.py
|
||||
===================================================================
|
||||
--- coverage-5.5.orig/coverage/sqldata.py
|
||||
+++ coverage-5.5/coverage/sqldata.py
|
||||
@@ -8,12 +8,14 @@
|
||||
|
||||
import collections
|
||||
import datetime
|
||||
+import functools
|
||||
import glob
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
import sqlite3
|
||||
import sys
|
||||
+import threading
|
||||
import zlib
|
||||
|
||||
from coverage import env
|
||||
@@ -179,6 +181,10 @@ class CoverageData(SimpleReprMixin):
|
||||
Data in a :class:`CoverageData` can be serialized and deserialized with
|
||||
:meth:`dumps` and :meth:`loads`.
|
||||
|
||||
+ The methods used during the coverage.py collection phase
|
||||
+ (:meth:`add_lines`, :meth:`add_arcs`, :meth:`set_context`, and
|
||||
+ :meth:`add_file_tracers`) are thread-safe. Other methods may not be.
|
||||
+
|
||||
"""
|
||||
|
||||
def __init__(self, basename=None, suffix=None, no_disk=False, warn=None, debug=None):
|
||||
@@ -207,6 +213,8 @@ class CoverageData(SimpleReprMixin):
|
||||
# Maps thread ids to SqliteDb objects.
|
||||
self._dbs = {}
|
||||
self._pid = os.getpid()
|
||||
+ # Synchronize the operations used during collection.
|
||||
+ self._lock = threading.Lock()
|
||||
|
||||
# Are we in sync with the data file?
|
||||
self._have_used = False
|
||||
@@ -218,6 +226,15 @@ class CoverageData(SimpleReprMixin):
|
||||
self._current_context_id = None
|
||||
self._query_context_ids = None
|
||||
|
||||
+ def _locked(method): # pylint: disable=no-self-argument
|
||||
+ """A decorator for methods that should hold self._lock."""
|
||||
+ @functools.wraps(method)
|
||||
+ def _wrapped(self, *args, **kwargs):
|
||||
+ with self._lock:
|
||||
+ # pylint: disable=not-callable
|
||||
+ return method(self, *args, **kwargs)
|
||||
+ return _wrapped
|
||||
+
|
||||
def _choose_filename(self):
|
||||
"""Set self._filename based on inited attributes."""
|
||||
if self._no_disk:
|
||||
@@ -381,6 +398,7 @@ class CoverageData(SimpleReprMixin):
|
||||
else:
|
||||
return None
|
||||
|
||||
+ @_locked
|
||||
def set_context(self, context):
|
||||
"""Set the current context for future :meth:`add_lines` etc.
|
||||
|
||||
@@ -422,6 +440,7 @@ class CoverageData(SimpleReprMixin):
|
||||
"""
|
||||
return self._filename
|
||||
|
||||
+ @_locked
|
||||
def add_lines(self, line_data):
|
||||
"""Add measured line data.
|
||||
|
||||
@@ -454,6 +473,7 @@ class CoverageData(SimpleReprMixin):
|
||||
(file_id, self._current_context_id, linemap),
|
||||
)
|
||||
|
||||
+ @_locked
|
||||
def add_arcs(self, arc_data):
|
||||
"""Add measured arc data.
|
||||
|
||||
@@ -498,6 +518,7 @@ class CoverageData(SimpleReprMixin):
|
||||
('has_arcs', str(int(arcs)))
|
||||
)
|
||||
|
||||
+ @_locked
|
||||
def add_file_tracers(self, file_tracers):
|
||||
"""Add per-file plugin information.
|
||||
|
||||
Index: coverage-5.5/tests/test_data.py
|
||||
===================================================================
|
||||
--- coverage-5.5.orig/tests/test_data.py
|
||||
+++ coverage-5.5/tests/test_data.py
|
||||
@@ -488,10 +488,14 @@ class CoverageDataTest(DataTestHelpers,
|
||||
|
||||
def test_thread_stress(self):
|
||||
covdata = CoverageData()
|
||||
+ exceptions = []
|
||||
|
||||
def thread_main():
|
||||
"""Every thread will try to add the same data."""
|
||||
- covdata.add_lines(LINES_1)
|
||||
+ try:
|
||||
+ covdata.add_lines(LINES_1)
|
||||
+ except Exception as ex:
|
||||
+ exceptions.append(ex)
|
||||
|
||||
threads = [threading.Thread(target=thread_main) for _ in range(10)]
|
||||
for t in threads:
|
||||
@@ -500,6 +504,7 @@ class CoverageDataTest(DataTestHelpers,
|
||||
t.join()
|
||||
|
||||
self.assert_lines1_data(covdata)
|
||||
+ assert exceptions == []
|
||||
|
||||
|
||||
class CoverageDataTestInTempDir(DataTestHelpers, CoverageTest):
|
@ -1,36 +0,0 @@
|
||||
From 01cbb8751f98e5a7de79699444cbc03647691616 Mon Sep 17 00:00:00 2001
|
||||
From: Ned Batchelder <ned@nedbatchelder.com>
|
||||
Date: Tue, 11 May 2021 19:32:32 -0400
|
||||
Subject: [PATCH] fix: Python 3.8.10 changed how __file__ is reported when
|
||||
running directories
|
||||
|
||||
---
|
||||
coverage/execfile.py | 5 +++++
|
||||
tests/test_process.py | 2 +-
|
||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/coverage/execfile.py
|
||||
+++ b/coverage/execfile.py
|
||||
@@ -176,6 +176,11 @@ class PyRunner(object):
|
||||
# directory.
|
||||
for ext in [".py", ".pyc", ".pyo"]:
|
||||
try_filename = os.path.join(self.arg0, "__main__" + ext)
|
||||
+ # 3.8.10 changed how files are reported when running a
|
||||
+ # directory. But I'm not sure how far this change is going to
|
||||
+ # spread, so I'll just hard-code it here for now.
|
||||
+ if env.PYVERSION >= (3, 8, 10):
|
||||
+ try_filename = os.path.abspath(try_filename)
|
||||
if os.path.exists(try_filename):
|
||||
self.arg0 = try_filename
|
||||
break
|
||||
--- a/tests/test_process.py
|
||||
+++ b/tests/test_process.py
|
||||
@@ -852,7 +852,7 @@ class EnvironmentTest(CoverageTest):
|
||||
expected = re_lines(expected, r'\s+"argv0":', match=False)
|
||||
actual = re_lines(actual, r'\s+"argv0":', match=False)
|
||||
|
||||
- assert expected == actual
|
||||
+ assert actual == expected
|
||||
|
||||
def test_coverage_run_is_like_python(self):
|
||||
with open(TRY_EXECFILE) as f:
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c
|
||||
size 691258
|
3
coverage-6.2.tar.gz
Normal file
3
coverage-6.2.tar.gz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8
|
||||
size 678664
|
@ -1,3 +1,187 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Dec 9 17:16:23 UTC 2021 - Ben Greiner <code@bnavigator.de>
|
||||
|
||||
- Update to version 6.2
|
||||
* Feature: Now the --concurrency setting can now have a list of
|
||||
values, so that threads and another lightweight threading
|
||||
package can be measured together, such as
|
||||
--concurrency=gevent,thread. Closes issue 1012 and issue 1082.
|
||||
* Fix: A module specified as the source setting is imported
|
||||
during startup, before the user program imports it. This could
|
||||
cause problems if the rest of the program isn't ready yet. For
|
||||
example, issue 1203 describes a Django setting that is accessed
|
||||
before settings have been configured. Now the early import is
|
||||
wrapped in a try/except so errors then don't stop execution.
|
||||
* Fix: A colon in a decorator expression would cause an exclusion
|
||||
to end too early, preventing the exclusion of the decorated
|
||||
function. This is now fixed.
|
||||
* Fix: The HTML report now will not overwrite a .gitignore file
|
||||
that already exists in the HTML output directory (follow-on for
|
||||
issue 1244).
|
||||
* API: The exceptions raised by Coverage.py have been
|
||||
specialized, to provide finer-grained catching of exceptions by
|
||||
third-party code.
|
||||
* API: Using suffix=False when constructing a Coverage object
|
||||
with multiprocessing wouldn't suppress the data file suffix
|
||||
(issue 989). This is now fixed.
|
||||
* Debug: The coverage debug data command will now sniff out
|
||||
combinable data files, and report on all of them.
|
||||
* Debug: The coverage debug command used to accept a number of
|
||||
topics at a time, and show all of them, though this was never
|
||||
documented. This no longer works, to allow for command-line
|
||||
options in the future.
|
||||
- Release notes for 6.1.2
|
||||
* Python 3.11 is supported (tested with 3.11.0a2). One still-open
|
||||
issue has to do with exits through with-statements.
|
||||
* Fix: When remapping file paths through the [paths] setting
|
||||
while combining, the [run] relative_files setting was ignored,
|
||||
resulting in absolute paths for remapped file names (issue
|
||||
1147). This is now fixed.
|
||||
* Fix: Complex conditionals over excluded lines could have
|
||||
incorrectly reported a missing branch (issue 1271). This is now
|
||||
fixed.
|
||||
* Fix: More exceptions are now handled when trying to parse
|
||||
source files for reporting. Problems that used to terminate
|
||||
coverage.py can now be handled with [report] ignore_errors.
|
||||
This helps with plugins failing to read files
|
||||
(django_coverage_plugin issue 78).
|
||||
* Fix: Removed another vestige of jQuery from the source tarball
|
||||
(issue 840).
|
||||
* Fix: Added a default value for a new-to-6.x argument of an
|
||||
internal class. This unsupported class is being used by
|
||||
coveralls (issue 1273). Although I'd rather not "fix"
|
||||
unsupported interfaces, it's actually nicer with a default
|
||||
value.
|
||||
- Release notes for 6.1.1
|
||||
* Fix: The sticky header on the HTML report didn't work unless
|
||||
you had branch coverage enabled. This is now fixed: the sticky
|
||||
header works for everyone. (Do people still use coverage
|
||||
without branch measurement!? j/k)
|
||||
* Fix: When using explicitly declared namespace packages, the
|
||||
"already imported a file that will be measured" warning would
|
||||
be issued (issue 888). This is now fixed.
|
||||
- Release notes for 6.1
|
||||
* Deprecated: The annotate command and the Coverage.annotate
|
||||
function will be removed in a future version, unless people let
|
||||
me know that they are using it. Instead, the html command gives
|
||||
better-looking (and more accurate) output, and the report -m
|
||||
command will tell you line numbers of missing lines. Please get
|
||||
in touch if you have a reason to use annotate over those better
|
||||
options: ned@nedbatchelder.com.
|
||||
* Feature: Coverage now sets an environment variable,
|
||||
COVERAGE_RUN when running your code with the coverage run
|
||||
command. The value is not important, and may change in the
|
||||
future. Closes issue 553.
|
||||
* Feature: The HTML report pages for Python source files now have
|
||||
a sticky header so the file name and controls are always
|
||||
visible.
|
||||
* Feature: The xml and json commands now describe what they wrote
|
||||
where.
|
||||
* Feature: The html, combine, xml, and json commands all accept a
|
||||
-q/--quiet option to suppress the messages they write to stdout
|
||||
about what they are doing (issue 1254).
|
||||
* Feature: The html command writes a .gitignore file into the
|
||||
HTML output directory, to prevent the report from being
|
||||
committed to git. If you want to commit it, you will need to
|
||||
delete that file. Closes issue 1244.
|
||||
* Feature: Added support for PyPy 3.8.
|
||||
* Fix: More generated code is now excluded from measurement. Code
|
||||
such as attrs boilerplate, or doctest code, was being measured
|
||||
though the synthetic line numbers meant they were never
|
||||
reported. Once Cython was involved though, the generated .so
|
||||
files were parsed as Python, raising syntax errors, as reported
|
||||
in issue 1160. This is now fixed.
|
||||
* Fix: When sorting human-readable names, numeric components are
|
||||
sorted correctly: file10.py will appear after file9.py. This
|
||||
applies to file names, module names, environment variables, and
|
||||
test contexts.
|
||||
* Performance: Branch coverage measurement is faster, though you
|
||||
might only notice on code that is executed many times, such as
|
||||
long-running loops.
|
||||
* Build: jQuery is no longer used or vendored (issue 840 and
|
||||
issue 1118). Huge thanks to Nils Kattenbeck (septatrix) for the
|
||||
conversion to vanilla JavaScript in pull request 1248.
|
||||
- Release notes for 6.0.2
|
||||
* Namespace packages being measured weren't properly handled by
|
||||
the new code that ignores third-party packages. If the
|
||||
namespace package was installed, it was ignored as a
|
||||
third-party package. That problem (issue 1231) is now fixed.
|
||||
* Packages named as "source packages" (with source, or
|
||||
source_pkgs, or pytest-cov's --cov) might have been only
|
||||
partially measured. Their top-level statements could be marked
|
||||
as unexecuted, because they were imported by coverage.py before
|
||||
measurement began (issue 1232). This is now fixed, but the
|
||||
package will be imported twice, once by coverage.py, then again
|
||||
by your test suite. This could cause problems if importing the
|
||||
package has side effects.
|
||||
* The :meth:`.CoverageData.contexts_by_lineno` method was
|
||||
documented to return a dict, but was returning a defaultdict.
|
||||
Now it returns a plain dict. It also no longer returns negative
|
||||
numbered keys.
|
||||
- Release notes for 6.0.1
|
||||
* In 6.0, the coverage.py exceptions moved from coverage.misc to
|
||||
coverage.exceptions. These exceptions are not part of the
|
||||
public supported API, CoverageException is. But a number of
|
||||
other third-party packages were importing the exceptions from
|
||||
coverage.misc, so they are now available from there again
|
||||
(issue 1226).
|
||||
* Changed an internal detail of how tomli is imported, so that
|
||||
tomli can use coverage.py for their own test suite (issue
|
||||
1228).
|
||||
* Defend against an obscure possibility under code obfuscation,
|
||||
where a function can have an argument called "self", but no
|
||||
local named "self" (pull request 1210). Thanks, Ben Carlsson.
|
||||
- Release notes for 6.0
|
||||
* The coverage html command now prints a message indicating where
|
||||
the HTML report was written. Fixes issue 1195.
|
||||
* The coverage combine command now prints messages indicating
|
||||
each data file being combined. Fixes issue 1105.
|
||||
* The HTML report now includes a sentence about skipped files due
|
||||
to skip_covered or skip_empty settings. Fixes issue 1163.
|
||||
* Unrecognized options in the configuration file are no longer
|
||||
errors. They are now warnings, to ease the use of coverage
|
||||
across versions. Fixes issue 1035.
|
||||
* Fix handling of exceptions through context managers in Python
|
||||
3.10. A missing exception is no longer considered a missing
|
||||
branch from the with statement. Fixes issue 1205.
|
||||
* Fix another rarer instance of "Error binding parameter 0 -
|
||||
probably unsupported type." (issue 1010).
|
||||
* Creating a directory for the coverage data file now is safer
|
||||
against conflicts when two coverage runs happen simultaneously
|
||||
(pull 1220). Thanks, Clément Pit-Claudel.
|
||||
- Release notes for Version 6.0b1
|
||||
* Dropped support for Python 2.7, PyPy 2, and Python 3.5.
|
||||
* Added support for the Python 3.10 match/case syntax.
|
||||
* Data collection is now thread-safe. There may have been rare
|
||||
instances of exceptions raised in multi-threaded programs.
|
||||
* Plugins (like the Django coverage plugin) were generating
|
||||
"Already imported a file that will be measured" warnings about
|
||||
Django itself. These have been fixed, closing issue 1150.
|
||||
* Warnings generated by coverage.py are now real Python warnings.
|
||||
* Using --fail-under=100 with coverage near 100% could result in
|
||||
the self-contradictory message total of 100 is less than
|
||||
fail-under=100. This bug (issue 1168) is now fixed.
|
||||
* The COVERAGE_DEBUG_FILE environment variable now accepts stdout
|
||||
and stderr to write to those destinations.
|
||||
* TOML parsing now uses the tomli library.
|
||||
* Some minor changes to usually invisible details of the HTML
|
||||
report:
|
||||
* Use a modern hash algorithm when fingerprinting, for
|
||||
high-security environments (issue 1189). When generating the
|
||||
HTML report, we save the hash of the data, to avoid
|
||||
regenerating an unchanged HTML page. We used to use MD5 to
|
||||
generate the hash, and now use SHA-3-256. This was never a
|
||||
security concern, but security scanners would notice the MD5
|
||||
algorithm and raise a false alarm.
|
||||
* Change how report file names are generated, to avoid leading
|
||||
underscores (issue 1167), to avoid rare file name collisions
|
||||
(issue 584), and to avoid file names becoming too long (issue
|
||||
580).
|
||||
- Drop patches
|
||||
* 0001-make-data-collection-operations-thread-safe.patch
|
||||
* change__file__report-dir.patch
|
||||
* traced_file_absolute.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed May 12 09:29:03 UTC 2021 - Matej Cepl <mcepl@suse.com>
|
||||
|
||||
|
@ -16,39 +16,31 @@
|
||||
#
|
||||
|
||||
|
||||
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
|
||||
%{?!python_module:%define python_module() python3-%{**}}
|
||||
%define skip_python2 1
|
||||
Name: python-coverage
|
||||
Version: 5.5
|
||||
Version: 6.2
|
||||
Release: 0
|
||||
Summary: Code coverage measurement for Python
|
||||
License: Apache-2.0
|
||||
URL: https://github.com/nedbat/coveragepy
|
||||
Source: https://files.pythonhosted.org/packages/source/c/coverage/coverage-%{version}.tar.gz
|
||||
# PATCH-FIX-UPSTREAM traced_file_absolute.patch gh#nedbat/coveragepy#1161 mcepl@suse.com
|
||||
# traced file names seem to be absolute now?
|
||||
Patch0: traced_file_absolute.patch
|
||||
# PATCH-FIX-UPSTREAM 0001-make-data-collection-operations-thread-safe.patch gh#nedbat/coveragepy#commit-e36b42e2db46 alarrosa@suse.com
|
||||
# Make data collection operations thread safe
|
||||
Patch1: 0001-make-data-collection-operations-thread-safe.patch
|
||||
# PATCH-FIX-UPSTREAM change__file__report-dir.patch gh#nedbat/coveragepy#1161 mcepl@suse.com
|
||||
# Fix yet another regression in Python 3.8.10, this time about __file__ value for directories.
|
||||
Patch2: change__file__report-dir.patch
|
||||
BuildRequires: %{python_module devel}
|
||||
BuildRequires: %{python_module setuptools}
|
||||
# SECTION test requirements
|
||||
BuildRequires: %{python_module flaky}
|
||||
BuildRequires: %{python_module hypothesis >= 4.57}
|
||||
BuildRequires: %{python_module mock}
|
||||
BuildRequires: %{python_module pytest >= 4.6}
|
||||
BuildRequires: %{python_module pytest-xdist}
|
||||
BuildRequires: %{python_module setuptools}
|
||||
BuildRequires: %{python_module toml}
|
||||
BuildRequires: %{python_module unittest-mixins}
|
||||
BuildRequires: %{python_module xml}
|
||||
BuildRequires: %{pythons}
|
||||
BuildRequires: %{python_module tomli}
|
||||
# for database (sqlite3) support
|
||||
BuildRequires: %pythons
|
||||
# /SECTION
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: python-rpm-macros
|
||||
Requires: python
|
||||
Requires: python-setuptools
|
||||
Requires: python-toml
|
||||
# coverage[toml]
|
||||
Recommends: python-tomli
|
||||
Requires(post): update-alternatives
|
||||
Requires(postun):update-alternatives
|
||||
%python_subpackages
|
||||
@ -61,14 +53,8 @@ library to determine which lines are executable, and which have been executed.
|
||||
%prep
|
||||
%autosetup -p1 -n coverage-%{version}
|
||||
|
||||
# do not require xdist
|
||||
# we define everything necessary ourselves below
|
||||
sed -i -e '/addopts/d' setup.cfg
|
||||
# writes in /usr/
|
||||
rm tests/test_process.py
|
||||
# summary differs trivialy
|
||||
rm tests/test_summary.py
|
||||
# requires additional plugins
|
||||
rm tests/test_plugins.py
|
||||
|
||||
%build
|
||||
%python_build
|
||||
@ -80,18 +66,6 @@ rm -vf %{buildroot}%{_bindir}/coverage{2,3}
|
||||
%python_expand %fdupes %{buildroot}%{$python_sitearch}
|
||||
|
||||
%check
|
||||
# GetZipBytesTest.test_get_encoded_zip_files - needs zip command
|
||||
# test_egg - needs generated egg file
|
||||
# test_doctest - weird doctest importing
|
||||
# test_unicode - differs between py2/py3
|
||||
# test_version - checks for non-compiled variant, we ship only compiled one
|
||||
# test_multiprocessing_with_branching - whitespace issue in regexp
|
||||
# test_farm, test_encoding, test_multi - tries to write in /usr
|
||||
# test_dothtml_not_python - no idea
|
||||
# test_bytes
|
||||
# test_one_of
|
||||
# test_xdist_sys_path_nuttiness_is_fixed - xdist check that we actually fail on purpose
|
||||
# test_debug_sys_ctracer - requires dep on ctracer
|
||||
export LANG=en_US.UTF8
|
||||
%{python_expand # Link executables to flavor specific build areas, to be used for testing. build/ is shuffled around by python_expand
|
||||
mkdir build/bin
|
||||
@ -100,12 +74,35 @@ for filepath in %{buildroot}%{_bindir}/coverage*-%{$python_bin_suffix}; do
|
||||
unsuffixed=${filename/-%{$python_bin_suffix}/}
|
||||
ln -s $filepath build/bin/$unsuffixed
|
||||
done
|
||||
# indicate a writeable .pth directory for tests
|
||||
mkdir -p build/mysite
|
||||
cp %{python_sitearch}/zzzz-import-failed-hooks.pth build/mysite/
|
||||
}
|
||||
# the tests need the empty leading part for importing local test projects"
|
||||
export PYTHONPATH=":$PWD/build/mysite"
|
||||
|
||||
export PATH="$(pwd)/build/bin:$PATH"
|
||||
|
||||
%python_exec -mcoverage debug sys
|
||||
# the tests need the empty leading part for importing local test projects, the x is a dummy"
|
||||
export PYTHONPATH=":x"
|
||||
%pytest_arch -k 'not (test_get_encoded_zip_files or test_egg or test_doctest or test_unicode or test_version or test_multiprocessing_with_branching or test_farm or test_dothtml_not_python or test_one_of or test_bytes or test_encoding or test_multi or test_xdist_sys_path_nuttiness_is_fixed or test_debug_sys_ctracer)'
|
||||
|
||||
# installs some test modules into tests/ (flavor agnostic)
|
||||
python3 igor.py zip_mods
|
||||
|
||||
# test_version - checks for non-compiled variant, we ship only compiled one
|
||||
donttest="test_version"
|
||||
# test_xdist_sys_path_nuttiness_is_fixed - xdist check that we actually fail on purpose
|
||||
donttest+=" or test_xdist_sys_path_nuttiness_is_fixed"
|
||||
# test_debug_sys_ctracer - requires dep on ctracer
|
||||
donttest+=" or test_debug_sys_ctracer"
|
||||
# does not find a usable venv
|
||||
donttest+=" or test_venv"
|
||||
# writes in /usr/
|
||||
donttest+=" or test_process"
|
||||
# requires additional plugins
|
||||
donttest+=" or test_plugins"
|
||||
|
||||
%pytest_arch -n auto --no-flaky-report -k "$donttest" -rp ||:
|
||||
%pytest_arch -n auto --no-flaky-report -k "not ($donttest)"
|
||||
|
||||
%post
|
||||
%python_install_alternative coverage
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 06cb51b39620e2140f915393f0f41b281594e05b Mon Sep 17 00:00:00 2001
|
||||
From: Ned Batchelder <ned@nedbatchelder.com>
|
||||
Date: Sat, 8 May 2021 21:27:45 -0400
|
||||
Subject: [PATCH] test: traced file names seem to be absolute now? #1161
|
||||
|
||||
This was changed in 3.10.0b1 and 3.9.5. Seems like a strange change to
|
||||
throw into 3.9.5, but there it is. Fixes #1161.
|
||||
---
|
||||
tests/test_debug.py | 6 ++++--
|
||||
tests/test_oddball.py | 16 +++++++++-------
|
||||
2 files changed, 13 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/tests/test_debug.py
|
||||
+++ b/tests/test_debug.py
|
||||
@@ -124,8 +124,10 @@ class DebugTraceTest(CoverageTest):
|
||||
def test_debug_trace(self):
|
||||
out_lines = self.f1_debug_output(["trace"])
|
||||
|
||||
- # We should have a line like "Tracing 'f1.py'"
|
||||
- assert "Tracing 'f1.py'" in out_lines
|
||||
+ # We should have a line like "Tracing 'f1.py'", perhaps with an
|
||||
+ # absolute path.
|
||||
+ f1 = re_lines(out_lines, r"Tracing '.*f1.py'")
|
||||
+ assert f1
|
||||
|
||||
# We should have lines like "Not tracing 'collector.py'..."
|
||||
coverage_lines = re_lines(
|
||||
--- a/tests/test_oddball.py
|
||||
+++ b/tests/test_oddball.py
|
||||
@@ -451,10 +451,12 @@ class GettraceTest(CoverageTest):
|
||||
def test_setting_new_trace_function(self):
|
||||
# https://github.com/nedbat/coveragepy/issues/436
|
||||
self.check_coverage('''\
|
||||
+ import os.path
|
||||
import sys
|
||||
|
||||
def tracer(frame, event, arg):
|
||||
- print("%s: %s @ %d" % (event, frame.f_code.co_filename, frame.f_lineno))
|
||||
+ filename = os.path.basename(frame.f_code.co_filename)
|
||||
+ print("%s: %s @ %d" % (event, filename, frame.f_lineno))
|
||||
return tracer
|
||||
|
||||
def begin():
|
||||
@@ -474,16 +476,16 @@ class GettraceTest(CoverageTest):
|
||||
a = 21
|
||||
b = 22
|
||||
''',
|
||||
- lines=[1, 3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22],
|
||||
- missing="4-5, 11-12",
|
||||
+ lines=[1, 2, 4, 5, 6, 7, 9, 10, 12, 13, 14, 16, 17, 18, 20, 21, 22, 23, 24],
|
||||
+ missing="5-7, 13-14",
|
||||
)
|
||||
|
||||
out = self.stdout().replace(self.last_module_name, "coverage_test")
|
||||
expected = (
|
||||
- "call: coverage_test.py @ 10\n"
|
||||
- "line: coverage_test.py @ 11\n"
|
||||
- "line: coverage_test.py @ 12\n"
|
||||
- "return: coverage_test.py @ 12\n"
|
||||
+ "call: coverage_test.py @ 12\n"
|
||||
+ "line: coverage_test.py @ 13\n"
|
||||
+ "line: coverage_test.py @ 14\n"
|
||||
+ "return: coverage_test.py @ 14\n"
|
||||
)
|
||||
assert expected == out
|
||||
|
Loading…
x
Reference in New Issue
Block a user