Retrieval-based-Voice-Conversion-WebUI
/
runtime
/Lib
/site-packages
/tkinter
/test
/test_ttk
/test_style.py
import unittest | |
import sys | |
import tkinter | |
from tkinter import ttk | |
from test import support | |
from test.support import requires, run_unittest | |
from tkinter.test.support import AbstractTkTest | |
requires('gui') | |
CLASS_NAMES = [ | |
'.', 'ComboboxPopdownFrame', 'Heading', | |
'Horizontal.TProgressbar', 'Horizontal.TScale', 'Item', 'Sash', | |
'TButton', 'TCheckbutton', 'TCombobox', 'TEntry', | |
'TLabelframe', 'TLabelframe.Label', 'TMenubutton', | |
'TNotebook', 'TNotebook.Tab', 'Toolbutton', 'TProgressbar', | |
'TRadiobutton', 'Treeview', 'TScale', 'TScrollbar', 'TSpinbox', | |
'Vertical.TProgressbar', 'Vertical.TScale' | |
] | |
class StyleTest(AbstractTkTest, unittest.TestCase): | |
def setUp(self): | |
super().setUp() | |
self.style = ttk.Style(self.root) | |
def test_configure(self): | |
style = self.style | |
style.configure('TButton', background='yellow') | |
self.assertEqual(style.configure('TButton', 'background'), | |
'yellow') | |
self.assertIsInstance(style.configure('TButton'), dict) | |
def test_map(self): | |
style = self.style | |
# Single state | |
for states in ['active'], [('active',)]: | |
with self.subTest(states=states): | |
style.map('TButton', background=[(*states, 'white')]) | |
expected = [('active', 'white')] | |
self.assertEqual(style.map('TButton', 'background'), expected) | |
m = style.map('TButton') | |
self.assertIsInstance(m, dict) | |
self.assertEqual(m['background'], expected) | |
# Multiple states | |
for states in ['pressed', '!disabled'], ['pressed !disabled'], [('pressed', '!disabled')]: | |
with self.subTest(states=states): | |
style.map('TButton', background=[(*states, 'black')]) | |
expected = [('pressed', '!disabled', 'black')] | |
self.assertEqual(style.map('TButton', 'background'), expected) | |
m = style.map('TButton') | |
self.assertIsInstance(m, dict) | |
self.assertEqual(m['background'], expected) | |
# Default state | |
for states in [], [''], [()]: | |
with self.subTest(states=states): | |
style.map('TButton', background=[(*states, 'grey')]) | |
expected = [('grey',)] | |
self.assertEqual(style.map('TButton', 'background'), expected) | |
m = style.map('TButton') | |
self.assertIsInstance(m, dict) | |
self.assertEqual(m['background'], expected) | |
def test_lookup(self): | |
style = self.style | |
style.configure('TButton', background='yellow') | |
style.map('TButton', background=[('active', 'background', 'blue')]) | |
self.assertEqual(style.lookup('TButton', 'background'), 'yellow') | |
self.assertEqual(style.lookup('TButton', 'background', | |
['active', 'background']), 'blue') | |
self.assertEqual(style.lookup('TButton', 'optionnotdefined', | |
default='iknewit'), 'iknewit') | |
def test_layout(self): | |
style = self.style | |
self.assertRaises(tkinter.TclError, style.layout, 'NotALayout') | |
tv_style = style.layout('Treeview') | |
# "erase" Treeview layout | |
style.layout('Treeview', '') | |
self.assertEqual(style.layout('Treeview'), | |
[('null', {'sticky': 'nswe'})] | |
) | |
# restore layout | |
style.layout('Treeview', tv_style) | |
self.assertEqual(style.layout('Treeview'), tv_style) | |
# should return a list | |
self.assertIsInstance(style.layout('TButton'), list) | |
# correct layout, but "option" doesn't exist as option | |
self.assertRaises(tkinter.TclError, style.layout, 'Treeview', | |
[('name', {'option': 'inexistent'})]) | |
def test_theme_use(self): | |
self.assertRaises(tkinter.TclError, self.style.theme_use, | |
'nonexistingname') | |
curr_theme = self.style.theme_use() | |
new_theme = None | |
for theme in self.style.theme_names(): | |
if theme != curr_theme: | |
new_theme = theme | |
self.style.theme_use(theme) | |
break | |
else: | |
# just one theme available, can't go on with tests | |
return | |
self.assertFalse(curr_theme == new_theme) | |
self.assertFalse(new_theme != self.style.theme_use()) | |
self.style.theme_use(curr_theme) | |
def test_configure_custom_copy(self): | |
style = self.style | |
curr_theme = self.style.theme_use() | |
self.addCleanup(self.style.theme_use, curr_theme) | |
for theme in self.style.theme_names(): | |
self.style.theme_use(theme) | |
for name in CLASS_NAMES: | |
default = style.configure(name) | |
if not default: | |
continue | |
with self.subTest(theme=theme, name=name): | |
if support.verbose >= 2: | |
print('configure', theme, name, default) | |
if (theme in ('vista', 'xpnative') | |
and sys.getwindowsversion()[:2] == (6, 1)): | |
# Fails on the Windows 7 buildbot | |
continue | |
newname = f'C.{name}' | |
self.assertEqual(style.configure(newname), None) | |
style.configure(newname, **default) | |
self.assertEqual(style.configure(newname), default) | |
for key, value in default.items(): | |
self.assertEqual(style.configure(newname, key), value) | |
def test_map_custom_copy(self): | |
style = self.style | |
curr_theme = self.style.theme_use() | |
self.addCleanup(self.style.theme_use, curr_theme) | |
for theme in self.style.theme_names(): | |
self.style.theme_use(theme) | |
for name in CLASS_NAMES: | |
default = style.map(name) | |
if not default: | |
continue | |
with self.subTest(theme=theme, name=name): | |
if support.verbose >= 2: | |
print('map', theme, name, default) | |
if (theme in ('vista', 'xpnative') | |
and sys.getwindowsversion()[:2] == (6, 1)): | |
# Fails on the Windows 7 buildbot | |
continue | |
newname = f'C.{name}' | |
self.assertEqual(style.map(newname), {}) | |
style.map(newname, **default) | |
self.assertEqual(style.map(newname), default) | |
for key, value in default.items(): | |
self.assertEqual(style.map(newname, key), value) | |
tests_gui = (StyleTest, ) | |
if __name__ == "__main__": | |
run_unittest(*tests_gui) | |