1
1
import unittest
2
2
import tkinter
3
3
from tkinter import ttk
4
+ from test import support
4
5
from test .support import requires , run_unittest
5
6
from tkinter .test .support import AbstractTkTest
6
7
7
8
requires ('gui' )
8
9
10
+ CLASS_NAMES = [
11
+ '.' , 'ComboboxPopdownFrame' , 'Heading' ,
12
+ 'Horizontal.TProgressbar' , 'Horizontal.TScale' , 'Item' , 'Sash' ,
13
+ 'TButton' , 'TCheckbutton' , 'TCombobox' , 'TEntry' ,
14
+ 'TLabelframe' , 'TLabelframe.Label' , 'TMenubutton' ,
15
+ 'TNotebook' , 'TNotebook.Tab' , 'Toolbutton' , 'TProgressbar' ,
16
+ 'TRadiobutton' , 'Treeview' , 'TScale' , 'TScrollbar' , 'TSpinbox' ,
17
+ 'Vertical.TProgressbar' , 'Vertical.TScale'
18
+ ]
19
+
9
20
class StyleTest (AbstractTkTest , unittest .TestCase ):
10
21
11
22
def setUp (self ):
@@ -23,11 +34,36 @@ def test_configure(self):
23
34
24
35
def test_map (self ):
25
36
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 )
37
+
38
+ # Single state
39
+ for states in ['active' ], [('active' ,)]:
40
+ with self .subTest (states = states ):
41
+ style .map ('TButton' , background = [(* states , 'white' )])
42
+ expected = [('active' , 'white' )]
43
+ self .assertEqual (style .map ('TButton' , 'background' ), expected )
44
+ m = style .map ('TButton' )
45
+ self .assertIsInstance (m , dict )
46
+ self .assertEqual (m ['background' ], expected )
47
+
48
+ # Multiple states
49
+ for states in ['pressed' , '!disabled' ], ['pressed !disabled' ], [('pressed' , '!disabled' )]:
50
+ with self .subTest (states = states ):
51
+ style .map ('TButton' , background = [(* states , 'black' )])
52
+ expected = [('pressed' , '!disabled' , 'black' )]
53
+ self .assertEqual (style .map ('TButton' , 'background' ), expected )
54
+ m = style .map ('TButton' )
55
+ self .assertIsInstance (m , dict )
56
+ self .assertEqual (m ['background' ], expected )
57
+
58
+ # Default state
59
+ for states in [], ['' ], [()]:
60
+ with self .subTest (states = states ):
61
+ style .map ('TButton' , background = [(* states , 'grey' )])
62
+ expected = [('grey' ,)]
63
+ self .assertEqual (style .map ('TButton' , 'background' ), expected )
64
+ m = style .map ('TButton' )
65
+ self .assertIsInstance (m , dict )
66
+ self .assertEqual (m ['background' ], expected )
31
67
32
68
33
69
def test_lookup (self ):
@@ -86,6 +122,50 @@ def test_theme_use(self):
86
122
self .style .theme_use (curr_theme )
87
123
88
124
125
+ def test_configure_custom_copy (self ):
126
+ style = self .style
127
+
128
+ curr_theme = self .style .theme_use ()
129
+ self .addCleanup (self .style .theme_use , curr_theme )
130
+ for theme in self .style .theme_names ():
131
+ self .style .theme_use (theme )
132
+ for name in CLASS_NAMES :
133
+ default = style .configure (name )
134
+ if not default :
135
+ continue
136
+ with self .subTest (theme = theme , name = name ):
137
+ if support .verbose >= 2 :
138
+ print ('configure' , theme , name , default )
139
+ newname = f'C.{ name } '
140
+ self .assertEqual (style .configure (newname ), None )
141
+ style .configure (newname , ** default )
142
+ self .assertEqual (style .configure (newname ), default )
143
+ for key , value in default .items ():
144
+ self .assertEqual (style .configure (newname , key ), value )
145
+
146
+
147
+ def test_map_custom_copy (self ):
148
+ style = self .style
149
+
150
+ curr_theme = self .style .theme_use ()
151
+ self .addCleanup (self .style .theme_use , curr_theme )
152
+ for theme in self .style .theme_names ():
153
+ self .style .theme_use (theme )
154
+ for name in CLASS_NAMES :
155
+ default = style .map (name )
156
+ if not default :
157
+ continue
158
+ with self .subTest (theme = theme , name = name ):
159
+ if support .verbose >= 2 :
160
+ print ('map' , theme , name , default )
161
+ newname = f'C.{ name } '
162
+ self .assertEqual (style .map (newname ), {})
163
+ style .map (newname , ** default )
164
+ self .assertEqual (style .map (newname ), default )
165
+ for key , value in default .items ():
166
+ self .assertEqual (style .map (newname , key ), value )
167
+
168
+
89
169
tests_gui = (StyleTest , )
90
170
91
171
if __name__ == "__main__" :
0 commit comments