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/*
 

Reply via email to