Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-zope.testrunner for
openSUSE:Factory checked in at 2026-03-30 18:31:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-zope.testrunner (Old)
and /work/SRC/openSUSE:Factory/.python-zope.testrunner.new.1999 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-zope.testrunner"
Mon Mar 30 18:31:29 2026 rev:31 rq:1343525 version:8.2
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-zope.testrunner/python-zope.testrunner.changes
2026-01-06 17:47:10.532022413 +0100
+++
/work/SRC/openSUSE:Factory/.python-zope.testrunner.new.1999/python-zope.testrunner.changes
2026-03-30 18:34:48.791872638 +0200
@@ -1,0 +2,7 @@
+Tue Mar 24 12:24:22 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 8.2:
+ * Remove support for Python 3.9.
+ * Add support for Python 3.14.
+
+-------------------------------------------------------------------
Old:
----
zope_testrunner-8.1.tar.gz
New:
----
zope_testrunner-8.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-zope.testrunner.spec ++++++
--- /var/tmp/diff_new_pack.aNFuyR/_old 2026-03-30 18:34:49.519903076 +0200
+++ /var/tmp/diff_new_pack.aNFuyR/_new 2026-03-30 18:34:49.523903243 +0200
@@ -31,7 +31,7 @@
%endif
%{?sle15_python_module_pythons}
Name: python-zope.testrunner%{psuffix}
-Version: 8.1
+Version: 8.2
Release: 0
Summary: Zope testrunner script
License: ZPL-2.1
++++++ zope_testrunner-8.1.tar.gz -> zope_testrunner-8.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope_testrunner-8.1/.pre-commit-config.yaml
new/zope_testrunner-8.2/.pre-commit-config.yaml
--- old/zope_testrunner-8.1/.pre-commit-config.yaml 2025-10-02
08:39:26.000000000 +0200
+++ new/zope_testrunner-8.2/.pre-commit-config.yaml 2026-01-23
08:27:52.000000000 +0100
@@ -3,7 +3,7 @@
minimum_pre_commit_version: '3.6'
repos:
- repo: https://github.com/pycqa/isort
- rev: "6.0.1"
+ rev: "7.0.0"
hooks:
- id: isort
- repo: https://github.com/hhatto/autopep8
@@ -12,17 +12,17 @@
- id: autopep8
args: [--in-place, --aggressive, --aggressive]
- repo: https://github.com/asottile/pyupgrade
- rev: v3.19.1
+ rev: v3.21.0
hooks:
- id: pyupgrade
- args: [--py39-plus]
+ args: [--py310-plus]
- repo: https://github.com/isidentical/teyit
rev: 0.4.3
hooks:
- id: teyit
exclude: tests/testrunner-ex/sample2/badsyntax\.py
- repo: https://github.com/PyCQA/flake8
- rev: "7.2.0"
+ rev: "7.3.0"
hooks:
- id: flake8
additional_dependencies:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope_testrunner-8.1/CHANGES.rst
new/zope_testrunner-8.2/CHANGES.rst
--- old/zope_testrunner-8.1/CHANGES.rst 2025-10-02 08:39:26.000000000 +0200
+++ new/zope_testrunner-8.2/CHANGES.rst 2026-01-23 08:27:52.000000000 +0100
@@ -2,6 +2,14 @@
zope.testrunner Changelog
===========================
+8.2 (2026-01-23)
+================
+
+- Remove support for Python 3.9.
+
+- Add support for Python 3.14.
+
+
8.1 (2025-10-02)
================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope_testrunner-8.1/PKG-INFO
new/zope_testrunner-8.2/PKG-INFO
--- old/zope_testrunner-8.1/PKG-INFO 2025-10-02 08:39:27.567095000 +0200
+++ new/zope_testrunner-8.2/PKG-INFO 2026-01-23 08:27:53.879819000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.2
+Metadata-Version: 2.4
Name: zope.testrunner
-Version: 8.1
+Version: 8.2
Summary: Zope testrunner script.
Home-page: https://github.com/zopefoundation/zope.testrunner
Author: Zope Foundation and Contributors
@@ -14,16 +14,17 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Testing
-Requires-Python: >=3.9
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
License-File: LICENSE.md
Requires-Dist: zope.exceptions
Requires-Dist: zope.interface
@@ -39,8 +40,10 @@
Dynamic: author-email
Dynamic: classifier
Dynamic: description
+Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
+Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
@@ -227,6 +230,14 @@
zope.testrunner Changelog
===========================
+8.2 (2026-01-23)
+================
+
+- Remove support for Python 3.9.
+
+- Add support for Python 3.14.
+
+
8.1 (2025-10-02)
================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope_testrunner-8.1/pyproject.toml
new/zope_testrunner-8.2/pyproject.toml
--- old/zope_testrunner-8.1/pyproject.toml 2025-10-02 08:39:26.000000000
+0200
+++ new/zope_testrunner-8.2/pyproject.toml 2026-01-23 08:27:52.000000000
+0100
@@ -4,7 +4,7 @@
[build-system]
requires = [
- "setuptools == 75.8.2",
+ "setuptools >= 78.1.1,< 81",
"wheel",
]
build-backend = "setuptools.build_meta"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope_testrunner-8.1/setup.py
new/zope_testrunner-8.2/setup.py
--- old/zope_testrunner-8.1/setup.py 2025-10-02 08:39:26.000000000 +0200
+++ new/zope_testrunner-8.2/setup.py 2026-01-23 08:27:52.000000000 +0100
@@ -21,7 +21,7 @@
from setuptools import setup
-version = '8.1'
+version = '8.2'
INSTALL_REQUIRES = [
'zope.exceptions',
@@ -65,6 +65,7 @@
license='ZPL-2.1',
description='Zope testrunner script.',
long_description=long_description,
+ long_description_content_type='text/x-rst',
author='Zope Foundation and Contributors',
author_email='[email protected]',
classifiers=[
@@ -76,17 +77,17 @@
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Software Development :: Testing",
],
- python_requires='>=3.9',
+ python_requires='>=3.10',
install_requires=INSTALL_REQUIRES,
extras_require=EXTRAS_REQUIRE,
entry_points={
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope_testrunner-8.1/src/zope/testrunner/tests/testrunner-colors.rst
new/zope_testrunner-8.2/src/zope/testrunner/tests/testrunner-colors.rst
--- old/zope_testrunner-8.1/src/zope/testrunner/tests/testrunner-colors.rst
2025-10-02 08:39:26.000000000 +0200
+++ new/zope_testrunner-8.2/src/zope/testrunner/tests/testrunner-colors.rst
2026-01-23 08:27:52.000000000 +0100
@@ -75,21 +75,16 @@
>>> sys.argv = 'test -c --tests-pattern ^sampletests(f|_e|_f)?$ '.split()
>>> testrunner.run_internal(defaults)
{normal}Running zope.testrunner.layer.UnitTests tests:{normal}
- Set up zope.testrunner.layer.UnitTests in {green}N.NNN{normal} seconds.
- <BLANKLINE>
- <BLANKLINE>
+ Set up zope.testrunner.layer.UnitTests in {green}N.NNN{normal} seconds...
{boldred}Failure in test eek (sample2.sampletests_e){normal}
Failed doctest test for sample2.sampletests_e.eek
File "testrunner-ex/sample2/sampletests_e.py", line 28, in eek
- <BLANKLINE>
...
{normal}File "{boldblue}testrunner-ex/sample2/sampletests_e.py{normal}",
line {boldred}30{normal}, in {boldcyan}sample2.sampletests_e.eek{normal}
Failed example:
{cyan} f(){normal}
Exception raised:
- {red} Traceback (most recent call last):{normal}
- {red} File ".../doctest.py", line 1356, in __run{normal}
- {red} ...{normal}
+ {red} Traceback (most recent call last):{normal}...
{red} File "<doctest sample2.sampletests_e.eek[0]>", line 1, in
?{normal}
{red} f(){normal}
{red} File "testrunner-ex/sample2/sampletests_e.py", line 19, in
f{normal}
@@ -97,10 +92,7 @@
{red} File "testrunner-ex/sample2/sampletests_e.py", line 24, in
g{normal}
{red} x = y + 1 # noqa: F821{normal}
{red} - __traceback_info__: I don't know what Y should be.{normal}
- {red} NameError: name 'y' is not defined{normal}
- <BLANKLINE>
- <BLANKLINE>
- <BLANKLINE>
+ {red} NameError: name 'y' is not defined{normal}...
{boldred}Error in test test3 (sample2.sampletests_e.Test...){normal}
Traceback (most recent call last):
{normal} File "{boldblue}unittest.py{normal}", line {boldred}260{normal},
in {boldcyan}run{normal}
@@ -112,30 +104,21 @@
{normal} File "{boldblue}testrunner-ex/sample2/sampletests_e.py{normal}",
line {boldred}24{normal}, in {boldcyan}g{normal}
{cyan} x = y + 1 # noqa: F821{normal}
{red} - __traceback_info__: I don't know what Y should be.{normal}
- {red}NameError: name 'y' is not defined{normal}
- <BLANKLINE>
- <BLANKLINE>
- <BLANKLINE>
+ {red}NameError: name 'y' is not defined{normal}...
{boldred}Failure in test testrunner-ex/sample2/e.rst{normal}
Failed doctest test for e.rst
File "testrunner-ex/sample2/e.rst", line 0
- <BLANKLINE>
...
{normal}File "{boldblue}testrunner-ex/sample2/e.rst{normal}", line
{boldred}4{normal}, in {boldcyan}e.rst{normal}
Failed example:
{cyan} f(){normal}
Exception raised:
- {red} Traceback (most recent call last):{normal}
- {red} File ".../doctest.py", line 1356, in __run{normal}
- {red} ...{normal}
+ {red} Traceback (most recent call last):{normal}...
{red} File "<doctest e.rst[1]>", line 1, in ?{normal}
{red} f(){normal}
{red} File "<doctest e.rst[0]>", line 2, in f{normal}
{red} return x{normal}
- {red} NameError: name 'x' is not defined{normal}
- <BLANKLINE>
- <BLANKLINE>
- <BLANKLINE>
+ {red} NameError: name 'x' is not defined{normal}...
{boldred}Failure in test test (sample2.sampletests_f.Test...){normal}
Traceback (most recent call last):
{normal} File "{boldblue}unittest.py{normal}", line {boldred}260{normal},
in {boldcyan}run{normal}
@@ -144,8 +127,7 @@
{cyan} self.assertEqual(1, 0){normal}
{normal} File "{boldblue}unittest.py{normal}", line {boldred}333{normal},
in {boldcyan}failUnlessEqual{normal}
{cyan} raise self.failureException, \{normal}
- {red}AssertionError: 1 != 0{normal}
- <BLANKLINE>
+ {red}AssertionError: 1 != 0{normal}...
{normal} Ran {green}164{normal} tests with {boldred}3{normal} failures,
{boldred}1{normal} errors, {green}0{normal} skipped in {green}0.045{normal}
seconds.{normal}
...
{normal}Total: {green}329{normal} tests, {boldred}3{normal} failures,
{boldred}1{normal} errors, {green}0{normal} skipped in {green}N.NNN{normal}
seconds.{normal}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope_testrunner-8.1/src/zope/testrunner/tests/testrunner-debugging.rst
new/zope_testrunner-8.2/src/zope/testrunner/tests/testrunner-debugging.rst
--- old/zope_testrunner-8.1/src/zope/testrunner/tests/testrunner-debugging.rst
2025-10-02 08:39:26.000000000 +0200
+++ new/zope_testrunner-8.2/src/zope/testrunner/tests/testrunner-debugging.rst
2026-01-23 08:27:52.000000000 +0100
@@ -168,3 +168,368 @@
Tearing down left over layers:
Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
True
+
+
+Debugging Edge Cases
+====================
+
+ >>> defaults = [
+ ... '--test-path', directory_with_tests,
+ ... '--tests-pattern', '^sampletestsf?$',
+ ... ]
+ >>> class Input:
+ ... def __init__(self, src):
+ ... self.lines = src.split('\n')
+ ... def readline(self):
+ ... line = self.lines.pop(0)
+ ... print(line)
+ ... return line+'\n'
+
+ >>> real_stdin = sys.stdin
+
+Using pdb.set_trace in a function called by an ordinary test:
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t set_trace2').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ ... # doctest: +ELLIPSIS
+ Running zope.testrunner.layer.UnitTests tests:...
+ > testrunner-ex/sample3/sampletests_d.py(47)f()
+ -> ...
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Ran 1 tests with 0 failures, 0 errors and 0 skipped in 0.001 seconds.
+ ...
+ False
+
+Using pdb.set_trace in a function called by a doctest in a doc string:
+
+ >>> sys.stdin = Input('n\np x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t set_trace4').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ Running zope.testrunner.layer.UnitTests tests:
+ Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
+ > testrunner-ex/sample3/sampletests_d.py(NNN)f()
+ -> ...
+ (Pdb) n
+ ...
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Ran 1 tests with 0 failures, 0 errors and 0 skipped in N.NNN seconds.
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+Using pdb in a docstring-based doctest
+
+ >>> sys.stdin = Input('n\np x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t set_trace3').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ Running zope.testrunner.layer.UnitTests tests:
+ Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
+ ...
+ (Pdb) n
+ ...
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Ran 1 tests with 0 failures, 0 errors and 0 skipped in N.NNN seconds.
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+Using pdb.set_trace in a doc file:
+
+
+ >>> sys.stdin = Input('n\np x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t set_trace5').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ Running zope.testrunner.layer.UnitTests tests:
+ Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
+ ...
+ (Pdb) n
+ ...
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Ran 1 tests with 0 failures, 0 errors and 0 skipped in N.NNN seconds.
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+Using pdb.set_trace in a function called by a doctest in a doc file:
+
+
+ >>> sys.stdin = Input('n\np x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t set_trace6').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ Running zope.testrunner.layer.UnitTests tests:
+ Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
+ ...
+ (Pdb) n
+ ...
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Ran 1 tests with 0 failures, 0 errors and 0 skipped in N.NNN seconds.
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+Post-mortem debugging function called from ordinary test:
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t post_mortem2 -D').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ ... # doctest: +NORMALIZE_WHITESPACE
+ Running zope.testrunner.layer.UnitTests tests:...
+ <BLANKLINE>
+ <BLANKLINE>
+ Error in test test_post_mortem2 (sample3.sampletests_d.TestSomething...)
+ Traceback (most recent call last):
+ File "testrunner-ex/sample3/sampletests_d.py",
+ line 37, in test_post_mortem2
+ g()
+ File "testrunner-ex/sample3/sampletests_d.py", line 46, in g
+ raise ValueError
+ ValueError
+ <BLANKLINE>
+ ...ValueError
+ <BLANKLINE>
+ > testrunner-ex/sample3/sampletests_d.py(46)g()
+ -> raise ValueError
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+
+Post-mortem debugging docstring-based doctest:
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t post_mortem3 -D').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ ... # doctest: +NORMALIZE_WHITESPACE
+ Running zope.testrunner.layer.UnitTests tests:
+ Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
+ <BLANKLINE>
+ <BLANKLINE>
+ Error in test post_mortem3 (sample3.sampletests_d)
+ Traceback (most recent call last):
+ ...UnexpectedException: testrunner-ex/sample3/sampletests_d.py:NNN (2
examples)>
+ <BLANKLINE>
+ ...ValueError
+ <BLANKLINE>
+ > <doctest sample3.sampletests_d.post_mortem3[1]>(1)?()
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+Post-mortem debugging function called from docstring-based doctest:
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t post_mortem4 -D').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ ... # doctest: +NORMALIZE_WHITESPACE
+ Running zope.testrunner.layer.UnitTests tests:
+ Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
+ <BLANKLINE>
+ <BLANKLINE>
+ Error in test post_mortem4 (sample3.sampletests_d)
+ Traceback (most recent call last):
+ ...UnexpectedException: testrunner-ex/sample3/sampletests_d.py:NNN (1
example)>
+ <BLANKLINE>
+ ...ValueError
+ <BLANKLINE>
+ > testrunner-ex/sample3/sampletests_d.py(NNN)g()
+ -> raise ValueError
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+Post-mortem debugging file-based doctest:
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t post_mortem5 -D').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ ... # doctest: +NORMALIZE_WHITESPACE
+ Running zope.testrunner.layer.UnitTests tests:
+ Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
+ <BLANKLINE>
+ <BLANKLINE>
+ Error testrunner-ex/sample3/post_mortem5.rst
+ Traceback (most recent call last):
+ ...UnexpectedException: testrunner-ex/sample3/post_mortem5.rst:0 (2
examples)>
+ <BLANKLINE>
+ ...ValueError
+ <BLANKLINE>
+ > <doctest post_mortem5.rst[1]>(1)?()
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+
+
+Post-mortem debugging function called from file-based doctest:
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t post_mortem6 -D').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ ... # doctest: +NORMALIZE_WHITESPACE
+ Running zope.testrunner.layer.UnitTests tests:...
+ Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
+ <BLANKLINE>
+ <BLANKLINE>
+ Error testrunner-ex/sample3/post_mortem6.rst
+ Traceback (most recent call last):
+ File ".../zope/testing/doctest/__init__.py", Line NNN, in debug
+ runner.run(self._dt_test, clear_globs=False)
+ File ".../zope/testing/doctest/__init__.py", Line NNN, in run
+ r = DocTestRunner.run(self, test, compileflags, out, False)
+ File ".../zope/testing/doctest/__init__.py", Line NNN, in run
+ return self.__run(test, compileflags, out)
+ File ".../zope/testing/doctest/__init__.py", Line NNN, in __run
+ exc_info)
+ File ".../zope/testing/doctest/__init__.py", Line NNN, in
report_unexpected_exception
+ raise UnexpectedException(test, example, exc_info)
+ ...UnexpectedException: testrunner-ex/sample3/post_mortem6.rst:0 (2
examples)>
+ <BLANKLINE>
+ ...ValueError
+ <BLANKLINE>
+ > testrunner-ex/sample3/sampletests_d.py(NNN)g()
+ -> raise ValueError
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+Post-mortem debugging of a docstring doctest failure:
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t post_mortem_failure2 -D').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ ... # doctest: +NORMALIZE_WHITESPACE
+ Running zope.testrunner.layer.UnitTests tests:...
+ <BLANKLINE>
+ <BLANKLINE>
+ Error in test post_mortem_failure2 (sample3.sampletests_d)
+ <BLANKLINE>
+ File "testrunner-ex/sample3/sampletests_d.py",
+ line 81, in sample3.sampletests_d.post_mortem_failure2
+ <BLANKLINE>
+ x
+ <BLANKLINE>
+ Want:
+ 2
+ <BLANKLINE>
+ Got:
+ 1
+ <BLANKLINE>
+ <BLANKLINE>
+ > testrunner-ex/sample3/sampletests_d.py(81)_()
+ ...ValueError: Expected and actual output are different
+ > <string>(1)...()
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+
+Post-mortem debugging of a docfile doctest failure:
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
+ ... ' -t post_mortem_failure.rst -D').split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ ... # doctest: +NORMALIZE_WHITESPACE
+ Running zope.testrunner.layer.UnitTests tests:...
+ <BLANKLINE>
+ <BLANKLINE>
+ Error in test
/home/jim/z3/zope.testrunner/src/zope/testing/testrunner-ex/sample3/post_mortem_failure.rst
+ <BLANKLINE>
+ File "testrunner-ex/sample3/post_mortem_failure.rst",
+ line 2, in post_mortem_failure.rst
+ <BLANKLINE>
+ x
+ <BLANKLINE>
+ Want:
+ 2
+ <BLANKLINE>
+ Got:
+ 1
+ <BLANKLINE>
+ <BLANKLINE>
+ > testrunner-ex/sample3/post_mortem_failure.rst(2)_()
+ ...ValueError:
+ Expected and actual output are different
+ > <string>(1)...()
+ (Pdb) p x
+ 1
+ (Pdb) c
+ Tearing down left over layers:
+ Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
+ False
+
+Post-mortem debugging with triple verbosity
+
+ >>> sys.stdin = Input('p x\nc')
+ >>> sys.argv = 'test --layer samplelayers.Layer1$ -vvv -D'.split()
+ >>> try: testrunner.run_internal(defaults)
+ ... finally: sys.stdin = real_stdin
+ Running tests at level 1
+ Running samplelayers.Layer1 tests:
+ Set up samplelayers.Layer1 in 0.000 seconds.
+ Running:
+ test_x1 (sampletestsf.TestA1...) (0.000 s)
+ test_y0 (sampletestsf.TestA1...) (0.000 s)
+ test_z0 (sampletestsf.TestA1...) (0.000 s)
+ test_x0 (sampletestsf.TestB1...) (0.000 s)
+ test_y1 (sampletestsf.TestB1...) (0.000 s)
+ test_z0 (sampletestsf.TestB1...) (0.000 s)
+ test_1 (sampletestsf.TestNotMuch1...) (0.000 s)
+ test_2 (sampletestsf.TestNotMuch1...) (0.000 s)
+ test_3 (sampletestsf.TestNotMuch1...) (0.000 s)
+ Ran 9 tests with 0 failures, 0 errors and 0 skipped in 0.001 seconds.
+ Tearing down left over layers:
+ Tear down samplelayers.Layer1 in 0.000 seconds.
+ False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope_testrunner-8.1/src/zope/testrunner/tests/testrunner-edge-cases.rst
new/zope_testrunner-8.2/src/zope/testrunner/tests/testrunner-edge-cases.rst
--- old/zope_testrunner-8.1/src/zope/testrunner/tests/testrunner-edge-cases.rst
2025-10-02 08:39:26.000000000 +0200
+++ new/zope_testrunner-8.2/src/zope/testrunner/tests/testrunner-edge-cases.rst
2026-01-23 08:27:52.000000000 +0100
@@ -64,375 +64,14 @@
Total: 0 tests, 0 failures, 0 errors and 0 skipped in 0.000 seconds.
False
-
-Debugging Edge Cases
---------------------
+Test Suites with None for suites or tests
+-----------------------------------------
>>> directory_with_tests = os.path.join(this_directory, 'testrunner-ex')
>>> defaults = [
... '--test-path', directory_with_tests,
... '--tests-pattern', '^sampletestsf?$',
... ]
- >>> class Input:
- ... def __init__(self, src):
- ... self.lines = src.split('\n')
- ... def readline(self):
- ... line = self.lines.pop(0)
- ... print(line)
- ... return line+'\n'
-
- >>> real_stdin = sys.stdin
-
-Using pdb.set_trace in a function called by an ordinary test:
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t set_trace2').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- ... # doctest: +ELLIPSIS
- Running zope.testrunner.layer.UnitTests tests:...
- > testrunner-ex/sample3/sampletests_d.py(47)f()
- -> ...
- (Pdb) p x
- 1
- (Pdb) c
- Ran 1 tests with 0 failures, 0 errors and 0 skipped in 0.001 seconds.
- ...
- False
-
-Using pdb.set_trace in a function called by a doctest in a doc string:
-
- >>> sys.stdin = Input('n\np x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t set_trace4').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- Running zope.testrunner.layer.UnitTests tests:
- Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
- > testrunner-ex/sample3/sampletests_d.py(NNN)f()
- -> ...
- (Pdb) n
- ...
- (Pdb) p x
- 1
- (Pdb) c
- Ran 1 tests with 0 failures, 0 errors and 0 skipped in N.NNN seconds.
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-Using pdb in a docstring-based doctest
-
- >>> sys.stdin = Input('n\np x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t set_trace3').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- Running zope.testrunner.layer.UnitTests tests:
- Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
- ...
- (Pdb) n
- ...
- (Pdb) p x
- 1
- (Pdb) c
- Ran 1 tests with 0 failures, 0 errors and 0 skipped in N.NNN seconds.
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-Using pdb.set_trace in a doc file:
-
-
- >>> sys.stdin = Input('n\np x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t set_trace5').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- Running zope.testrunner.layer.UnitTests tests:
- Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
- ...
- (Pdb) n
- ...
- (Pdb) p x
- 1
- (Pdb) c
- Ran 1 tests with 0 failures, 0 errors and 0 skipped in N.NNN seconds.
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-Using pdb.set_trace in a function called by a doctest in a doc file:
-
-
- >>> sys.stdin = Input('n\np x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t set_trace6').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- Running zope.testrunner.layer.UnitTests tests:
- Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
- ...
- (Pdb) n
- ...
- (Pdb) p x
- 1
- (Pdb) c
- Ran 1 tests with 0 failures, 0 errors and 0 skipped in N.NNN seconds.
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-Post-mortem debugging function called from ordinary test:
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t post_mortem2 -D').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- ... # doctest: +NORMALIZE_WHITESPACE
- Running zope.testrunner.layer.UnitTests tests:...
- <BLANKLINE>
- <BLANKLINE>
- Error in test test_post_mortem2 (sample3.sampletests_d.TestSomething...)
- Traceback (most recent call last):
- File "testrunner-ex/sample3/sampletests_d.py",
- line 37, in test_post_mortem2
- g()
- File "testrunner-ex/sample3/sampletests_d.py", line 46, in g
- raise ValueError
- ValueError
- <BLANKLINE>
- ...ValueError
- <BLANKLINE>
- > testrunner-ex/sample3/sampletests_d.py(46)g()
- -> raise ValueError
- (Pdb) p x
- 1
- (Pdb) c
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-
-Post-mortem debugging docstring-based doctest:
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t post_mortem3 -D').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- ... # doctest: +NORMALIZE_WHITESPACE
- Running zope.testrunner.layer.UnitTests tests:
- Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
- <BLANKLINE>
- <BLANKLINE>
- Error in test post_mortem3 (sample3.sampletests_d)
- Traceback (most recent call last):
- ...UnexpectedException: testrunner-ex/sample3/sampletests_d.py:NNN (2
examples)>
- <BLANKLINE>
- ...ValueError
- <BLANKLINE>
- > <doctest sample3.sampletests_d.post_mortem3[1]>(1)?()
- (Pdb) p x
- 1
- (Pdb) c
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-Post-mortem debugging function called from docstring-based doctest:
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t post_mortem4 -D').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- ... # doctest: +NORMALIZE_WHITESPACE
- Running zope.testrunner.layer.UnitTests tests:
- Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
- <BLANKLINE>
- <BLANKLINE>
- Error in test post_mortem4 (sample3.sampletests_d)
- Traceback (most recent call last):
- ...UnexpectedException: testrunner-ex/sample3/sampletests_d.py:NNN (1
example)>
- <BLANKLINE>
- ...ValueError
- <BLANKLINE>
- > testrunner-ex/sample3/sampletests_d.py(NNN)g()
- -> raise ValueError
- (Pdb) p x
- 1
- (Pdb) c
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-Post-mortem debugging file-based doctest:
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t post_mortem5 -D').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- ... # doctest: +NORMALIZE_WHITESPACE
- Running zope.testrunner.layer.UnitTests tests:
- Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
- <BLANKLINE>
- <BLANKLINE>
- Error testrunner-ex/sample3/post_mortem5.rst
- Traceback (most recent call last):
- ...UnexpectedException: testrunner-ex/sample3/post_mortem5.rst:0 (2
examples)>
- <BLANKLINE>
- ...ValueError
- <BLANKLINE>
- > <doctest post_mortem5.rst[1]>(1)?()
- (Pdb) p x
- 1
- (Pdb) c
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-
-
-Post-mortem debugging function called from file-based doctest:
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t post_mortem6 -D').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- ... # doctest: +NORMALIZE_WHITESPACE
- Running zope.testrunner.layer.UnitTests tests:...
- Set up zope.testrunner.layer.UnitTests in N.NNN seconds.
- <BLANKLINE>
- <BLANKLINE>
- Error testrunner-ex/sample3/post_mortem6.rst
- Traceback (most recent call last):
- File ".../zope/testing/doctest/__init__.py", Line NNN, in debug
- runner.run(self._dt_test, clear_globs=False)
- File ".../zope/testing/doctest/__init__.py", Line NNN, in run
- r = DocTestRunner.run(self, test, compileflags, out, False)
- File ".../zope/testing/doctest/__init__.py", Line NNN, in run
- return self.__run(test, compileflags, out)
- File ".../zope/testing/doctest/__init__.py", Line NNN, in __run
- exc_info)
- File ".../zope/testing/doctest/__init__.py", Line NNN, in
report_unexpected_exception
- raise UnexpectedException(test, example, exc_info)
- ...UnexpectedException: testrunner-ex/sample3/post_mortem6.rst:0 (2
examples)>
- <BLANKLINE>
- ...ValueError
- <BLANKLINE>
- > testrunner-ex/sample3/sampletests_d.py(NNN)g()
- -> raise ValueError
- (Pdb) p x
- 1
- (Pdb) c
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-Post-mortem debugging of a docstring doctest failure:
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t post_mortem_failure2 -D').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- ... # doctest: +NORMALIZE_WHITESPACE
- Running zope.testrunner.layer.UnitTests tests:...
- <BLANKLINE>
- <BLANKLINE>
- Error in test post_mortem_failure2 (sample3.sampletests_d)
- <BLANKLINE>
- File "testrunner-ex/sample3/sampletests_d.py",
- line 81, in sample3.sampletests_d.post_mortem_failure2
- <BLANKLINE>
- x
- <BLANKLINE>
- Want:
- 2
- <BLANKLINE>
- Got:
- 1
- <BLANKLINE>
- <BLANKLINE>
- > testrunner-ex/sample3/sampletests_d.py(81)_()
- ...ValueError: Expected and actual output are different
- > <string>(1)...()
- (Pdb) p x
- 1
- (Pdb) c
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-
-Post-mortem debugging of a docfile doctest failure:
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = ('test -ssample3 --tests-pattern ^sampletests_d$'
- ... ' -t post_mortem_failure.rst -D').split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- ... # doctest: +NORMALIZE_WHITESPACE
- Running zope.testrunner.layer.UnitTests tests:...
- <BLANKLINE>
- <BLANKLINE>
- Error in test
/home/jim/z3/zope.testrunner/src/zope/testing/testrunner-ex/sample3/post_mortem_failure.rst
- <BLANKLINE>
- File "testrunner-ex/sample3/post_mortem_failure.rst",
- line 2, in post_mortem_failure.rst
- <BLANKLINE>
- x
- <BLANKLINE>
- Want:
- 2
- <BLANKLINE>
- Got:
- 1
- <BLANKLINE>
- <BLANKLINE>
- > testrunner-ex/sample3/post_mortem_failure.rst(2)_()
- ...ValueError:
- Expected and actual output are different
- > <string>(1)...()
- (Pdb) p x
- 1
- (Pdb) c
- Tearing down left over layers:
- Tear down zope.testrunner.layer.UnitTests in N.NNN seconds.
- False
-
-Post-mortem debugging with triple verbosity
-
- >>> sys.stdin = Input('p x\nc')
- >>> sys.argv = 'test --layer samplelayers.Layer1$ -vvv -D'.split()
- >>> try: testrunner.run_internal(defaults)
- ... finally: sys.stdin = real_stdin
- Running tests at level 1
- Running samplelayers.Layer1 tests:
- Set up samplelayers.Layer1 in 0.000 seconds.
- Running:
- test_x1 (sampletestsf.TestA1...) (0.000 s)
- test_y0 (sampletestsf.TestA1...) (0.000 s)
- test_z0 (sampletestsf.TestA1...) (0.000 s)
- test_x0 (sampletestsf.TestB1...) (0.000 s)
- test_y1 (sampletestsf.TestB1...) (0.000 s)
- test_z0 (sampletestsf.TestB1...) (0.000 s)
- test_1 (sampletestsf.TestNotMuch1...) (0.000 s)
- test_2 (sampletestsf.TestNotMuch1...) (0.000 s)
- test_3 (sampletestsf.TestNotMuch1...) (0.000 s)
- Ran 9 tests with 0 failures, 0 errors and 0 skipped in 0.001 seconds.
- Tearing down left over layers:
- Tear down samplelayers.Layer1 in 0.000 seconds.
- False
-
-Test Suites with None for suites or tests
------------------------------------------
-
>>> sys.argv = ['test',
... '--tests-pattern', '^sampletests_none_suite$',
... ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope_testrunner-8.1/src/zope/testrunner/tests/testrunner-subunit.rst
new/zope_testrunner-8.2/src/zope/testrunner/tests/testrunner-subunit.rst
--- old/zope_testrunner-8.1/src/zope/testrunner/tests/testrunner-subunit.rst
2025-10-02 08:39:26.000000000 +0200
+++ new/zope_testrunner-8.2/src/zope/testrunner/tests/testrunner-subunit.rst
2026-01-23 08:27:52.000000000 +0100
@@ -191,11 +191,9 @@
failure: sample2.sampletests_e.eek [ multipart
Content-Type: text/x-traceback...
traceback
- NNN\r
- <BLANKLINE>
+ NNN...
Failed doctest test for sample2.sampletests_e.eek
- testrunner-ex/sample2/sampletests_e.py", Line NNN, in eek
- <BLANKLINE>
+ testrunner-ex/sample2/sampletests_e.py", Line NNN, in eek...
----------------------------------------------------------------------
File testrunner-ex/sample2/sampletests_e.py", Line NNN, in
sample2.sampletests_e.eek
Failed example:
@@ -209,8 +207,7 @@
testrunner-ex/sample2/sampletests_e.py", Line NNN, in g
x = y + 1 # noqa: F821
- __traceback_info__: I don't know what Y should be.
- NameError: name 'y' is not defined
- 0\r
+ NameError: name 'y' is not ...0...
<BLANKLINE>
]
time: YYYY-MM-DD HH:MM:SS.mmmmmmZ
@@ -227,8 +224,7 @@
error: sample2.sampletests_e.Test.test3 [ multipart
Content-Type: text/x-traceback...
traceback
- NNN\r
- <BLANKLINE>
+ NNN...
Traceback (most recent call last):
testrunner-ex/sample2/sampletests_e.py", Line NNN, in test3
f()
@@ -237,9 +233,7 @@
testrunner-ex/sample2/sampletests_e.py", Line NNN, in g
x = y + 1 # noqa: F821
- __traceback_info__: I don't know what Y should be.
- NameError: name 'y' is not defined
- 0\r
- <BLANKLINE>
+ NameError: name 'y' is not ...0...
]
time: YYYY-MM-DD HH:MM:SS.mmmmmmZ
test: sample2.sampletests_e.Test.test4
@@ -255,11 +249,9 @@
failure: e_rst [ multipart
Content-Type: text/x-traceback...
traceback
- NNN\r
- <BLANKLINE>
+ NNN...
Failed doctest test for e.rst
- testrunner-ex/sample2/e.rst", line 0
- <BLANKLINE>
+ testrunner-ex/sample2/e.rst", line 0...
----------------------------------------------------------------------
File testrunner-ex/sample2/e.rst", Line NNN, in e.rst
Failed example:
@@ -270,9 +262,7 @@
f()
File "<doctest e.rst[0]>", Line NNN, in f
return x
- NameError: name 'x' is not defined
- 0\r
- <BLANKLINE>
+ NameError: name 'x' is not ...0...
]
tags: -zope:layer:zope.testrunner.layer.UnitTests
time: YYYY-MM-DD HH:MM:SS.mmmmmmZ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zope_testrunner-8.1/src/zope.testrunner.egg-info/PKG-INFO
new/zope_testrunner-8.2/src/zope.testrunner.egg-info/PKG-INFO
--- old/zope_testrunner-8.1/src/zope.testrunner.egg-info/PKG-INFO
2025-10-02 08:39:27.000000000 +0200
+++ new/zope_testrunner-8.2/src/zope.testrunner.egg-info/PKG-INFO
2026-01-23 08:27:53.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.2
+Metadata-Version: 2.4
Name: zope.testrunner
-Version: 8.1
+Version: 8.2
Summary: Zope testrunner script.
Home-page: https://github.com/zopefoundation/zope.testrunner
Author: Zope Foundation and Contributors
@@ -14,16 +14,17 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Testing
-Requires-Python: >=3.9
+Requires-Python: >=3.10
+Description-Content-Type: text/x-rst
License-File: LICENSE.md
Requires-Dist: zope.exceptions
Requires-Dist: zope.interface
@@ -39,8 +40,10 @@
Dynamic: author-email
Dynamic: classifier
Dynamic: description
+Dynamic: description-content-type
Dynamic: home-page
Dynamic: license
+Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
@@ -227,6 +230,14 @@
zope.testrunner Changelog
===========================
+8.2 (2026-01-23)
+================
+
+- Remove support for Python 3.9.
+
+- Add support for Python 3.14.
+
+
8.1 (2025-10-02)
================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zope_testrunner-8.1/tox.ini
new/zope_testrunner-8.2/tox.ini
--- old/zope_testrunner-8.1/tox.ini 2025-10-02 08:39:26.000000000 +0200
+++ new/zope_testrunner-8.2/tox.ini 2026-01-23 08:27:52.000000000 +0100
@@ -5,22 +5,22 @@
envlist =
release-check
lint
- py39
py310
py311
py312
py313
+ py314
pypy3
docs
coverage
- py{39,310,311,312,313,py3}-subunit
+ py{310,311,312,313,314,py3}-subunit
[testenv]
usedevelop = true
package = wheel
wheel_build_env = .pkg
deps =
- setuptools == 75.8.2
+ setuptools >= 78.1.1,< 81
commands =
zope-testrunner --test-path=src {posargs:-vc}
extras =
@@ -38,7 +38,7 @@
basepython = python3
skip_install = true
deps =
- setuptools == 75.8.2
+ setuptools >= 78.1.1,< 81
wheel
twine
build
@@ -48,7 +48,7 @@
commands_pre =
commands =
check-manifest
- check-python-versions --only setup.py,tox.ini,.github/workflows/tests.yml
+ check-python-versions --only
pyproject.toml,setup.py,tox.ini,.github/workflows/tests.yml
python -m build --sdist --no-isolation
twine check dist/*