gh-155648: In IDLE tests, call unittest.main without exit arg by terryjreedy · Pull Request #156249 · python/cpython · GitHub
Skip to content

gh-155648: In IDLE tests, call unittest.main without exit arg - #156249

Merged
terryjreedy merged 2 commits into
python:mainfrom
terryjreedy:ddbug73
Aug 23, 2026
Merged

gh-155648: In IDLE tests, call unittest.main without exit arg#156249
terryjreedy merged 2 commits into
python:mainfrom
terryjreedy:ddbug73

Conversation

@terryjreedy

@terryjreedy terryjreedy commented Aug 23, 2026

Copy link
Copy Markdown
Member

DD bug 73: In idlelib.idle_test, test_xyz.py files should end with

if __name__ == '__main__':
    unittest.main(verbosity=2)

The default exit is True. This need not and should not be added.
5 files add the confusing equivalent exit=2 ("why the weird value?"),

4 files add exit=False. This is nonsensical when there is nothing more to run;
main will immediately exit anyway. When running a test file from an IDLE editor,
this argument has no visible effect. However, a Claude-based
bug finder claims that in other circumstances (such as a program running
the test in a shell), the good test may falsely fail. Even if this is
not true, it can only confuse a reader.

(The only place in idlelib for exit=False is in idlelib/abc.py files where the unittest
is followed by an htest. The default exit=True exits the process, skipping the htest.)

As part of editing the discussion of this in idle_test/htest.py, I clarified other things.

In idlelib.idle_test, test_xyz.py files should end with
```
if __name__ == '__main__':
    unittest.main(verbosity=2, exit=0)
```
5 files add the possibly confusing `exit=2` ("why?"),
which is equivalent to the default `exit=True`.

4 files add `exit=False`.  This is also nonsensical when there
is nothing more to run; main will immediately exit anyway.
When running the test from an IDLE editor, this argument
has no visible effect.  However, A Claude-based
bug finder claims that in other circumstances (such as a program running
the test in a shell), the good test may falsely fail. Even if this is
not true, it can only confuse a reader.
@terryjreedy terryjreedy added topic-IDLE needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes needs backport to 3.15 pre-release feature fixes, bugs and security fixes labels Aug 23, 2026
@terryjreedy
terryjreedy merged commit c20318b into python:main Aug 23, 2026
60 checks passed
@miss-islington-app

Copy link
Copy Markdown

@bedevere-app

bedevere-app Bot commented Aug 23, 2026

Copy link
Copy Markdown

GH-156251 is a backport of this pull request to the 3.15 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 pre-release feature fixes, bugs and security fixes label Aug 23, 2026
@bedevere-app

bedevere-app Bot commented Aug 23, 2026

Copy link
Copy Markdown

GH-156252 is a backport of this pull request to the 3.14 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.14 bugs and security fixes label Aug 23, 2026
@terryjreedy
terryjreedy deleted the ddbug73 branch August 23, 2026 05:38
@bedevere-app

bedevere-app Bot commented Aug 23, 2026

Copy link
Copy Markdown

GH-156253 is a backport of this pull request to the 3.13 branch.

@bedevere-app bedevere-app Bot removed the needs backport to 3.13 bugs and security fixes label Aug 23, 2026
@bedevere-bot

Copy link
Copy Markdown

terryjreedy added a commit that referenced this pull request Aug 23, 2026
…H-156249) (#156253)

gh-155648: In IDLE tests, call unittest.main without exit arg (GH-156249)

* gh-155648: In IDLE tests, call unittest.main without exit arg

DD bug 73: In idlelib.idle_test, test_xyz.py files should end with

if __name__ == '__main__':
    unittest.main(verbosity=2)

The default exit is True. This need not and should not be added.
5 files add the confusing equivalent exit=2 ("why the weird value?"),

4 files add exit=False. This is nonsensical when there is nothing more to run;
main will immediately exit anyway. When running a test file from an IDLE editor,
this argument has no visible effect. However, a Claude-based
bug finder claims that in other circumstances (such as a program running
the test in a shell), the good test may falsely fail. Even if this is
not true, it can only confuse a reader.

(The only place in idlelib for exit=False is in idlelib/abc.py files where the unittest
is followed by an htest. The default exit=True exits the process, skipping the htest.)

As part of editing the discussion of this in idle_test/htest.py, I clarified other things.
(cherry picked from commit c20318b)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
terryjreedy added a commit that referenced this pull request Aug 23, 2026
…H-156249) (#156252)

gh-155648: In IDLE tests, call unittest.main without exit arg (GH-156249)

* gh-155648: In IDLE tests, call unittest.main without exit arg

DD bug 73: In idlelib.idle_test, test_xyz.py files should end with

if __name__ == '__main__':
    unittest.main(verbosity=2)

The default exit is True. This need not and should not be added.
5 files add the confusing equivalent exit=2 ("why the weird value?"),

4 files add exit=False. This is nonsensical when there is nothing more to run;
main will immediately exit anyway. When running a test file from an IDLE editor,
this argument has no visible effect. However, a Claude-based
bug finder claims that in other circumstances (such as a program running
the test in a shell), the good test may falsely fail. Even if this is
not true, it can only confuse a reader.

(The only place in idlelib for exit=False is in idlelib/abc.py files where the unittest
is followed by an htest. The default exit=True exits the process, skipping the htest.)

As part of editing the discussion of this in idle_test/htest.py, I clarified other things.
(cherry picked from commit c20318b)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants