Current Path: > > opt > alt > python37 > lib64 > python3.7 > idlelib > idle_test >
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
__pycache__ | Directory | - | - | |
README.txt | File | 8729 bytes | June 05 2023 20:45:13. | |
__init__.py | File | 712 bytes | April 17 2024 17:36:04. | |
htest.py | File | 15190 bytes | April 17 2024 17:36:04. | |
mock_idle.py | File | 1943 bytes | April 17 2024 17:36:04. | |
mock_tk.py | File | 11627 bytes | April 17 2024 17:36:04. | |
template.py | File | 642 bytes | April 17 2024 17:36:04. | |
test_autocomplete.py | File | 10717 bytes | April 17 2024 17:36:04. | |
test_autocomplete_w.py | File | 709 bytes | April 17 2024 17:36:04. | |
test_autoexpand.py | File | 4638 bytes | April 17 2024 17:36:04. | |
test_browser.py | File | 7963 bytes | April 17 2024 17:36:04. | |
test_calltip.py | File | 9937 bytes | April 17 2024 17:36:04. | |
test_calltip_w.py | File | 686 bytes | April 17 2024 17:36:04. | |
test_codecontext.py | File | 16120 bytes | April 17 2024 17:36:04. | |
test_colorizer.py | File | 15017 bytes | April 17 2024 17:36:04. | |
test_config.py | File | 32046 bytes | April 17 2024 17:36:04. | |
test_config_key.py | File | 9709 bytes | April 17 2024 17:36:04. | |
test_configdialog.py | File | 54350 bytes | April 17 2024 17:36:04. | |
test_debugger.py | File | 571 bytes | April 17 2024 17:36:04. | |
test_debugger_r.py | File | 631 bytes | April 17 2024 17:36:04. | |
test_debugobj.py | File | 1561 bytes | April 17 2024 17:36:04. | |
test_debugobj_r.py | File | 545 bytes | April 17 2024 17:36:04. | |
test_delegator.py | File | 1567 bytes | April 17 2024 17:36:04. | |
test_editmenu.py | File | 2564 bytes | April 17 2024 17:36:04. | |
test_editor.py | File | 7523 bytes | April 17 2024 17:36:04. | |
test_filelist.py | File | 795 bytes | April 17 2024 17:36:04. | |
test_format.py | File | 23612 bytes | April 17 2024 17:36:04. | |
test_grep.py | File | 5072 bytes | April 17 2024 17:36:04. | |
test_help.py | File | 849 bytes | April 17 2024 17:36:04. | |
test_help_about.py | File | 5921 bytes | April 17 2024 17:36:04. | |
test_history.py | File | 5517 bytes | April 17 2024 17:36:04. | |
test_hyperparser.py | File | 9082 bytes | April 17 2024 17:36:04. | |
test_iomenu.py | File | 1278 bytes | April 17 2024 17:36:04. | |
test_macosx.py | File | 3309 bytes | April 17 2024 17:36:04. | |
test_mainmenu.py | File | 594 bytes | April 17 2024 17:36:04. | |
test_multicall.py | File | 1316 bytes | April 17 2024 17:36:04. | |
test_outwin.py | File | 5545 bytes | April 17 2024 17:36:04. | |
test_parenmatch.py | File | 3550 bytes | April 17 2024 17:36:04. | |
test_pathbrowser.py | File | 2422 bytes | April 17 2024 17:36:04. | |
test_percolator.py | File | 4065 bytes | April 17 2024 17:36:04. | |
test_pyparse.py | File | 19227 bytes | April 17 2024 17:36:04. | |
test_pyshell.py | File | 2171 bytes | April 17 2024 17:36:04. | |
test_query.py | File | 15280 bytes | April 17 2024 17:36:04. | |
test_redirector.py | File | 4176 bytes | April 17 2024 17:36:04. | |
test_replace.py | File | 8305 bytes | April 17 2024 17:36:04. | |
test_rpc.py | File | 805 bytes | April 17 2024 17:36:04. | |
test_run.py | File | 11737 bytes | April 17 2024 17:36:04. | |
test_runscript.py | File | 777 bytes | April 17 2024 17:36:04. | |
test_scrolledlist.py | File | 496 bytes | April 17 2024 17:36:04. | |
test_search.py | File | 2459 bytes | April 17 2024 17:36:04. | |
test_searchbase.py | File | 5635 bytes | April 17 2024 17:36:04. | |
test_searchengine.py | File | 11543 bytes | April 17 2024 17:36:04. | |
test_sidebar.py | File | 13231 bytes | April 17 2024 17:36:04. | |
test_squeezer.py | File | 20088 bytes | April 17 2024 17:36:04. | |
test_stackviewer.py | File | 1206 bytes | April 17 2024 17:36:04. | |
test_statusbar.py | File | 1133 bytes | April 17 2024 17:36:04. | |
test_text.py | File | 6978 bytes | April 17 2024 17:36:04. | |
test_textview.py | File | 7364 bytes | April 17 2024 17:36:04. | |
test_tooltip.py | File | 5385 bytes | April 17 2024 17:36:04. | |
test_tree.py | File | 1752 bytes | April 17 2024 17:36:04. | |
test_undo.py | File | 4228 bytes | April 17 2024 17:36:04. | |
test_warning.py | File | 2740 bytes | April 17 2024 17:36:04. | |
test_window.py | File | 1075 bytes | April 17 2024 17:36:04. | |
test_zoomheight.py | File | 999 bytes | April 17 2024 17:36:04. |
"""Test tooltip, coverage 100%. Coverage is 100% after excluding 6 lines with "# pragma: no cover". They involve TclErrors that either should or should not happen in a particular situation, and which are 'pass'ed if they do. """ from idlelib.tooltip import TooltipBase, Hovertip from test.support import requires requires('gui') from functools import wraps import time from tkinter import Button, Tk, Toplevel import unittest def setUpModule(): global root root = Tk() def tearDownModule(): global root root.update_idletasks() root.destroy() del root def add_call_counting(func): @wraps(func) def wrapped_func(*args, **kwargs): wrapped_func.call_args_list.append((args, kwargs)) return func(*args, **kwargs) wrapped_func.call_args_list = [] return wrapped_func def _make_top_and_button(testobj): global root top = Toplevel(root) testobj.addCleanup(top.destroy) top.title("Test tooltip") button = Button(top, text='ToolTip test button') button.pack() testobj.addCleanup(button.destroy) top.lift() return top, button class ToolTipBaseTest(unittest.TestCase): def setUp(self): self.top, self.button = _make_top_and_button(self) def test_base_class_is_unusable(self): global root top = Toplevel(root) self.addCleanup(top.destroy) button = Button(top, text='ToolTip test button') button.pack() self.addCleanup(button.destroy) with self.assertRaises(NotImplementedError): tooltip = TooltipBase(button) tooltip.showtip() class HovertipTest(unittest.TestCase): def setUp(self): self.top, self.button = _make_top_and_button(self) def is_tipwindow_shown(self, tooltip): return tooltip.tipwindow and tooltip.tipwindow.winfo_viewable() def test_showtip(self): tooltip = Hovertip(self.button, 'ToolTip text') self.addCleanup(tooltip.hidetip) self.assertFalse(self.is_tipwindow_shown(tooltip)) tooltip.showtip() self.assertTrue(self.is_tipwindow_shown(tooltip)) def test_showtip_twice(self): tooltip = Hovertip(self.button, 'ToolTip text') self.addCleanup(tooltip.hidetip) self.assertFalse(self.is_tipwindow_shown(tooltip)) tooltip.showtip() self.assertTrue(self.is_tipwindow_shown(tooltip)) orig_tipwindow = tooltip.tipwindow tooltip.showtip() self.assertTrue(self.is_tipwindow_shown(tooltip)) self.assertIs(tooltip.tipwindow, orig_tipwindow) def test_hidetip(self): tooltip = Hovertip(self.button, 'ToolTip text') self.addCleanup(tooltip.hidetip) tooltip.showtip() tooltip.hidetip() self.assertFalse(self.is_tipwindow_shown(tooltip)) def test_showtip_on_mouse_enter_no_delay(self): tooltip = Hovertip(self.button, 'ToolTip text', hover_delay=None) self.addCleanup(tooltip.hidetip) tooltip.showtip = add_call_counting(tooltip.showtip) root.update() self.assertFalse(self.is_tipwindow_shown(tooltip)) self.button.event_generate('<Enter>', x=0, y=0) root.update() self.assertTrue(self.is_tipwindow_shown(tooltip)) self.assertGreater(len(tooltip.showtip.call_args_list), 0) def test_hover_with_delay(self): # Run multiple tests requiring an actual delay simultaneously. # Test #1: A hover tip with a non-zero delay appears after the delay. tooltip1 = Hovertip(self.button, 'ToolTip text', hover_delay=100) self.addCleanup(tooltip1.hidetip) tooltip1.showtip = add_call_counting(tooltip1.showtip) root.update() self.assertFalse(self.is_tipwindow_shown(tooltip1)) self.button.event_generate('<Enter>', x=0, y=0) root.update() self.assertFalse(self.is_tipwindow_shown(tooltip1)) # Test #2: A hover tip with a non-zero delay doesn't appear when # the mouse stops hovering over the base widget before the delay # expires. tooltip2 = Hovertip(self.button, 'ToolTip text', hover_delay=100) self.addCleanup(tooltip2.hidetip) tooltip2.showtip = add_call_counting(tooltip2.showtip) root.update() self.button.event_generate('<Enter>', x=0, y=0) root.update() self.button.event_generate('<Leave>', x=0, y=0) root.update() time.sleep(0.15) root.update() # Test #1 assertions. self.assertTrue(self.is_tipwindow_shown(tooltip1)) self.assertGreater(len(tooltip1.showtip.call_args_list), 0) # Test #2 assertions. self.assertFalse(self.is_tipwindow_shown(tooltip2)) self.assertEqual(tooltip2.showtip.call_args_list, []) def test_hidetip_on_mouse_leave(self): tooltip = Hovertip(self.button, 'ToolTip text', hover_delay=None) self.addCleanup(tooltip.hidetip) tooltip.showtip = add_call_counting(tooltip.showtip) root.update() self.button.event_generate('<Enter>', x=0, y=0) root.update() self.button.event_generate('<Leave>', x=0, y=0) root.update() self.assertFalse(self.is_tipwindow_shown(tooltip)) self.assertGreater(len(tooltip.showtip.call_args_list), 0) if __name__ == '__main__': unittest.main(verbosity=2)
SILENT KILLER Tool