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