summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/idle_test/test_tooltip.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/idlelib/idle_test/test_tooltip.py')
-rw-r--r--Lib/idlelib/idle_test/test_tooltip.py161
1 files changed, 0 insertions, 161 deletions
diff --git a/Lib/idlelib/idle_test/test_tooltip.py b/Lib/idlelib/idle_test/test_tooltip.py
deleted file mode 100644
index c616d4f..0000000
--- a/Lib/idlelib/idle_test/test_tooltip.py
+++ /dev/null
@@ -1,161 +0,0 @@
-"""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)