gh-155648: Write the empty and placeholder IDLE tests - #156260
gh-155648: Write the empty and placeholder IDLE tests#156260serhiy-storchaka wants to merge 9 commits into
Conversation
It was removed as an unused import in pythonGH-151478, but template.py is a skeleton for creating new IDLE test files, and idle_test/README.txt instructs the user to replace 'zzdummy' with the name of the module under test. Add a Ruff per-file ignore to keep it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…m out test_editor.RMenuTest was added in pythonGH-18951, which fixed right-clicking inside a selection, with the note that an automated test should follow. Use the DummyRMenu class left there to test right_menu_event(), and test the rmenu_check_*() methods that supply the menu entry states. test_configdialog.ConfigDialogTest was left with two empty stubs in pythonGH-3592, named after the two ConfigDialog methods which the button tests only check to be called. Test them with a fake parent whose instance dictionary contains an autospecced EditorWindow. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* test_configdialog.ExtPageTest was added empty, with a commented-out "Nothing here yet TODO" skip, when ExtPage was factored out of ConfigDialog in pythonGH-26618. Test load_extensions(), extension_selected(), set_extension_value() and save_all_changed_extensions(). * test_grep.Default_commandTest was left empty in 2013 because GrepDialog.default_command() imports OutputWindow when called, and the import cannot be moved to the top of the module due to an import loop. Replace the imported class with a mock instead of moving the import. * test_config.ChangesTest.test_save_default never called save_all(), so it tested nothing. Add the missing assertions, and add the test for the Save() calls that the following TODO comment asked for. * test_config.IdleConfTest.test_get_current_keyset only tested the non-darwin branch, because the default key sets no longer contain Alt keys. Add an extension binding with an Alt key, so that its replacement with Option can be tested. Remove the stale commented-out test in test_get_extension_keys, which used the ZoomHeight extension. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Text.bbox() returns None while the window is not mapped, as on Windows, where the root window of the test is withdrawn. Ask the widget for the index of the clicked character instead of computing the coordinates of a known index. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
test_autocomplete.py:241 passes when proper because any([]) is True is true. It would also pass if small only had underscored words because the filter got reversed. Change logic and replace filter with generator expression
using slice instead of startswith. Change line 242 to match.
test_editor.py:236 and test_configdialog.py:55 have empty tests ('pass'); skip them for now.
PR-#156260 add real tests.
template.py:25 tests True == True; skip it. With this, the bug scanner should be satisfied while allowing
setUpClass and tearDownClass to run and be verified.
Remove duplicate and confusing fetch_completions call.
RMenuTest and ConfigDialogTest were skipped as empty in pythonGH-156257. They are no longer empty. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gh-155648: Fix IDLE tests that cannot fail (GH-156257) test_autocomplete.py:241 passes when proper because any([]) is True is true. It would also pass if small only had underscored words because the filter got reversed. Change logic and replace filter with generator expression using slice instead of startswith. Change line 242 to match. test_editor.py:236 and test_configdialog.py:55 have empty tests ('pass'); skip them for now. PR-GH-156260 add real tests. template.py:25 tests True == True; skip it. With this, the bug scanner should be satisfied while allowing setUpClass and tearDownClass to run and be verified. Remove duplicate and confusing fetch_completions call. (cherry picked from commit ee1da7e) Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
gh-155648: Fix IDLE tests that cannot fail (GH-156257) test_autocomplete.py:241 passes when proper because any([]) is True is true. It would also pass if small only had underscored words because the filter got reversed. Change logic and replace filter with generator expression using slice instead of startswith. Change line 242 to match. test_editor.py:236 and test_configdialog.py:55 have empty tests ('pass'); skip them for now. PR-GH-156260 add real tests. template.py:25 tests True == True; skip it. With this, the bug scanner should be satisfied while allowing setUpClass and tearDownClass to run and be verified. Remove duplicate and confusing fetch_completions call. (cherry picked from commit ee1da7e) Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
test_autocomplete.py:241 passes when proper because any([]) is True is true. It would also pass if small only had underscored words because the filter got reversed. Change logic and replace filter with generator expression
using slice instead of startswith. Change line 242 to match.
test_editor.py:236 and test_configdialog.py:55 have empty tests ('pass'); skip them for now.
PR-python#156260 add real tests.
template.py:25 tests True == True; skip it. With this, the bug scanner should be satisfied while allowing
setUpClass and tearDownClass to run and be verified.
Remove duplicate and confusing fetch_completions call.
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Also add the missing quote in the instructions in README.txt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
terryjreedy
left a comment
There was a problem hiding this comment.
I have not yet reviewed test_config dialog. Might put this off to review other PRs.
I partially reviewed test_editor, with one change so far and thinking about another.
Should be able to finish this tomorrow.
I reviewed the other five and requested 2 changes; approved with those changes.
| self.assertEqual(changes, self.empty) | ||
|
|
||
| # TODO: test that save_all calls usercfg Saves. | ||
| def test_save_all_saves_files(self): |
There was a problem hiding this comment.
In this function, change parser to config in 2 for-loops.
| cls.root = Tk() | ||
| cls.root.withdraw() | ||
| cls.window = Editor(root=cls.root) | ||
| cls.text = cls.window.text |
There was a problem hiding this comment.
Please add the following comment under class RMenuTest... above.
# Test selection-rclick interaction in right_click_event and rmenu_check_copy(cut) status settings.
# These are part of the rmenu functions common to all text windows with context windows.
| # Methods tested | ||
| #default_command = GrepDialog.default_command | ||
| default_command = grep.GrepDialog.default_command | ||
| grep_it = grep.GrepDialog.grep_it |
There was a problem hiding this comment.
Lets rewrite class as
class Dummy_grep:
# Simplifications: 1. Don't initializes superclass SearchEngineBase with searchengine.
# 2. Use directly set class vars instead of instance vars set from GUI.
globvar = Var('') # File name.
recvar = Var(False) # Recurse down directories?
# Methods tested.
grep_it = grep.GrepDialog.grep_it
default_command = grep.GrepDialog.default_command # Uses grep_it.
|
When you're done making the requested changes, leave the comment: And if you don't make the requested changes, you will be poked with soft cushions! |
Name the loop variable after what it holds in test_save_all_saves_files, say what RMenuTest covers, and give Dummy_grep the simplifications it makes and a comment for each class variable. Dummy_grep keeps engine and close, which grep_it calls. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Several tests in
idlelib/idle_testare empty stubs or placeholders that cannot fail. Write them instead of removing them.test_editor.RMenuTestwas added in bpo-39885: IDLE: Leave selection when right click within #18951, which fixed right-clicking inside a selection, with the note that an automated test should follow. ItsDummyRMenuclass is used now to testright_menu_event(), together with thermenu_check_*()methods that supply the menu entry states.test_configdialog.ConfigDialogTestwas left with two empty stubs in bpo-30780: Add IDLE configdialog tests #3592, named after the twoConfigDialogmethods which the button tests only check to be called. They are tested with a fake parent whose instance dictionary contains an autospeccedEditorWindow.test_configdialog.ExtPageTestwas added empty, with a commented out "Nothing here yet TODO" skip, whenExtPagewas factored out in bpo-40468: Factor out class ExtPage in idlelib.configdialog #26618. The extensions page is the only configuration page without tests.test_grep.Default_commandTestwas left empty in 2013 becauseGrepDialog.default_command()importsOutputWindowwhen called. The import cannot be moved to the top of the module due to an import loop, but the imported class can be replaced with a mock.test_config.ChangesTest.test_save_defaultnever calledsave_all(), so it tested nothing. The test for theSave()calls asked for by the following TODO comment is added too.test_config.IdleConfTest.test_get_current_keysetonly tested the non-darwin branch, because the default key sets no longer contain Alt keys. An extension binding with an Alt key is added, so that its replacement with Option can be tested.template.pylost thefrom idlelib import zzdummyline in gh-151428: Remove unused imports from stdlib #151478 as an unused import, butidle_test/README.txtinstructs the user to replacezzdummywith the name of the module under test. A Ruff per-file ignore keeps it now.Each new test was checked to fail when the corresponding code is broken.
The first two items are an alternative to the now merged #156257, which skipped these two stubs as empty. Its skips are removed here, because the tests are written. Its other changes, the vacuous assertion in
test_autocompleteand the skipped dummy test intemplate.py, are left as they are.