[Python-checkins] r73133 - python/branches/tk_and_idle_maintenance/Lib/lib-tk/test/test_tkinter/test_menu.py

guilherme.polo python-checkins at python.org
Tue Jun 2 02:58:55 CEST 2009


Author: guilherme.polo
Date: Tue Jun  2 02:58:55 2009
New Revision: 73133

Log:
Some tests for Tkinter.Menu.

Added:
   python/branches/tk_and_idle_maintenance/Lib/lib-tk/test/test_tkinter/test_menu.py   (contents, props changed)

Added: python/branches/tk_and_idle_maintenance/Lib/lib-tk/test/test_tkinter/test_menu.py
==============================================================================
--- (empty file)
+++ python/branches/tk_and_idle_maintenance/Lib/lib-tk/test/test_tkinter/test_menu.py	Tue Jun  2 02:58:55 2009
@@ -0,0 +1,137 @@
+import unittest
+import Tkinter
+from test.test_support import requires, run_unittest
+from ttk import setup_master
+
+requires('gui')
+
+class MenuTest(unittest.TestCase):
+
+    def setUp(self):
+        self.root = setup_master()
+        self.menu = Tkinter.Menu(self.root, tearoff=False)
+
+    def tearDown(self):
+        self.menu.destroy()
+
+
+    def test_menu_creation(self):
+        test1 = Tkinter.Menu(self.root, tearoff=False)
+        test1.add_checkbutton(label='Check', indicatoron=True)
+        test1.add_radiobutton(label='Radio', indicatoron=True)
+        test1.add_separator()
+        test1.add_command(label='Cmd', accelerator='C', underline=0)
+        self.assertRaises(Tkinter.TclError, test1.add_separator, label='sep')
+        self.assertRaises(Tkinter.TclError, test1.add_separator,
+                accelerator='X')
+
+        test2 = Tkinter.Menu(self.root, tearoff=True)
+        test2.insert_checkbutton(1, label='Check')
+        test2.insert_separator(2)
+        test2.insert_radiobutton(1, label='Radio')
+        test2.insert_command(4, label='Cmd')
+
+        self.menu.add_cascade(label='Test1', menu=test1)
+        self.assertRaises(Tkinter.TclError, self.menu.insert_cascade, -1)
+        self.menu.insert_cascade(1, label='Test2', menu=test2)
+
+        self.assertEqual(self.menu.type(0), 'cascade')
+        m1 = self.menu.nametowidget(self.menu.entrycget(0, 'menu'))
+        self.assertEqual(m1, test1)
+        self.assertEqual(m1.type(0), 'checkbutton')
+        self.assertEqual(m1.type(1), 'radiobutton')
+        self.assertEqual(m1.type(2), 'separator')
+        self.assertEqual(m1.type(3), 'command')
+        m2 = self.menu.nametowidget(self.menu.entrycget(1, 'menu'))
+        self.assertEqual(m2, test2)
+        self.assertEqual(m2.type(0), 'tearoff')
+
+        self.assertEqual(m1.entrycget(3, 'accelerator'), 'C')
+        self.assertEqual(m1.entrycget(3, 'underline'), 0)
+
+    def test_delete(self):
+        self.menu['tearoff'] = True
+        self.assertRaises(Tkinter.TclError, self.menu.delete, -1)
+
+        self.menu.add_command(label='C1', command=lambda: None)
+        self.menu.add_command(label='C2', command=lambda: None)
+
+        self.assertIs(self.menu.index('active'), None)
+        cfg1 = self.menu.entryconfigure(1)
+        cfg2 = self.menu.entryconfigure(2)
+        cmds = self.menu._tclCommands[:]
+        self.menu.delete('active', 'end')
+        self.assertEqual(self.menu.entryconfigure(1), cfg1)
+        self.assertEqual(self.menu.entryconfigure(2), cfg2)
+        self.assertEqual(self.menu._tclCommands, cmds)
+
+        self.menu.activate(1)
+        self.menu.delete('active')
+        self.assertIs(self.menu.index('active'), None)
+        self.assertEqual(len(self.menu._tclCommands), 1)
+
+        self.menu.delete(0, 'last')
+        self.assertFalse(self.menu._tclCommands)
+
+    def test_entrycget(self):
+        self.assertRaises(Tkinter.TclError, self.menu.entrycget, -1, 'hi')
+        self.menu.add_checkbutton(label='Test')
+        self.menu.add_separator()
+        self.assertTrue(isinstance(self.menu.entrycget(0, 'state'), str))
+        self.assertEqual(self.menu.entrycget(0, 'underline'), -1)
+        self.assertRaises(Tkinter.TclError, self.menu.entrycget, 1, 'state')
+
+    def test_entryconfigure(self):
+        self.assertEqual(self.menu.entryconfigure(0), {})
+        self.menu.add_separator()
+        cfg = self.menu.entryconfigure(0)
+        self.assertTrue(isinstance(cfg, dict))
+        key_test = cfg.keys()[0]
+        self.assertEqual(self.menu.entryconfigure(0, key_test), cfg[key_test])
+
+        self.assertRaises(Tkinter.TclError,
+                self.menu.entryconfigure, 0, label='hi')
+
+    def test_index(self):
+        self.assertIs(self.menu.index(0), None)
+        self.menu.add_command(label='test')
+        self.assertEqual(self.menu.index(0), self.menu.index(1))
+        self.assertEqual(self.menu.index(0), self.menu.index('last'))
+        self.assertIs(self.menu.index('active'), None)
+        self.assertIs(self.menu.index('none'), None)
+        self.assertRaises(Tkinter.TclError, self.menu.index, -1)
+
+    def test_invoke(self):
+        self.assertIs(self.menu.invoke(0), '')
+
+        def test():
+            return (1, 2, 3)
+        self.menu.add_command(command=test)
+        self.assertEqual(self.menu.invoke(0), (1, 2, 3))
+
+        self.assertRaises(Tkinter.TclError, self.menu.invoke, -1)
+
+    def test_post_unpost(self):
+        self.menu.add_radiobutton(label='R')
+        self.menu.add_checkbutton(label='C')
+
+        ypos = self.menu.yposition('last')
+        self.assertTrue(isinstance(ypos, int))
+        self.menu.post(10, 10)
+        x, y = self.menu.winfo_rootx(), self.menu.winfo_rooty()
+        self.assertIs(self.menu.index('active'), None)
+        self.menu.event_generate('<Enter>', x=0, y=0)
+        self.menu.event_generate('<Motion>', x=x, y=y)
+        # If there is an active item, then we can assume that the menu was
+        # posted and we moved the mouse over it correctly.
+        self.assertIsNot(self.menu.index('active'), None)
+        self.menu.activate(2)
+        self.menu.unpost()
+
+    # XXX Tkinter.Menu is missing xposition, postcascade and clone methods.
+
+
+tests_gui = (MenuTest, )
+
+if __name__ == "__main__":
+    run_unittest(*tests_gui)


More information about the Python-checkins mailing list