14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest
24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport Tkinter
34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport ttk
44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test.test_support import requires, run_unittest
54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport support
74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaorequires('gui')
94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass StyleTest(unittest.TestCase):
114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def setUp(self):
134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.style = ttk.Style()
144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_configure(self):
174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style = self.style
184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style.configure('TButton', background='yellow')
194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(style.configure('TButton', 'background'),
204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            'yellow')
214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(isinstance(style.configure('TButton'), dict))
224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_map(self):
254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style = self.style
264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style.map('TButton', background=[('active', 'background', 'blue')])
274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(style.map('TButton', 'background'),
284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [('active', 'background', 'blue')])
294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(isinstance(style.map('TButton'), dict))
304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_lookup(self):
334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style = self.style
344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style.configure('TButton', background='yellow')
354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style.map('TButton', background=[('active', 'background', 'blue')])
364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(style.lookup('TButton', 'background'), 'yellow')
384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(style.lookup('TButton', 'background',
394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            ['active', 'background']), 'blue')
404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(style.lookup('TButton', 'optionnotdefined',
414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            default='iknewit'), 'iknewit')
424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_layout(self):
454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style = self.style
464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(Tkinter.TclError, style.layout, 'NotALayout')
474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        tv_style = style.layout('Treeview')
484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # "erase" Treeview layout
504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style.layout('Treeview', '')
514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(style.layout('Treeview'),
524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [('null', {'sticky': 'nswe'})]
534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        )
544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # restore layout
564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        style.layout('Treeview', tv_style)
574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertEqual(style.layout('Treeview'), tv_style)
584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # should return a list
604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertTrue(isinstance(style.layout('TButton'), list))
614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        # correct layout, but "option" doesn't exist as option
634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(Tkinter.TclError, style.layout, 'Treeview',
644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            [('name', {'option': 'inexistent'})])
654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    def test_theme_use(self):
684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertRaises(Tkinter.TclError, self.style.theme_use,
694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            'nonexistingname')
704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        curr_theme = self.style.theme_use()
724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        new_theme = None
734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        for theme in self.style.theme_names():
744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            if theme != curr_theme:
754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                new_theme = theme
764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                self.style.theme_use(theme)
774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao                break
784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        else:
794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            # just one theme available, can't go on with tests
804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao            return
814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(curr_theme == new_theme)
834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.assertFalse(new_theme != self.style.theme_use())
844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao        self.style.theme_use(curr_theme)
864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests_gui = (StyleTest, )
894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao
904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__":
914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao    run_unittest(*tests_gui)
92