| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- import unittest
- import tkinter
- from test import support
- from tkinter.test.support import AbstractTkTest
- support.requires('gui')
- class MiscTest(AbstractTkTest, unittest.TestCase):
- def test_repr(self):
- t = tkinter.Toplevel(self.root, name='top')
- f = tkinter.Frame(t, name='child')
- self.assertEqual(repr(f), '<tkinter.Frame object .top.child>')
- def test_generated_names(self):
- t = tkinter.Toplevel(self.root)
- f = tkinter.Frame(t)
- f2 = tkinter.Frame(t)
- b = tkinter.Button(f2)
- for name in str(b).split('.'):
- self.assertFalse(name.isidentifier(), msg=repr(name))
- def test_tk_setPalette(self):
- root = self.root
- root.tk_setPalette('black')
- self.assertEqual(root['background'], 'black')
- root.tk_setPalette('white')
- self.assertEqual(root['background'], 'white')
- self.assertRaisesRegex(tkinter.TclError,
- '^unknown color name "spam"$',
- root.tk_setPalette, 'spam')
- root.tk_setPalette(background='black')
- self.assertEqual(root['background'], 'black')
- root.tk_setPalette(background='blue', highlightColor='yellow')
- self.assertEqual(root['background'], 'blue')
- self.assertEqual(root['highlightcolor'], 'yellow')
- root.tk_setPalette(background='yellow', highlightColor='blue')
- self.assertEqual(root['background'], 'yellow')
- self.assertEqual(root['highlightcolor'], 'blue')
- self.assertRaisesRegex(tkinter.TclError,
- '^unknown color name "spam"$',
- root.tk_setPalette, background='spam')
- self.assertRaisesRegex(tkinter.TclError,
- '^must specify a background color$',
- root.tk_setPalette, spam='white')
- self.assertRaisesRegex(tkinter.TclError,
- '^must specify a background color$',
- root.tk_setPalette, highlightColor='blue')
- def test_after(self):
- root = self.root
- def callback(start=0, step=1):
- nonlocal count
- count = start + step
- # Without function, sleeps for ms.
- self.assertIsNone(root.after(1))
- # Set up with callback with no args.
- 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(count, 1)
- with self.assertRaises(tkinter.TclError):
- root.tk.call(script)
- # Set up with callback with args.
- count = 0
- timer1 = root.after(0, callback, 42, 11)
- root.update() # Process all pending events.
- self.assertEqual(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(count, 53)
- with self.assertRaises(tkinter.TclError):
- root.tk.call(script)
- def test_after_idle(self):
- root = self.root
- def callback(start=0, step=1):
- nonlocal count
- count = start + step
- # Set up with callback with no args.
- 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(count, 1)
- with self.assertRaises(tkinter.TclError):
- root.tk.call(script)
- # Set up with callback with args.
- count = 0
- idle1 = root.after_idle(callback, 42, 11)
- root.update_idletasks() # Process all pending events.
- self.assertEqual(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(count, 53)
- with self.assertRaises(tkinter.TclError):
- root.tk.call(script)
- def test_after_cancel(self):
- root = self.root
- def callback():
- nonlocal count
- 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.
- count = 0
- (script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1))
- root.tk.call(script)
- self.assertEqual(count, 1)
- root.after_cancel(timer1)
- with self.assertRaises(tkinter.TclError):
- root.tk.call(script)
- self.assertEqual(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.
- count = 0
- (script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1))
- root.tk.call(script)
- self.assertEqual(count, 1)
- root.after_cancel(idle1)
- with self.assertRaises(tkinter.TclError):
- root.tk.call(script)
- self.assertEqual(count, 1)
- with self.assertRaises(tkinter.TclError):
- root.tk.call('after', 'info', idle1)
- def test_clipboard(self):
- root = self.root
- root.clipboard_clear()
- root.clipboard_append('Ùñî')
- self.assertEqual(root.clipboard_get(), 'Ùñî')
- root.clipboard_append('çōđě')
- self.assertEqual(root.clipboard_get(), 'Ùñîçōđě')
- root.clipboard_clear()
- with self.assertRaises(tkinter.TclError):
- root.clipboard_get()
- def test_clipboard_astral(self):
- root = self.root
- root.clipboard_clear()
- root.clipboard_append('𝔘𝔫𝔦')
- self.assertEqual(root.clipboard_get(), '𝔘𝔫𝔦')
- root.clipboard_append('𝔠𝔬𝔡𝔢')
- self.assertEqual(root.clipboard_get(), '𝔘𝔫𝔦𝔠𝔬𝔡𝔢')
- root.clipboard_clear()
- with self.assertRaises(tkinter.TclError):
- root.clipboard_get()
- tests_gui = (MiscTest, )
- if __name__ == "__main__":
- support.run_unittest(*tests_gui)
|