Skip to content

bpo-33917: Fix and document idlelib/idle_test/template.py #7830

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 20, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 36 additions & 24 deletions Lib/idlelib/idle_test/README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,28 +15,27 @@ python -m idlelib.idle_test.htest
1. Test Files

The idle directory, idlelib, has over 60 xyz.py files. The idle_test
subdirectory should contain a test_xyz.py for each, where 'xyz' is
lowercased even if xyz.py is not. Here is a possible template, with the
blanks after '.' and 'as', and before and after '_' to be filled in.
subdirectory contains test_xyz.py for each implementation file xyz.py.
To add a test for abc.py, open idle_test/template.py and immediately
Save As test_abc.py. Insert 'abc' on the first line, and replace
'zzdummy' with 'abc.

import unittest
from test.support import requires
import idlelib. as

class _Test(unittest.TestCase):
Remove the imports of requires and tkinter if not needed. Otherwise,
add to the tkinter imports as needed.

def test_(self):
Add a prefix to 'Test' for the initial test class. The template class
contains code needed or possibly needed for gui tests. See the next
section if doing gui tests. If not, and not needed for further classes,
this code can be removed.

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

Add the following at the end of xyy.py, with the appropriate name added
after 'test_'. Some files already have something like this for htest.
If so, insert the import and unittest.main lines before the htest lines.
Add the following at the end of abc.py. If an htest was added first,
insert the import and main lines before the htest lines.

if __name__ == "__main__":
import unittest
unittest.main('idlelib.idle_test.test_', verbosity=2, exit=False)
from unittest import main
main('idlelib.idle_test.test_abc', verbosity=2, exit=False)

The ', exit=False' is only needed if an htest follows.



Expand All @@ -55,12 +54,14 @@ from test.support import requires
requires('gui')

To guard a test class, put "requires('gui')" in its setUpClass function.
The template.py file does this.

To avoid interfering with other GUI tests, all GUI objects must be destroyed and
deleted by the end of the test. The Tk root created in a setUpX function should
be destroyed in the corresponding tearDownX and the module or class attribute
deleted. Others widgets should descend from the single root and the attributes
deleted BEFORE root is destroyed. See https://bugs.python.org/issue20567.
To avoid interfering with other GUI tests, all GUI objects must be
destroyed and deleted by the end of the test. The Tk root created in a
setUpX function should be destroyed in the corresponding tearDownX and
the module or class attribute deleted. Others widgets should descend
from the single root and the attributes deleted BEFORE root is
destroyed. See https://bugs.python.org/issue20567.

@classmethod
def setUpClass(cls):
Expand All @@ -75,12 +76,23 @@ deleted BEFORE root is destroyed. See https://bugs.python.org/issue20567.
cls.root.destroy()
del cls.root

The update_idletasks call is sometimes needed to prevent the following warning
either when running a test alone or as part of the test suite (#27196).
The update_idletasks call is sometimes needed to prevent the following
warning either when running a test alone or as part of the test suite
(#27196). It should not hurt if not needed.

can't invoke "event" command: application has been destroyed
...
"ttk::ThemeChanged"

If a test creates instance 'e' of EditorWindow, call 'e._close()' before
or as the first part of teardown. The effect of omitting this depends
on the later shutdown. Then enable the after_cancel loop in the
template. This prevents messages like the following.

bgerror failed to handle background error.
Original error: invalid command name "106096696timer_event"
Error in bgerror: can't invoke "tk" command: application has been destroyed

Requires('gui') causes the test(s) it guards to be skipped if any of
these conditions are met:

Expand Down
4 changes: 2 additions & 2 deletions Lib/idlelib/idle_test/template.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"Test , coverage %."

from idlelib import
from idlelib import zzdummy
import unittest
from test.support import requires
from tkinter import Tk
Expand All @@ -23,7 +23,7 @@ def tearDownClass(cls):
del cls.root

def test_init(self):
self.assert
self.assertTrue(True)


if __name__ == '__main__':
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix and document idlelib/idle_test/template.py. The revised file compiles,
runs, and tests OK. idle_test/README.txt explains how to use it to create
new IDLE test files.