dev-python/pytest: treeclean
Signed-off-by: Andreas Billmeier <b@edevau.net>
This commit is contained in:
parent
fa95ae0286
commit
f48b140f8d
|
@ -617,11 +617,11 @@ A daily compile test is run at Github with Python 3.9 to catch general faults. E
|
|||
|
||||
## Licenses
|
||||
This repository itself is released under GPL-3 (like most Gentoo repositories), all work on the depending components under the licenses they came from. Perhaps you came here because I filed an issue at your component about a bad or missing license. It is easy to [assign a license](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-license-to-a-repository). During cleanups and license investigations I have been asked often which license to choose. I am not a lawyer, but I can offer the following table, counted over this repository, perhaps this helps your decision. If a package has more than one license listed, all of them are counted.
|
||||
There are 1775 Ebuilds in total, 1764 of them have in total 1784 (42 different) licenses assigned.
|
||||
There are 1774 Ebuilds in total, 1763 of them have in total 1783 (42 different) licenses assigned.
|
||||
|
||||
|License| Ebuilds using it|
|
||||
|-------|-----|
|
||||
|MIT|1008|
|
||||
|MIT|1007|
|
||||
|Apache-2.0|398|
|
||||
|GPL-3|106|
|
||||
|BSD|103|
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
AUX pytest-3.4.2-pypy-syntaxerror-offset.patch 996 BLAKE2B ff6d362d20f6432f73956e1aee4c2bc596e3d8e3347da3624dfd3cbfdd1eabd8872058737e8f9b558f3570878756c7b87a65514956b1e81235c2727e8ff2fc63 SHA512 4a28ddc07389aac79e46528e85229aba126a89c27b7bec73b406766be49f5c8be9bdc2cb3158bfb475b4d6371e2f33960e1ed154e3b9eda15aeb8b151f3d2148
|
||||
AUX pytest-4.5.0-strip-setuptools_scm.patch 674 BLAKE2B 4eab3e26423d81614223a88a0124dc4f35892b18ecbcce34280a00774012822fced0045ac7113a50f8f88d042b88e404dbf4d8d3760140c66a48daa3da2a44c6 SHA512 d34d7c1db57804f0d1ff71f3f51c9a736592945fdf564f54c0c20c398c86f08616eb21f75d77457a71738df4d254ec3d69e46aa3378dea6f7913933bcdf45c08
|
||||
AUX pytest-7.3.1-py312.patch 11621 BLAKE2B 20e7132c8bbd16a8b01af8bf80254148434f7846463dffc4d46b731334d5b7959de9c3c3280d06a340c55bea608a3c516a31969ea0db7ce806581022537377b0 SHA512 17c0e3e2e119b9ce895d97fef9e1729c5f1577b2d5a3f6a650b7e94fccf8783a4686e4ddc7fa80209661dc4397f3c862dc809c531c136cafce477682b37223b6
|
||||
AUX pytest-7.4.3-no-color.patch 1293 BLAKE2B 85ae23dc612eb7825f4c3ba2d727a6115540118269ae2748fcb4b39b958180078f0c171562a84879f7b18da16149fb40d06be36e782abf41133ae6d510414490 SHA512 7550397bb42f08c886dd72674a4bfd53dbe449e30c1fe51358b77eb055d3626c053167a27cc2b0883151a4651b6133be222dcf78cab8675b980c79836f72ae57
|
||||
DIST pytest-7.4.3.tar.gz 1356179 BLAKE2B 2f4fd893aaf9867f20548eababc7aac6f4978253bcc4a35c50f7e2327a48458bc184f2340764ee7fed3dd02bc779ed03f084a0d8839a18f614d32245888c4f56 SHA512 1b80e9b7e0ba8fe966d6658aa72d49d101190f255acd9eb81d66142327535b7108c921055d8fe3e330e3ff4163aa03d7c67b2807d433dd9e1799be6a59b208c9
|
||||
EBUILD pytest-7.4.3.ebuild 3575 BLAKE2B 809a5e126b564a1261ee286c64e5048fc9efb0c05c51be15205ebdc8da06059168672dfd120df57ae75181425c572381bf5d038300381f937260f891ea149e84 SHA512 fd37392ab5f99b15e1cad340f4bd03f0bffa3b122d4f8387505168c3e16cf560e945b646f42ebc213fefa8886490bb6fb16ff372f4b3518c2c2c71762bb66c01
|
||||
MISC metadata.xml 391 BLAKE2B 48d31ecb4c8b171ee4e84a58399211368ddc00dfb5dbe0999f96e03d744294cd4fd5263e90600c93d1f13c7da21052faef84b6d0d56709f3559e37b3392ca31d SHA512 6e9caa57eda23995d21df6f52c52d5868e1ff56abb6c1351ffc0fe14b771639473481a2630e659caaff83f0255379aa2d012175af52a0de41221b27d3ab2f425
|
|
@ -1,27 +0,0 @@
|
|||
https://salsa.debian.org/python-team/modules/pytest/commit/405c05a0827592515de76e23c94de1f7773273e6.patch
|
||||
|
||||
From 405c05a0827592515de76e23c94de1f7773273e6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Ond=C5=99ej=20Nov=C3=BD?= <onovy@debian.org>
|
||||
Date: Thu, 10 May 2018 11:42:56 +0200
|
||||
Subject: [PATCH] Fix PyPy SyntaxError offset in tests
|
||||
|
||||
---
|
||||
testing/code/test_source.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/testing/code/test_source.py b/testing/code/test_source.py
|
||||
index fcce3fa..22278d8 100644
|
||||
--- a/testing/code/test_source.py
|
||||
+++ b/testing/code/test_source.py
|
||||
@@ -117,7 +117,7 @@ def test_source_strip_multiline():
|
||||
def test_syntaxerror_rerepresentation():
|
||||
ex = pytest.raises(SyntaxError, _pytest._code.compile, 'xyz xyz')
|
||||
assert ex.value.lineno == 1
|
||||
- assert ex.value.offset in (4, 7) # XXX pypy/jython versus cpython?
|
||||
+ assert ex.value.offset in (4, 5, 7) # XXX pypy/jython versus cpython?
|
||||
assert ex.value.text.strip(), 'x x'
|
||||
|
||||
|
||||
--
|
||||
2.18.0
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
diff --git a/setup.py b/setup.py
|
||||
index 0fb5a58a..302b5dda 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -1,4 +1,5 @@
|
||||
from setuptools import setup
|
||||
+import os
|
||||
|
||||
# TODO: if py gets upgrade to >=1.6,
|
||||
# remove _width_of_current_line in terminal.py
|
||||
@@ -18,10 +19,12 @@ INSTALL_REQUIRES = [
|
||||
]
|
||||
|
||||
|
||||
+with open("src/_pytest/_version.py", 'wt') as fp:
|
||||
+ fp.write('version = "{}"'.format(os.environ['PV']))
|
||||
+
|
||||
def main():
|
||||
setup(
|
||||
- use_scm_version={"write_to": "src/_pytest/_version.py"},
|
||||
- setup_requires=["setuptools-scm", "setuptools>=40.0"],
|
||||
+ version=os.environ['PV'],
|
||||
package_dir={"": "src"},
|
||||
# fmt: off
|
||||
extras_require={
|
|
@ -1,258 +0,0 @@
|
|||
From 653606791456f7e6412712bc26428b90092336b5 Mon Sep 17 00:00:00 2001
|
||||
From: Ran Benita <ran@unusedvar.com>
|
||||
Date: Wed, 10 May 2023 10:36:09 +0300
|
||||
Subject: [PATCH] Avoid ast deprecation warnings on Python 3.12
|
||||
|
||||
Fix #10977.
|
||||
---
|
||||
src/_pytest/assertion/rewrite.py | 49 +++++++++++++++++++-------------
|
||||
src/_pytest/mark/expression.py | 8 +++++-
|
||||
2 files changed, 36 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/src/_pytest/assertion/rewrite.py b/src/_pytest/assertion/rewrite.py
|
||||
index 8b182347052..00bb4feb94a 100644
|
||||
--- a/src/_pytest/assertion/rewrite.py
|
||||
+++ b/src/_pytest/assertion/rewrite.py
|
||||
@@ -46,8 +46,14 @@
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
namedExpr = ast.NamedExpr
|
||||
+ astNameConstant = ast.Constant
|
||||
+ astStr = ast.Constant
|
||||
+ astNum = ast.Constant
|
||||
else:
|
||||
namedExpr = ast.Expr
|
||||
+ astNameConstant = ast.NameConstant
|
||||
+ astStr = ast.Str
|
||||
+ astNum = ast.Num
|
||||
|
||||
|
||||
assertstate_key = StashKey["AssertionState"]()
|
||||
@@ -680,9 +686,12 @@ def run(self, mod: ast.Module) -> None:
|
||||
if (
|
||||
expect_docstring
|
||||
and isinstance(item, ast.Expr)
|
||||
- and isinstance(item.value, ast.Str)
|
||||
+ and isinstance(item.value, astStr)
|
||||
):
|
||||
- doc = item.value.s
|
||||
+ if sys.version_info >= (3, 8):
|
||||
+ doc = item.value.value
|
||||
+ else:
|
||||
+ doc = item.value.s
|
||||
if self.is_rewrite_disabled(doc):
|
||||
return
|
||||
expect_docstring = False
|
||||
@@ -814,7 +823,7 @@ def pop_format_context(self, expl_expr: ast.expr) -> ast.Name:
|
||||
current = self.stack.pop()
|
||||
if self.stack:
|
||||
self.explanation_specifiers = self.stack[-1]
|
||||
- keys = [ast.Str(key) for key in current.keys()]
|
||||
+ keys = [astStr(key) for key in current.keys()]
|
||||
format_dict = ast.Dict(keys, list(current.values()))
|
||||
form = ast.BinOp(expl_expr, ast.Mod(), format_dict)
|
||||
name = "@py_format" + str(next(self.variable_counter))
|
||||
@@ -868,16 +877,16 @@ def visit_Assert(self, assert_: ast.Assert) -> List[ast.stmt]:
|
||||
negation = ast.UnaryOp(ast.Not(), top_condition)
|
||||
|
||||
if self.enable_assertion_pass_hook: # Experimental pytest_assertion_pass hook
|
||||
- msg = self.pop_format_context(ast.Str(explanation))
|
||||
+ msg = self.pop_format_context(astStr(explanation))
|
||||
|
||||
# Failed
|
||||
if assert_.msg:
|
||||
assertmsg = self.helper("_format_assertmsg", assert_.msg)
|
||||
gluestr = "\n>assert "
|
||||
else:
|
||||
- assertmsg = ast.Str("")
|
||||
+ assertmsg = astStr("")
|
||||
gluestr = "assert "
|
||||
- err_explanation = ast.BinOp(ast.Str(gluestr), ast.Add(), msg)
|
||||
+ err_explanation = ast.BinOp(astStr(gluestr), ast.Add(), msg)
|
||||
err_msg = ast.BinOp(assertmsg, ast.Add(), err_explanation)
|
||||
err_name = ast.Name("AssertionError", ast.Load())
|
||||
fmt = self.helper("_format_explanation", err_msg)
|
||||
@@ -893,8 +902,8 @@ def visit_Assert(self, assert_: ast.Assert) -> List[ast.stmt]:
|
||||
hook_call_pass = ast.Expr(
|
||||
self.helper(
|
||||
"_call_assertion_pass",
|
||||
- ast.Num(assert_.lineno),
|
||||
- ast.Str(orig),
|
||||
+ astNum(assert_.lineno),
|
||||
+ astStr(orig),
|
||||
fmt_pass,
|
||||
)
|
||||
)
|
||||
@@ -913,7 +922,7 @@ def visit_Assert(self, assert_: ast.Assert) -> List[ast.stmt]:
|
||||
variables = [
|
||||
ast.Name(name, ast.Store()) for name in self.format_variables
|
||||
]
|
||||
- clear_format = ast.Assign(variables, ast.NameConstant(None))
|
||||
+ clear_format = ast.Assign(variables, astNameConstant(None))
|
||||
self.statements.append(clear_format)
|
||||
|
||||
else: # Original assertion rewriting
|
||||
@@ -924,9 +933,9 @@ def visit_Assert(self, assert_: ast.Assert) -> List[ast.stmt]:
|
||||
assertmsg = self.helper("_format_assertmsg", assert_.msg)
|
||||
explanation = "\n>assert " + explanation
|
||||
else:
|
||||
- assertmsg = ast.Str("")
|
||||
+ assertmsg = astStr("")
|
||||
explanation = "assert " + explanation
|
||||
- template = ast.BinOp(assertmsg, ast.Add(), ast.Str(explanation))
|
||||
+ template = ast.BinOp(assertmsg, ast.Add(), astStr(explanation))
|
||||
msg = self.pop_format_context(template)
|
||||
fmt = self.helper("_format_explanation", msg)
|
||||
err_name = ast.Name("AssertionError", ast.Load())
|
||||
@@ -938,7 +947,7 @@ def visit_Assert(self, assert_: ast.Assert) -> List[ast.stmt]:
|
||||
# Clear temporary variables by setting them to None.
|
||||
if self.variables:
|
||||
variables = [ast.Name(name, ast.Store()) for name in self.variables]
|
||||
- clear = ast.Assign(variables, ast.NameConstant(None))
|
||||
+ clear = ast.Assign(variables, astNameConstant(None))
|
||||
self.statements.append(clear)
|
||||
# Fix locations (line numbers/column offsets).
|
||||
for stmt in self.statements:
|
||||
@@ -952,20 +961,20 @@ def visit_NamedExpr(self, name: namedExpr) -> Tuple[namedExpr, str]:
|
||||
# thinks it's acceptable.
|
||||
locs = ast.Call(self.builtin("locals"), [], [])
|
||||
target_id = name.target.id # type: ignore[attr-defined]
|
||||
- inlocs = ast.Compare(ast.Str(target_id), [ast.In()], [locs])
|
||||
+ inlocs = ast.Compare(astStr(target_id), [ast.In()], [locs])
|
||||
dorepr = self.helper("_should_repr_global_name", name)
|
||||
test = ast.BoolOp(ast.Or(), [inlocs, dorepr])
|
||||
- expr = ast.IfExp(test, self.display(name), ast.Str(target_id))
|
||||
+ expr = ast.IfExp(test, self.display(name), astStr(target_id))
|
||||
return name, self.explanation_param(expr)
|
||||
|
||||
def visit_Name(self, name: ast.Name) -> Tuple[ast.Name, str]:
|
||||
# Display the repr of the name if it's a local variable or
|
||||
# _should_repr_global_name() thinks it's acceptable.
|
||||
locs = ast.Call(self.builtin("locals"), [], [])
|
||||
- inlocs = ast.Compare(ast.Str(name.id), [ast.In()], [locs])
|
||||
+ inlocs = ast.Compare(astStr(name.id), [ast.In()], [locs])
|
||||
dorepr = self.helper("_should_repr_global_name", name)
|
||||
test = ast.BoolOp(ast.Or(), [inlocs, dorepr])
|
||||
- expr = ast.IfExp(test, self.display(name), ast.Str(name.id))
|
||||
+ expr = ast.IfExp(test, self.display(name), astStr(name.id))
|
||||
return name, self.explanation_param(expr)
|
||||
|
||||
def visit_BoolOp(self, boolop: ast.BoolOp) -> Tuple[ast.Name, str]:
|
||||
@@ -1001,7 +1010,7 @@ def visit_BoolOp(self, boolop: ast.BoolOp) -> Tuple[ast.Name, str]:
|
||||
self.push_format_context()
|
||||
res, expl = self.visit(v)
|
||||
body.append(ast.Assign([ast.Name(res_var, ast.Store())], res))
|
||||
- expl_format = self.pop_format_context(ast.Str(expl))
|
||||
+ expl_format = self.pop_format_context(astStr(expl))
|
||||
call = ast.Call(app, [expl_format], [])
|
||||
self.expl_stmts.append(ast.Expr(call))
|
||||
if i < levels:
|
||||
@@ -1013,7 +1022,7 @@ def visit_BoolOp(self, boolop: ast.BoolOp) -> Tuple[ast.Name, str]:
|
||||
self.statements = body = inner
|
||||
self.statements = save
|
||||
self.expl_stmts = fail_save
|
||||
- expl_template = self.helper("_format_boolop", expl_list, ast.Num(is_or))
|
||||
+ expl_template = self.helper("_format_boolop", expl_list, astNum(is_or))
|
||||
expl = self.pop_format_context(expl_template)
|
||||
return ast.Name(res_var, ast.Load()), self.explanation_param(expl)
|
||||
|
||||
@@ -1099,9 +1108,9 @@ def visit_Compare(self, comp: ast.Compare) -> Tuple[ast.expr, str]:
|
||||
next_expl = f"({next_expl})"
|
||||
results.append(next_res)
|
||||
sym = BINOP_MAP[op.__class__]
|
||||
- syms.append(ast.Str(sym))
|
||||
+ syms.append(astStr(sym))
|
||||
expl = f"{left_expl} {sym} {next_expl}"
|
||||
- expls.append(ast.Str(expl))
|
||||
+ expls.append(astStr(expl))
|
||||
res_expr = ast.Compare(left_res, [op], [next_res])
|
||||
self.statements.append(ast.Assign([store_names[i]], res_expr))
|
||||
left_res, left_expl = next_res, next_expl
|
||||
diff --git a/src/_pytest/mark/expression.py b/src/_pytest/mark/expression.py
|
||||
index f82a81d44c5..9287bcee50c 100644
|
||||
--- a/src/_pytest/mark/expression.py
|
||||
+++ b/src/_pytest/mark/expression.py
|
||||
@@ -18,6 +18,7 @@
|
||||
import dataclasses
|
||||
import enum
|
||||
import re
|
||||
+import sys
|
||||
import types
|
||||
from typing import Callable
|
||||
from typing import Iterator
|
||||
@@ -26,6 +27,11 @@
|
||||
from typing import Optional
|
||||
from typing import Sequence
|
||||
|
||||
+if sys.version_info >= (3, 8):
|
||||
+ astNameConstant = ast.Constant
|
||||
+else:
|
||||
+ astNameConstant = ast.NameConstant
|
||||
+
|
||||
|
||||
__all__ = [
|
||||
"Expression",
|
||||
@@ -132,7 +138,7 @@ def reject(self, expected: Sequence[TokenType]) -> NoReturn:
|
||||
|
||||
def expression(s: Scanner) -> ast.Expression:
|
||||
if s.accept(TokenType.EOF):
|
||||
- ret: ast.expr = ast.NameConstant(False)
|
||||
+ ret: ast.expr = astNameConstant(False)
|
||||
else:
|
||||
ret = expr(s)
|
||||
s.accept(TokenType.EOF, reject=True)
|
||||
From c945dba571025623a3ace7311d682e3e9448a161 Mon Sep 17 00:00:00 2001
|
||||
From: Ran Benita <ran@unusedvar.com>
|
||||
Date: Fri, 26 May 2023 20:28:21 +0300
|
||||
Subject: [PATCH] testing/python/collect: replace use of deprecated/removed
|
||||
`imp` module
|
||||
|
||||
---
|
||||
testing/python/collect.py | 26 +++++++++++++++-----------
|
||||
1 file changed, 15 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/testing/python/collect.py b/testing/python/collect.py
|
||||
index ac3edd395ab..52b34800965 100644
|
||||
--- a/testing/python/collect.py
|
||||
+++ b/testing/python/collect.py
|
||||
@@ -897,25 +897,29 @@ def pytest_pycollect_makeitem(collector, name, obj):
|
||||
def test_issue2369_collect_module_fileext(self, pytester: Pytester) -> None:
|
||||
"""Ensure we can collect files with weird file extensions as Python
|
||||
modules (#2369)"""
|
||||
- # We'll implement a little finder and loader to import files containing
|
||||
+ # Implement a little meta path finder to import files containing
|
||||
# Python source code whose file extension is ".narf".
|
||||
pytester.makeconftest(
|
||||
"""
|
||||
- import sys, os, imp
|
||||
+ import sys
|
||||
+ import os.path
|
||||
+ from importlib.util import spec_from_loader
|
||||
+ from importlib.machinery import SourceFileLoader
|
||||
from _pytest.python import Module
|
||||
|
||||
- class Loader(object):
|
||||
- def load_module(self, name):
|
||||
- return imp.load_source(name, name + ".narf")
|
||||
- class Finder(object):
|
||||
- def find_module(self, name, path=None):
|
||||
- if os.path.exists(name + ".narf"):
|
||||
- return Loader()
|
||||
- sys.meta_path.append(Finder())
|
||||
+ class MetaPathFinder:
|
||||
+ def find_spec(self, fullname, path, target=None):
|
||||
+ if os.path.exists(fullname + ".narf"):
|
||||
+ return spec_from_loader(
|
||||
+ fullname,
|
||||
+ SourceFileLoader(fullname, fullname + ".narf"),
|
||||
+ )
|
||||
+ sys.meta_path.append(MetaPathFinder())
|
||||
|
||||
def pytest_collect_file(file_path, parent):
|
||||
if file_path.suffix == ".narf":
|
||||
- return Module.from_parent(path=file_path, parent=parent)"""
|
||||
+ return Module.from_parent(path=file_path, parent=parent)
|
||||
+ """
|
||||
)
|
||||
pytester.makefile(
|
||||
".narf",
|
|
@ -1,37 +0,0 @@
|
|||
From ce93a8ad7a11d1e9be76ce6af0d510f935622c1f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
|
||||
Date: Sat, 25 Nov 2023 12:09:32 +0100
|
||||
Subject: [PATCH] Reset color-related envvars for testing
|
||||
|
||||
Reset color-related environment variables in a fixture to prevent them
|
||||
from affecting test results. Otherwise, some of the tests fail
|
||||
e.g. if NO_COLOR is set in the calling environment.
|
||||
---
|
||||
testing/conftest.py | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/testing/conftest.py b/testing/conftest.py
|
||||
index 2a3ce5203..612777304 100644
|
||||
--- a/testing/conftest.py
|
||||
+++ b/testing/conftest.py
|
||||
@@ -30,6 +30,17 @@ def set_column_width(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
monkeypatch.setenv("COLUMNS", "80")
|
||||
|
||||
|
||||
+@pytest.fixture(autouse=True)
|
||||
+def reset_colors(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
+ """
|
||||
+ Reset all color-related variables to prevent them from affecting internal pytest output
|
||||
+ in tests that depend on it.
|
||||
+ """
|
||||
+ monkeypatch.delenv("PY_COLORS", raising=False)
|
||||
+ monkeypatch.delenv("NO_COLOR", raising=False)
|
||||
+ monkeypatch.delenv("FORCE_COLOR", raising=False)
|
||||
+
|
||||
+
|
||||
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
|
||||
def pytest_collection_modifyitems(items):
|
||||
"""Prefer faster tests.
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
|
||||
<pkgmetadata>
|
||||
<maintainer type="project">
|
||||
<email>python@gentoo.org</email>
|
||||
<name>Python</name>
|
||||
</maintainer>
|
||||
<stabilize-allarches/>
|
||||
<upstream>
|
||||
<remote-id type="pypi">pytest</remote-id>
|
||||
<remote-id type="github">pytest-dev/pytest</remote-id>
|
||||
</upstream>
|
||||
</pkgmetadata>
|
|
@ -1,112 +0,0 @@
|
|||
# Copyright 1999-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
DISTUTILS_USE_PEP517=setuptools
|
||||
PYTHON_TESTED=( python3_{10..12} pypy3 )
|
||||
PYTHON_COMPAT=( python3_{11..12} )
|
||||
|
||||
inherit distutils-r1 multiprocessing pypi
|
||||
|
||||
DESCRIPTION="Simple powerful testing with Python"
|
||||
HOMEPAGE="
|
||||
https://pytest.org/
|
||||
https://github.com/pytest-dev/pytest/
|
||||
https://pypi.org/project/pytest/
|
||||
"
|
||||
|
||||
LICENSE="MIT"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 arm arm64 x86"
|
||||
IUSE="test"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
dev-python/iniconfig[${PYTHON_USEDEP}]
|
||||
>=dev-python/more-itertools-4.0.0[${PYTHON_USEDEP}]
|
||||
dev-python/packaging[${PYTHON_USEDEP}]
|
||||
>=dev-python/pluggy-0.12[${PYTHON_USEDEP}]
|
||||
$(python_gen_cond_dep '
|
||||
>=dev-python/exceptiongroup-1.0.0_rc8[${PYTHON_USEDEP}]
|
||||
>=dev-python/tomli-1.0.0[${PYTHON_USEDEP}]
|
||||
' 3.{9..10})
|
||||
"
|
||||
BDEPEND="
|
||||
>=dev-python/setuptools-scm-6.2.3[${PYTHON_USEDEP}]
|
||||
test? (
|
||||
${RDEPEND}
|
||||
$(python_gen_cond_dep '
|
||||
dev-python/argcomplete[${PYTHON_USEDEP}]
|
||||
>=dev-python/attrs-19.2.0[${PYTHON_USEDEP}]
|
||||
>=dev-python/hypothesis-3.56[${PYTHON_USEDEP}]
|
||||
dev-python/mock[${PYTHON_USEDEP}]
|
||||
>=dev-python/pygments-2.7.2[${PYTHON_USEDEP}]
|
||||
dev-python/pytest-xdist[${PYTHON_USEDEP}]
|
||||
dev-python/requests[${PYTHON_USEDEP}]
|
||||
dev-python/xmlschema[${PYTHON_USEDEP}]
|
||||
' "${PYTHON_TESTED[@]}")
|
||||
)
|
||||
"
|
||||
|
||||
PATCHES=(
|
||||
# https://github.com/pytest-dev/pytest/pull/11638
|
||||
"${FILESDIR}/${P}-no-color.patch"
|
||||
)
|
||||
|
||||
src_test() {
|
||||
# workaround new readline defaults
|
||||
echo "set enable-bracketed-paste off" > "${T}"/inputrc || die
|
||||
local -x INPUTRC="${T}"/inputrc
|
||||
distutils-r1_src_test
|
||||
}
|
||||
|
||||
python_test() {
|
||||
if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
|
||||
einfo "Skipping tests on ${EPYTHON}"
|
||||
return
|
||||
fi
|
||||
|
||||
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
|
||||
local -x COLUMNS=80
|
||||
|
||||
local EPYTEST_DESELECT=(
|
||||
# broken by epytest args
|
||||
testing/test_warnings.py::test_works_with_filterwarnings
|
||||
|
||||
# tend to be broken by random pytest plugins
|
||||
# (these tests patch PYTEST_DISABLE_PLUGIN_AUTOLOAD out)
|
||||
testing/test_helpconfig.py::test_version_less_verbose
|
||||
testing/test_helpconfig.py::test_version_verbose
|
||||
testing/test_junitxml.py::test_random_report_log_xdist
|
||||
testing/test_junitxml.py::test_runs_twice_xdist
|
||||
testing/test_terminal.py::TestProgressOutputStyle::test_xdist_normal
|
||||
testing/test_terminal.py::TestProgressOutputStyle::test_xdist_normal_count
|
||||
testing/test_terminal.py::TestProgressOutputStyle::test_xdist_verbose
|
||||
testing/test_terminal.py::TestProgressWithTeardown::test_xdist_normal
|
||||
testing/test_terminal.py::TestTerminalFunctional::test_header_trailer_info
|
||||
testing/test_terminal.py::TestTerminalFunctional::test_no_header_trailer_info
|
||||
|
||||
# unstable with xdist
|
||||
testing/test_terminal.py::TestTerminalFunctional::test_verbose_reporting_xdist
|
||||
|
||||
# TODO (XPASS)
|
||||
testing/test_debugging.py::TestDebuggingBreakpoints::test_pdb_not_altered
|
||||
testing/test_debugging.py::TestPDB::test_pdb_interaction_capturing_simple
|
||||
testing/test_debugging.py::TestPDB::test_pdb_interaction_capturing_twice
|
||||
testing/test_debugging.py::TestPDB::test_pdb_with_injected_do_debug
|
||||
testing/test_debugging.py::test_pdb_suspends_fixture_capturing
|
||||
|
||||
# setuptools warnings
|
||||
testing/acceptance_test.py::TestInvocationVariants::test_cmdline_python_namespace_package
|
||||
)
|
||||
|
||||
[[ ${EPYTHON} == pypy3 ]] && EPYTEST_DESELECT+=(
|
||||
# regressions on pypy3.9
|
||||
# https://github.com/pytest-dev/pytest/issues/9787
|
||||
testing/test_skipping.py::test_errors_in_xfail_skip_expressions
|
||||
testing/test_unraisableexception.py
|
||||
)
|
||||
|
||||
epytest -p xdist -n "$(makeopts_jobs)"
|
||||
}
|
Loading…
Reference in New Issue