| import unittest |
| import Tkinter as tkinter |
| from test.test_support import requires, run_unittest |
| from test_ttk.support import AbstractTkTest |
| |
| requires('gui') |
| |
| class MiscTest(AbstractTkTest, unittest.TestCase): |
| |
| def test_after(self): |
| root = self.root |
| cbcount = {'count': 0} |
| |
| def callback(start=0, step=1): |
| cbcount['count'] = start + step |
| |
| # Without function, sleeps for ms. |
| self.assertIsNone(root.after(1)) |
| |
| # Set up with callback with no args. |
| cbcount['count'] = 0 |
| timer1 = root.after(0, callback) |
| self.assertIn(timer1, root.tk.call('after', 'info')) |
| (script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1)) |
| root.update() # Process all pending events. |
| self.assertEqual(cbcount['count'], 1) |
| with self.assertRaises(tkinter.TclError): |
| root.tk.call(script) |
| |
| # Set up with callback with args. |
| cbcount['count'] = 0 |
| timer1 = root.after(0, callback, 42, 11) |
| root.update() # Process all pending events. |
| self.assertEqual(cbcount['count'], 53) |
| |
| # Cancel before called. |
| timer1 = root.after(1000, callback) |
| self.assertIn(timer1, root.tk.call('after', 'info')) |
| (script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1)) |
| root.after_cancel(timer1) # Cancel this event. |
| self.assertEqual(cbcount['count'], 53) |
| with self.assertRaises(tkinter.TclError): |
| root.tk.call(script) |
| |
| def test_after_idle(self): |
| root = self.root |
| cbcount = {'count': 0} |
| |
| def callback(start=0, step=1): |
| cbcount['count'] = start + step |
| |
| # Set up with callback with no args. |
| cbcount['count'] = 0 |
| idle1 = root.after_idle(callback) |
| self.assertIn(idle1, root.tk.call('after', 'info')) |
| (script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1)) |
| root.update_idletasks() # Process all pending events. |
| self.assertEqual(cbcount['count'], 1) |
| with self.assertRaises(tkinter.TclError): |
| root.tk.call(script) |
| |
| # Set up with callback with args. |
| cbcount['count'] = 0 |
| idle1 = root.after_idle(callback, 42, 11) |
| root.update_idletasks() # Process all pending events. |
| self.assertEqual(cbcount['count'], 53) |
| |
| # Cancel before called. |
| idle1 = root.after_idle(callback) |
| self.assertIn(idle1, root.tk.call('after', 'info')) |
| (script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1)) |
| root.after_cancel(idle1) # Cancel this event. |
| self.assertEqual(cbcount['count'], 53) |
| with self.assertRaises(tkinter.TclError): |
| root.tk.call(script) |
| |
| def test_after_cancel(self): |
| root = self.root |
| cbcount = {'count': 0} |
| |
| def callback(): |
| cbcount['count'] += 1 |
| |
| timer1 = root.after(5000, callback) |
| idle1 = root.after_idle(callback) |
| |
| # No value for id raises a ValueError. |
| with self.assertRaises(ValueError): |
| root.after_cancel(None) |
| |
| # Cancel timer event. |
| cbcount['count'] = 0 |
| (script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1)) |
| root.tk.call(script) |
| self.assertEqual(cbcount['count'], 1) |
| root.after_cancel(timer1) |
| with self.assertRaises(tkinter.TclError): |
| root.tk.call(script) |
| self.assertEqual(cbcount['count'], 1) |
| with self.assertRaises(tkinter.TclError): |
| root.tk.call('after', 'info', timer1) |
| |
| # Cancel same event - nothing happens. |
| root.after_cancel(timer1) |
| |
| # Cancel idle event. |
| cbcount['count'] = 0 |
| (script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1)) |
| root.tk.call(script) |
| self.assertEqual(cbcount['count'], 1) |
| root.after_cancel(idle1) |
| with self.assertRaises(tkinter.TclError): |
| root.tk.call(script) |
| self.assertEqual(cbcount['count'], 1) |
| with self.assertRaises(tkinter.TclError): |
| root.tk.call('after', 'info', idle1) |
| |
| |
| tests_gui = (MiscTest, ) |
| |
| if __name__ == "__main__": |
| run_unittest(*tests_gui) |