1import unittest
2import Tkinter
3import ttk
4from test.test_support import requires, run_unittest
5
6import support
7
8requires('gui')
9
10class StyleTest(unittest.TestCase):
11
12    def setUp(self):
13        self.style = ttk.Style()
14
15
16    def test_configure(self):
17        style = self.style
18        style.configure('TButton', background='yellow')
19        self.assertEqual(style.configure('TButton', 'background'),
20            'yellow')
21        self.assertTrue(isinstance(style.configure('TButton'), dict))
22
23
24    def test_map(self):
25        style = self.style
26        style.map('TButton', background=[('active', 'background', 'blue')])
27        self.assertEqual(style.map('TButton', 'background'),
28            [('active', 'background', 'blue')])
29        self.assertTrue(isinstance(style.map('TButton'), dict))
30
31
32    def test_lookup(self):
33        style = self.style
34        style.configure('TButton', background='yellow')
35        style.map('TButton', background=[('active', 'background', 'blue')])
36
37        self.assertEqual(style.lookup('TButton', 'background'), 'yellow')
38        self.assertEqual(style.lookup('TButton', 'background',
39            ['active', 'background']), 'blue')
40        self.assertEqual(style.lookup('TButton', 'optionnotdefined',
41            default='iknewit'), 'iknewit')
42
43
44    def test_layout(self):
45        style = self.style
46        self.assertRaises(Tkinter.TclError, style.layout, 'NotALayout')
47        tv_style = style.layout('Treeview')
48
49        # "erase" Treeview layout
50        style.layout('Treeview', '')
51        self.assertEqual(style.layout('Treeview'),
52            [('null', {'sticky': 'nswe'})]
53        )
54
55        # restore layout
56        style.layout('Treeview', tv_style)
57        self.assertEqual(style.layout('Treeview'), tv_style)
58
59        # should return a list
60        self.assertTrue(isinstance(style.layout('TButton'), list))
61
62        # correct layout, but "option" doesn't exist as option
63        self.assertRaises(Tkinter.TclError, style.layout, 'Treeview',
64            [('name', {'option': 'inexistent'})])
65
66
67    def test_theme_use(self):
68        self.assertRaises(Tkinter.TclError, self.style.theme_use,
69            'nonexistingname')
70
71        curr_theme = self.style.theme_use()
72        new_theme = None
73        for theme in self.style.theme_names():
74            if theme != curr_theme:
75                new_theme = theme
76                self.style.theme_use(theme)
77                break
78        else:
79            # just one theme available, can't go on with tests
80            return
81
82        self.assertFalse(curr_theme == new_theme)
83        self.assertFalse(new_theme != self.style.theme_use())
84
85        self.style.theme_use(curr_theme)
86
87
88tests_gui = (StyleTest, )
89
90if __name__ == "__main__":
91    run_unittest(*tests_gui)
92