dev-python/coverage: Fix tests with cpython in 4.5.4
authorPatrick McLean <chutzpah@gentoo.org>
Sat, 16 Nov 2019 07:57:33 +0000 (23:57 -0800)
committerPatrick McLean <chutzpah@gentoo.org>
Sat, 16 Nov 2019 07:57:33 +0000 (23:57 -0800)
Package-Manager: Portage-2.3.79, Repoman-2.3.18
Signed-off-by: Patrick McLean <chutzpah@gentoo.org>
dev-python/coverage/coverage-4.5.4.ebuild
dev-python/coverage/files/coverage-4.5.4-tests.patch [new file with mode: 0644]

index f6b95bdeabdb321a33a80a04dd7d4507af77c7f9..75ac87bd7a1ae7c7849b5eccc0ac35f0c3fafe35 100644 (file)
@@ -28,9 +28,15 @@ BDEPEND="
        )
 "
 
+DISTUTILS_IN_SOURCE_BUILD=1
+
+PATCHES=(
+       "${FILESDIR}/coverage-4.5.4-tests.patch"
+)
+
 src_prepare() {
-       # avoid the dep on xdist
-       sed -i -e '/^addopts/s:-n3::' setup.cfg || die
+       # avoid the dep on xdist, run tests verbosely
+       sed -i -e '/^addopts/s:-n3:-v:' setup.cfg || die
        distutils-r1_src_prepare
 }
 
@@ -45,6 +51,18 @@ python_compile() {
 
 python_test() {
        distutils_install_for_testing
-       "${EPYTHON}" igor.py test_with_tracer py || die
-       "${EPYTHON}" igor.py test_with_tracer c || die
+       local bindir=${TEST_DIR}/scripts
+
+       pushd tests/eggsrc >/dev/null || die
+       distutils_install_for_testing
+       popd >/dev/null || die
+
+       "${EPYTHON}" igor.py zip_mods || die
+       PATH="${bindir}:${PATH}" "${EPYTHON}" igor.py test_with_tracer py || die
+
+       # No C extensions under pypy
+       if [[ ${EPYTHON} != pypy* ]]; then
+               cp -l -- "${TEST_DIR}"/lib/*/coverage/*.so coverage/ || die
+               PATH="${bindir}:${PATH}" "${EPYTHON}" igor.py test_with_tracer c || die
+       fi
 }
diff --git a/dev-python/coverage/files/coverage-4.5.4-tests.patch b/dev-python/coverage/files/coverage-4.5.4-tests.patch
new file mode 100644 (file)
index 0000000..193c4e8
--- /dev/null
@@ -0,0 +1,104 @@
+diff --git a/tests/farm/run/run_timid.py b/tests/farm/run/run_timid.py
+index 0370cf84..4e3cf1ca 100644
+--- a/tests/farm/run/run_timid.py
++++ b/tests/farm/run/run_timid.py
+@@ -38,6 +38,10 @@ if os.environ.get('COVERAGE_TEST_TRACER', 'c') == 'c':
+ else:
+     # If the Python trace function is being tested, then regular running will
+     # also show the Python function.
+-    contains("out_timid/showtraceout.txt", "regular PyTracer")
++    #
++    # tox.ini deletes compiled c modules to make this test work, not feasible
++    # to do this from the ebuild environment
++    #contains("out_timid/showtraceout.txt", "regular PyTracer")
++    pass
+ clean("out_timid")
+diff --git a/tests/test_concurrency.py b/tests/test_concurrency.py
+index 578cc679..ae340099 100644
+--- a/tests/test_concurrency.py
++++ b/tests/test_concurrency.py
+@@ -11,6 +11,7 @@ import time
+ from flaky import flaky
++import unittest
+ import coverage
+ from coverage import env
+ from coverage.backward import import_local_file
+@@ -271,6 +272,7 @@ class ConcurrencyTest(CoverageTest):
+         code = SIMPLE.format(QLIMIT=self.QLIMIT)
+         self.try_some_code(code, "gevent", gevent)
++    @unittest.skip("greenlet tests don't work with python tracer")
+     def test_greenlet(self):
+         GREENLET = """\
+             from greenlet import greenlet
+@@ -289,6 +291,7 @@ class ConcurrencyTest(CoverageTest):
+             """
+         self.try_some_code(GREENLET, "greenlet", greenlet, "hello world\n42\n")
++    @unittest.skip("greenlet tests don't work with python tracer")
+     def test_greenlet_simple_code(self):
+         code = SIMPLE.format(QLIMIT=self.QLIMIT)
+         self.try_some_code(code, "greenlet", greenlet)
+diff --git a/tests/test_filereporter.py b/tests/test_filereporter.py
+index 91e47762..121c3260 100644
+--- a/tests/test_filereporter.py
++++ b/tests/test_filereporter.py
+@@ -4,6 +4,7 @@
+ """Tests for FileReporters"""
+ import os
++import unittest
+ from coverage.plugin import FileReporter
+ from coverage.python import PythonFileReporter
+@@ -87,6 +88,7 @@ class FileReporterTest(UsingModulesMixin, CoverageTest):
+         assert acu < bcu and acu <= bcu and acu != bcu
+         assert bcu > acu and bcu >= acu and bcu != acu
++    @unittest.skip("we don't install zip eggs on gentoo")
+     def test_egg(self):
+         # Test that we can get files out of eggs, and read their source files.
+         # The egg1 module is installed by an action in igor.py.
+diff --git a/tests/test_oddball.py b/tests/test_oddball.py
+index aa2f333c..bc63395a 100644
+--- a/tests/test_oddball.py
++++ b/tests/test_oddball.py
+@@ -405,7 +405,9 @@ class DoctestTest(CoverageTest):
+         # well with coverage. Nose fixes the problem by monkeypatching doctest.
+         # I want to be sure there's no monkeypatch and that I'm getting the
+         # doctest module that users of coverage will get.
+-        assert 'doctest' not in sys.modules
++
++        # gentoo is not running these tests via nose, so there is no monkeypatching
++        #assert 'doctest' not in sys.modules
+     def test_doctest(self):
+         self.check_coverage('''\
+diff --git a/tests/test_process.py b/tests/test_process.py
+index 62dc80a5..7fa9b2ba 100644
+--- a/tests/test_process.py
++++ b/tests/test_process.py
+@@ -620,11 +620,16 @@ class ProcessTest(CoverageTest):
+             print("FOOEY == %s" % os.getenv("FOOEY"))
+             """)
+-        fullcov = os.path.join(
+-            os.path.dirname(coverage.__file__), "fullcoverage"
+-            )
++        # we want to use the coverage module we are testing, not the system installation
++        paths = [
++            os.path.join(
++                os.path.dirname(coverage.__file__), "fullcoverage"
++            ),
++            os.path.dirname(os.path.dirname(coverage.__file__))
++        ]
+         self.set_environ("FOOEY", "BOO")
+-        self.set_environ("PYTHONPATH", fullcov)
++        self.set_environ("PYTHONPATH", ':'.join(paths))
++        print(paths)
+         out = self.run_command("python -m coverage run -L getenv.py")
+         self.assertEqual(out, "FOOEY == BOO\n")
+         data = coverage.CoverageData()