Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
30d00ef9
Commit
30d00ef9
authored
Nov 02, 2013
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #19085: Added basic tests for all tkinter widget options.
parent
9a2b3af6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
1922 additions
and
25 deletions
+1922
-25
Lib/tkinter/test/support.py
Lib/tkinter/test/support.py
+39
-0
Lib/tkinter/test/test_tkinter/test_widgets.py
Lib/tkinter/test/test_tkinter/test_widgets.py
+919
-0
Lib/tkinter/test/test_ttk/test_widgets.py
Lib/tkinter/test/test_ttk/test_widgets.py
+472
-25
Lib/tkinter/test/widget_tests.py
Lib/tkinter/test/widget_tests.py
+487
-0
Misc/NEWS
Misc/NEWS
+5
-0
No files found.
Lib/tkinter/test/support.py
View file @
30d00ef9
...
...
@@ -77,3 +77,42 @@ def simulate_mouse_click(widget, x, y):
widget
.
event_generate
(
'<Motion>'
,
x
=
x
,
y
=
y
)
widget
.
event_generate
(
'<ButtonPress-1>'
,
x
=
x
,
y
=
y
)
widget
.
event_generate
(
'<ButtonRelease-1>'
,
x
=
x
,
y
=
y
)
import
_tkinter
tcl_version
=
tuple
(
map
(
int
,
_tkinter
.
TCL_VERSION
.
split
(
'.'
)))
def
requires_tcl
(
*
version
):
return
unittest
.
skipUnless
(
tcl_version
>=
version
,
'requires Tcl version >= '
+
'.'
.
join
(
map
(
str
,
version
)))
units
=
{
'c'
:
72
/
2.54
,
# centimeters
'i'
:
72
,
# inches
'm'
:
72
/
25.4
,
# millimeters
'p'
:
1
,
# points
}
def
pixels_conv
(
value
):
return
float
(
value
[:
-
1
])
*
units
[
value
[
-
1
:]]
def
tcl_obj_eq
(
actual
,
expected
):
if
actual
==
expected
:
return
True
if
isinstance
(
actual
,
_tkinter
.
Tcl_Obj
):
if
isinstance
(
expected
,
str
):
return
str
(
actual
)
==
expected
if
isinstance
(
actual
,
tuple
):
if
isinstance
(
expected
,
tuple
):
return
(
len
(
actual
)
==
len
(
expected
)
and
all
(
tcl_obj_eq
(
act
,
exp
)
for
act
,
exp
in
zip
(
actual
,
expected
)))
return
False
def
widget_eq
(
actual
,
expected
):
if
actual
==
expected
:
return
True
if
isinstance
(
actual
,
(
str
,
tkinter
.
Widget
)):
if
isinstance
(
expected
,
(
str
,
tkinter
.
Widget
)):
return
str
(
actual
)
==
str
(
expected
)
return
False
Lib/tkinter/test/test_tkinter/test_widgets.py
0 → 100644
View file @
30d00ef9
import
unittest
import
tkinter
import
os
from
test.support
import
requires
from
tkinter.test.support
import
tcl_version
,
requires_tcl
,
widget_eq
from
tkinter.test.widget_tests
import
(
add_standard_options
,
noconv
,
AbstractWidgetTest
,
StandardOptionsTests
,
IntegerSizeTests
,
PixelSizeTests
)
requires
(
'gui'
)
def
float_round
(
x
):
return
float
(
round
(
x
))
class
AbstractToplevelTest
(
AbstractWidgetTest
,
PixelSizeTests
):
_conv_pad_pixels
=
noconv
def
test_class
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'class'
],
widget
.
__class__
.
__name__
.
title
())
self
.
checkInvalidParam
(
widget
,
'class'
,
'Foo'
,
errmsg
=
"can't modify -class option after widget is created"
)
widget2
=
self
.
create
(
class_
=
'Foo'
)
self
.
assertEqual
(
widget2
[
'class'
],
'Foo'
)
def
test_colormap
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'colormap'
],
''
)
self
.
checkInvalidParam
(
widget
,
'colormap'
,
'new'
,
errmsg
=
"can't modify -colormap option after widget is created"
)
widget2
=
self
.
create
(
colormap
=
'new'
)
self
.
assertEqual
(
widget2
[
'colormap'
],
'new'
)
def
test_container
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'container'
],
0
if
self
.
wantobjects
else
'0'
)
self
.
checkInvalidParam
(
widget
,
'container'
,
1
,
errmsg
=
"can't modify -container option after widget is created"
)
widget2
=
self
.
create
(
container
=
True
)
self
.
assertEqual
(
widget2
[
'container'
],
1
if
self
.
wantobjects
else
'1'
)
def
test_visual
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'visual'
],
''
)
self
.
checkInvalidParam
(
widget
,
'visual'
,
'default'
,
errmsg
=
"can't modify -visual option after widget is created"
)
widget2
=
self
.
create
(
visual
=
'default'
)
self
.
assertEqual
(
widget2
[
'visual'
],
'default'
)
@
add_standard_options
(
StandardOptionsTests
)
class
ToplevelTest
(
AbstractToplevelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'borderwidth'
,
'class'
,
'colormap'
,
'container'
,
'cursor'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'menu'
,
'padx'
,
'pady'
,
'relief'
,
'screen'
,
'takefocus'
,
'use'
,
'visual'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Toplevel
(
self
.
root
,
**
kwargs
)
def
test_menu
(
self
):
widget
=
self
.
create
()
menu
=
tkinter
.
Menu
(
self
.
root
)
self
.
checkParam
(
widget
,
'menu'
,
menu
,
eq
=
widget_eq
)
self
.
checkParam
(
widget
,
'menu'
,
''
)
def
test_screen
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'screen'
],
''
)
display
=
os
.
environ
[
'DISPLAY'
]
self
.
checkInvalidParam
(
widget
,
'screen'
,
display
,
errmsg
=
"can't modify -screen option after widget is created"
)
widget2
=
self
.
create
(
screen
=
display
)
self
.
assertEqual
(
widget2
[
'screen'
],
display
)
def
test_use
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'use'
],
''
)
widget1
=
self
.
create
(
container
=
True
)
self
.
assertEqual
(
widget1
[
'use'
],
''
)
self
.
checkInvalidParam
(
widget1
,
'use'
,
'0x44022'
,
errmsg
=
"can't modify -use option after widget is created"
)
wid
=
hex
(
widget1
.
winfo_id
())
widget2
=
self
.
create
(
use
=
wid
)
self
.
assertEqual
(
widget2
[
'use'
],
wid
)
@
add_standard_options
(
StandardOptionsTests
)
class
FrameTest
(
AbstractToplevelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'borderwidth'
,
'class'
,
'colormap'
,
'container'
,
'cursor'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'relief'
,
'takefocus'
,
'visual'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Frame
(
self
.
root
,
**
kwargs
)
@
add_standard_options
(
StandardOptionsTests
)
class
LabelFrameTest
(
AbstractToplevelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'borderwidth'
,
'class'
,
'colormap'
,
'container'
,
'cursor'
,
'font'
,
'foreground'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'labelanchor'
,
'labelwidget'
,
'padx'
,
'pady'
,
'relief'
,
'takefocus'
,
'text'
,
'visual'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
LabelFrame
(
self
.
root
,
**
kwargs
)
def
test_labelanchor
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'labelanchor'
,
'e'
,
'en'
,
'es'
,
'n'
,
'ne'
,
'nw'
,
's'
,
'se'
,
'sw'
,
'w'
,
'wn'
,
'ws'
)
self
.
checkInvalidParam
(
widget
,
'labelanchor'
,
'center'
)
def
test_labelwidget
(
self
):
widget
=
self
.
create
()
label
=
tkinter
.
Label
(
self
.
root
,
text
=
'Mupp'
,
name
=
'foo'
)
self
.
checkParam
(
widget
,
'labelwidget'
,
label
,
expected
=
'.foo'
)
label
.
destroy
()
class
AbstractLabelTest
(
AbstractWidgetTest
,
IntegerSizeTests
):
_conv_pixels
=
noconv
def
test_highlightthickness
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'highlightthickness'
,
0
,
1.3
,
2.6
,
6
,
-
2
,
'10p'
)
@
add_standard_options
(
StandardOptionsTests
)
class
LabelTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'activeforeground'
,
'anchor'
,
'background'
,
'bitmap'
,
'borderwidth'
,
'compound'
,
'cursor'
,
'disabledforeground'
,
'font'
,
'foreground'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'image'
,
'justify'
,
'padx'
,
'pady'
,
'relief'
,
'state'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'width'
,
'wraplength'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Label
(
self
.
root
,
**
kwargs
)
@
add_standard_options
(
StandardOptionsTests
)
class
ButtonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'activeforeground'
,
'anchor'
,
'background'
,
'bitmap'
,
'borderwidth'
,
'command'
,
'compound'
,
'cursor'
,
'default'
,
'disabledforeground'
,
'font'
,
'foreground'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'image'
,
'justify'
,
'overrelief'
,
'padx'
,
'pady'
,
'relief'
,
'repeatdelay'
,
'repeatinterval'
,
'state'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'width'
,
'wraplength'
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Button
(
self
.
root
,
**
kwargs
)
def
test_default
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'default'
,
'active'
,
'disabled'
,
'normal'
)
@
add_standard_options
(
StandardOptionsTests
)
class
CheckbuttonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'activeforeground'
,
'anchor'
,
'background'
,
'bitmap'
,
'borderwidth'
,
'command'
,
'compound'
,
'cursor'
,
'disabledforeground'
,
'font'
,
'foreground'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'image'
,
'indicatoron'
,
'justify'
,
'offrelief'
,
'offvalue'
,
'onvalue'
,
'overrelief'
,
'padx'
,
'pady'
,
'relief'
,
'selectcolor'
,
'selectimage'
,
'state'
,
'takefocus'
,
'text'
,
'textvariable'
,
'tristateimage'
,
'tristatevalue'
,
'underline'
,
'variable'
,
'width'
,
'wraplength'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Checkbutton
(
self
.
root
,
**
kwargs
)
def
test_offvalue
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'offvalue'
,
1
,
2.3
,
''
,
'any string'
)
def
test_onvalue
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'onvalue'
,
1
,
2.3
,
''
,
'any string'
)
@
add_standard_options
(
StandardOptionsTests
)
class
RadiobuttonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'activeforeground'
,
'anchor'
,
'background'
,
'bitmap'
,
'borderwidth'
,
'command'
,
'compound'
,
'cursor'
,
'disabledforeground'
,
'font'
,
'foreground'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'image'
,
'indicatoron'
,
'justify'
,
'offrelief'
,
'overrelief'
,
'padx'
,
'pady'
,
'relief'
,
'selectcolor'
,
'selectimage'
,
'state'
,
'takefocus'
,
'text'
,
'textvariable'
,
'tristateimage'
,
'tristatevalue'
,
'underline'
,
'value'
,
'variable'
,
'width'
,
'wraplength'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Radiobutton
(
self
.
root
,
**
kwargs
)
def
test_value
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'value'
,
1
,
2.3
,
''
,
'any string'
)
@
add_standard_options
(
StandardOptionsTests
)
class
MenubuttonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'activeforeground'
,
'anchor'
,
'background'
,
'bitmap'
,
'borderwidth'
,
'compound'
,
'cursor'
,
'direction'
,
'disabledforeground'
,
'font'
,
'foreground'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'image'
,
'indicatoron'
,
'justify'
,
'menu'
,
'padx'
,
'pady'
,
'relief'
,
'state'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'width'
,
'wraplength'
,
)
_conv_pixels
=
AbstractWidgetTest
.
_conv_pixels
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Menubutton
(
self
.
root
,
**
kwargs
)
def
test_direction
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'direction'
,
'above'
,
'below'
,
'flush'
,
'left'
,
'right'
)
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'height'
,
100
,
-
100
,
0
,
conv
=
str
)
test_highlightthickness
=
StandardOptionsTests
.
test_highlightthickness
def
test_image
(
self
):
widget
=
self
.
create
()
image
=
tkinter
.
PhotoImage
(
'image1'
)
self
.
checkParam
(
widget
,
'image'
,
image
,
conv
=
str
)
errmsg
=
'image "spam" doesn
\
'
t exist'
with
self
.
assertRaises
(
tkinter
.
TclError
)
as
cm
:
widget
[
'image'
]
=
'spam'
if
errmsg
is
not
None
:
self
.
assertEqual
(
str
(
cm
.
exception
),
errmsg
)
with
self
.
assertRaises
(
tkinter
.
TclError
)
as
cm
:
widget
.
configure
({
'image'
:
'spam'
})
if
errmsg
is
not
None
:
self
.
assertEqual
(
str
(
cm
.
exception
),
errmsg
)
def
test_menu
(
self
):
widget
=
self
.
create
()
menu
=
tkinter
.
Menu
(
widget
,
name
=
'menu'
)
self
.
checkParam
(
widget
,
'menu'
,
menu
,
eq
=
widget_eq
)
menu
.
destroy
()
def
test_padx
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'padx'
,
3
,
4.4
,
5.6
,
'12m'
)
self
.
checkParam
(
widget
,
'padx'
,
-
2
,
expected
=
0
)
def
test_pady
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'pady'
,
3
,
4.4
,
5.6
,
'12m'
)
self
.
checkParam
(
widget
,
'pady'
,
-
2
,
expected
=
0
)
def
test_width
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'width'
,
402
,
-
402
,
0
,
conv
=
str
)
class
OptionMenuTest
(
MenubuttonTest
,
unittest
.
TestCase
):
def
_create
(
self
,
default
=
'b'
,
values
=
(
'a'
,
'b'
,
'c'
),
**
kwargs
):
return
tkinter
.
OptionMenu
(
self
.
root
,
None
,
default
,
*
values
,
**
kwargs
)
@
add_standard_options
(
IntegerSizeTests
,
StandardOptionsTests
)
class
EntryTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'borderwidth'
,
'cursor'
,
'disabledbackground'
,
'disabledforeground'
,
'exportselection'
,
'font'
,
'foreground'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'insertbackground'
,
'insertborderwidth'
,
'insertofftime'
,
'insertontime'
,
'insertwidth'
,
'invalidcommand'
,
'justify'
,
'readonlybackground'
,
'relief'
,
'selectbackground'
,
'selectborderwidth'
,
'selectforeground'
,
'show'
,
'state'
,
'takefocus'
,
'textvariable'
,
'validate'
,
'validatecommand'
,
'width'
,
'xscrollcommand'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Entry
(
self
.
root
,
**
kwargs
)
def
test_disabledbackground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'disabledbackground'
)
def
test_insertborderwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'insertborderwidth'
,
0
,
1.3
,
-
2
)
self
.
checkParam
(
widget
,
'insertborderwidth'
,
2
,
expected
=
1
)
self
.
checkParam
(
widget
,
'insertborderwidth'
,
'10p'
,
expected
=
1
)
def
test_insertwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'insertwidth'
,
1.3
,
3.6
,
'10p'
)
if
tcl_version
[:
2
]
==
(
8
,
5
):
self
.
checkParam
(
widget
,
'insertwidth'
,
0.9
,
expected
=
2
)
else
:
self
.
checkParam
(
widget
,
'insertwidth'
,
0.9
,
expected
=
1
)
self
.
checkParam
(
widget
,
'insertwidth'
,
0.1
,
expected
=
2
)
self
.
checkParam
(
widget
,
'insertwidth'
,
-
2
,
expected
=
2
)
def
test_invalidcommand
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'invalidcommand'
)
self
.
checkCommandParam
(
widget
,
'invcmd'
)
def
test_readonlybackground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'readonlybackground'
)
def
test_show
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'show'
,
'*'
)
self
.
checkParam
(
widget
,
'show'
,
''
)
self
.
checkParam
(
widget
,
'show'
,
' '
)
def
test_state
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'state'
,
'disabled'
,
'normal'
,
'readonly'
)
def
test_validate
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'validate'
,
'all'
,
'key'
,
'focus'
,
'focusin'
,
'focusout'
,
'none'
)
def
test_validatecommand
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'validatecommand'
)
self
.
checkCommandParam
(
widget
,
'vcmd'
)
@
add_standard_options
(
StandardOptionsTests
)
class
SpinboxTest
(
EntryTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'background'
,
'borderwidth'
,
'buttonbackground'
,
'buttoncursor'
,
'buttondownrelief'
,
'buttonuprelief'
,
'command'
,
'cursor'
,
'disabledbackground'
,
'disabledforeground'
,
'exportselection'
,
'font'
,
'foreground'
,
'format'
,
'from'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'increment'
,
'insertbackground'
,
'insertborderwidth'
,
'insertofftime'
,
'insertontime'
,
'insertwidth'
,
'invalidcommand'
,
'justify'
,
'relief'
,
'readonlybackground'
,
'repeatdelay'
,
'repeatinterval'
,
'selectbackground'
,
'selectborderwidth'
,
'selectforeground'
,
'state'
,
'takefocus'
,
'textvariable'
,
'to'
,
'validate'
,
'validatecommand'
,
'values'
,
'width'
,
'wrap'
,
'xscrollcommand'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Spinbox
(
self
.
root
,
**
kwargs
)
test_show
=
None
def
test_buttonbackground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'buttonbackground'
)
def
test_buttoncursor
(
self
):
widget
=
self
.
create
()
self
.
checkCursorParam
(
widget
,
'buttoncursor'
)
def
test_buttondownrelief
(
self
):
widget
=
self
.
create
()
self
.
checkReliefParam
(
widget
,
'buttondownrelief'
)
def
test_buttonuprelief
(
self
):
widget
=
self
.
create
()
self
.
checkReliefParam
(
widget
,
'buttonuprelief'
)
def
test_format
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'format'
,
'%2f'
)
self
.
checkParam
(
widget
,
'format'
,
'%2.2f'
)
self
.
checkParam
(
widget
,
'format'
,
'%.2f'
)
self
.
checkParam
(
widget
,
'format'
,
'%2.f'
)
self
.
checkInvalidParam
(
widget
,
'format'
,
'%2e-1f'
)
self
.
checkInvalidParam
(
widget
,
'format'
,
'2.2'
)
self
.
checkInvalidParam
(
widget
,
'format'
,
'%2.-2f'
)
self
.
checkParam
(
widget
,
'format'
,
'%-2.02f'
)
self
.
checkParam
(
widget
,
'format'
,
'% 2.02f'
)
self
.
checkParam
(
widget
,
'format'
,
'% -2.200f'
)
self
.
checkParam
(
widget
,
'format'
,
'%09.200f'
)
self
.
checkInvalidParam
(
widget
,
'format'
,
'%d'
)
def
test_from
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'to'
,
100.0
)
self
.
checkFloatParam
(
widget
,
'from'
,
-
10
,
10.2
,
11.7
)
self
.
checkInvalidParam
(
widget
,
'from'
,
200
,
errmsg
=
'-to value must be greater than -from value'
)
def
test_increment
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'increment'
,
-
1
,
1
,
10.2
,
12.8
,
0
)
def
test_to
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'from'
,
-
100.0
)
self
.
checkFloatParam
(
widget
,
'to'
,
-
10
,
10.2
,
11.7
)
self
.
checkInvalidParam
(
widget
,
'to'
,
-
200
,
errmsg
=
'-to value must be greater than -from value'
)
def
test_values
(
self
):
# XXX
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'values'
],
''
)
self
.
checkParam
(
widget
,
'values'
,
'mon tue wed thur'
)
self
.
checkParam
(
widget
,
'values'
,
(
'mon'
,
'tue'
,
'wed'
,
'thur'
),
expected
=
'mon tue wed thur'
)
self
.
checkParam
(
widget
,
'values'
,
(
42
,
3.14
,
''
,
'any string'
),
expected
=
'42 3.14 {} {any string}'
)
self
.
checkParam
(
widget
,
'values'
,
''
)
def
test_wrap
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'wrap'
)
@
add_standard_options
(
StandardOptionsTests
)
class
TextTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'autoseparators'
,
'background'
,
'blockcursor'
,
'borderwidth'
,
'cursor'
,
'endline'
,
'exportselection'
,
'font'
,
'foreground'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'inactiveselectbackground'
,
'insertbackground'
,
'insertborderwidth'
,
'insertofftime'
,
'insertontime'
,
'insertunfocussed'
,
'insertwidth'
,
'maxundo'
,
'padx'
,
'pady'
,
'relief'
,
'selectbackground'
,
'selectborderwidth'
,
'selectforeground'
,
'setgrid'
,
'spacing1'
,
'spacing2'
,
'spacing3'
,
'startline'
,
'state'
,
'tabs'
,
'tabstyle'
,
'takefocus'
,
'undo'
,
'width'
,
'wrap'
,
'xscrollcommand'
,
'yscrollcommand'
,
)
if
tcl_version
<
(
8
,
5
):
wantobjects
=
False
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Text
(
self
.
root
,
**
kwargs
)
def
test_autoseparators
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'autoseparators'
)
@
requires_tcl
(
8
,
5
)
def
test_blockcursor
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'blockcursor'
)
@
requires_tcl
(
8
,
5
)
def
test_endline
(
self
):
widget
=
self
.
create
()
text
=
'
\
n
'
.
join
(
'Line %d'
for
i
in
range
(
100
))
widget
.
insert
(
'end'
,
text
)
self
.
checkParam
(
widget
,
'endline'
,
200
,
expected
=
''
)
self
.
checkParam
(
widget
,
'endline'
,
-
10
,
expected
=
''
)
self
.
checkInvalidParam
(
widget
,
'endline'
,
'spam'
,
errmsg
=
'expected integer but got "spam"'
)
self
.
checkParam
(
widget
,
'endline'
,
50
)
self
.
checkParam
(
widget
,
'startline'
,
15
)
self
.
checkInvalidParam
(
widget
,
'endline'
,
10
,
errmsg
=
'-startline must be less than or equal to -endline'
)
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'height'
,
100
,
101.2
,
102.6
,
'3c'
)
self
.
checkParam
(
widget
,
'height'
,
-
100
,
expected
=
1
)
self
.
checkParam
(
widget
,
'height'
,
0
,
expected
=
1
)
def
test_maxundo
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'maxundo'
,
0
,
5
,
-
1
)
@
requires_tcl
(
8
,
5
)
def
test_inactiveselectbackground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'inactiveselectbackground'
)
@
requires_tcl
(
8
,
6
)
def
test_insertunfocussed
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'insertunfocussed'
,
'hollow'
,
'none'
,
'solid'
)
def
test_selectborderwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'selectborderwidth'
,
1.3
,
2.6
,
-
2
,
'10p'
,
conv
=
False
,
keep_orig
=
tcl_version
>=
(
8
,
5
))
def
test_spacing1
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'spacing1'
,
20
,
21.4
,
22.6
,
'0.5c'
)
self
.
checkParam
(
widget
,
'spacing1'
,
-
5
,
expected
=
0
)
def
test_spacing2
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'spacing2'
,
5
,
6.4
,
7.6
,
'0.1c'
)
self
.
checkParam
(
widget
,
'spacing2'
,
-
1
,
expected
=
0
)
def
test_spacing3
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'spacing3'
,
20
,
21.4
,
22.6
,
'0.5c'
)
self
.
checkParam
(
widget
,
'spacing3'
,
-
10
,
expected
=
0
)
@
requires_tcl
(
8
,
5
)
def
test_startline
(
self
):
widget
=
self
.
create
()
text
=
'
\
n
'
.
join
(
'Line %d'
for
i
in
range
(
100
))
widget
.
insert
(
'end'
,
text
)
self
.
checkParam
(
widget
,
'startline'
,
200
,
expected
=
''
)
self
.
checkParam
(
widget
,
'startline'
,
-
10
,
expected
=
''
)
self
.
checkInvalidParam
(
widget
,
'startline'
,
'spam'
,
errmsg
=
'expected integer but got "spam"'
)
self
.
checkParam
(
widget
,
'startline'
,
10
)
self
.
checkParam
(
widget
,
'endline'
,
50
)
self
.
checkInvalidParam
(
widget
,
'startline'
,
70
,
errmsg
=
'-startline must be less than or equal to -endline'
)
def
test_state
(
self
):
widget
=
self
.
create
()
if
tcl_version
<
(
8
,
5
):
self
.
checkParams
(
widget
,
'state'
,
'disabled'
,
'normal'
)
else
:
self
.
checkEnumParam
(
widget
,
'state'
,
'disabled'
,
'normal'
)
def
test_tabs
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'tabs'
,
(
10.2
,
20.7
,
'1i'
,
'2i'
))
self
.
checkParam
(
widget
,
'tabs'
,
'10.2 20.7 1i 2i'
,
expected
=
(
'10.2'
,
'20.7'
,
'1i'
,
'2i'
))
self
.
checkParam
(
widget
,
'tabs'
,
'2c left 4c 6c center'
,
expected
=
(
'2c'
,
'left'
,
'4c'
,
'6c'
,
'center'
))
self
.
checkInvalidParam
(
widget
,
'tabs'
,
'spam'
,
errmsg
=
'bad screen distance "spam"'
,
keep_orig
=
tcl_version
>=
(
8
,
5
))
@
requires_tcl
(
8
,
5
)
def
test_tabstyle
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'tabstyle'
,
'tabular'
,
'wordprocessor'
)
def
test_undo
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'undo'
)
def
test_width
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'width'
,
402
)
self
.
checkParam
(
widget
,
'width'
,
-
402
,
expected
=
1
)
self
.
checkParam
(
widget
,
'width'
,
0
,
expected
=
1
)
def
test_wrap
(
self
):
widget
=
self
.
create
()
if
tcl_version
<
(
8
,
5
):
self
.
checkParams
(
widget
,
'wrap'
,
'char'
,
'none'
,
'word'
)
else
:
self
.
checkEnumParam
(
widget
,
'wrap'
,
'char'
,
'none'
,
'word'
)
@
add_standard_options
(
PixelSizeTests
,
StandardOptionsTests
)
class
CanvasTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'borderwidth'
,
'closeenough'
,
'confine'
,
'cursor'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'insertbackground'
,
'insertborderwidth'
,
'insertofftime'
,
'insertontime'
,
'insertwidth'
,
'relief'
,
'scrollregion'
,
'selectbackground'
,
'selectborderwidth'
,
'selectforeground'
,
'state'
,
'takefocus'
,
'xscrollcommand'
,
'xscrollincrement'
,
'yscrollcommand'
,
'yscrollincrement'
,
'width'
,
)
_conv_pixels
=
round
wantobjects
=
False
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Canvas
(
self
.
root
,
**
kwargs
)
def
test_closeenough
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'closeenough'
,
24
,
2.4
,
3.6
,
-
3
,
conv
=
float
)
def
test_confine
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'confine'
)
def
test_scrollregion
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'scrollregion'
,
'0 0 200 150'
)
self
.
checkParam
(
widget
,
'scrollregion'
,
(
0
,
0
,
200
,
150
),
expected
=
'0 0 200 150'
)
self
.
checkParam
(
widget
,
'scrollregion'
,
''
)
self
.
checkInvalidParam
(
widget
,
'scrollregion'
,
'spam'
,
errmsg
=
'bad scrollRegion "spam"'
)
self
.
checkInvalidParam
(
widget
,
'scrollregion'
,
(
0
,
0
,
200
,
'spam'
))
self
.
checkInvalidParam
(
widget
,
'scrollregion'
,
(
0
,
0
,
200
))
self
.
checkInvalidParam
(
widget
,
'scrollregion'
,
(
0
,
0
,
200
,
150
,
0
))
def
test_state
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'state'
,
'disabled'
,
'normal'
,
errmsg
=
'bad state value "{}": must be normal or disabled'
)
def
test_xscrollincrement
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'xscrollincrement'
,
40
,
0
,
41.2
,
43.6
,
-
40
,
'0.5i'
)
def
test_yscrollincrement
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'yscrollincrement'
,
10
,
0
,
11.2
,
13.6
,
-
10
,
'0.1i'
)
@
add_standard_options
(
IntegerSizeTests
,
StandardOptionsTests
)
class
ListboxTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activestyle'
,
'background'
,
'borderwidth'
,
'cursor'
,
'disabledforeground'
,
'exportselection'
,
'font'
,
'foreground'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'listvariable'
,
'relief'
,
'selectbackground'
,
'selectborderwidth'
,
'selectforeground'
,
'selectmode'
,
'setgrid'
,
'state'
,
'takefocus'
,
'width'
,
'xscrollcommand'
,
'yscrollcommand'
,
)
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Listbox
(
self
.
root
,
**
kwargs
)
def
test_activestyle
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'activestyle'
,
'dotbox'
,
'none'
,
'underline'
)
def
test_listvariable
(
self
):
widget
=
self
.
create
()
var
=
tkinter
.
DoubleVar
()
self
.
checkVariableParam
(
widget
,
'listvariable'
,
var
)
def
test_selectmode
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'selectmode'
,
'single'
)
self
.
checkParam
(
widget
,
'selectmode'
,
'browse'
)
self
.
checkParam
(
widget
,
'selectmode'
,
'multiple'
)
self
.
checkParam
(
widget
,
'selectmode'
,
'extended'
)
def
test_state
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'state'
,
'disabled'
,
'normal'
)
@
add_standard_options
(
PixelSizeTests
,
StandardOptionsTests
)
class
ScaleTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'background'
,
'bigincrement'
,
'borderwidth'
,
'command'
,
'cursor'
,
'digits'
,
'font'
,
'foreground'
,
'from'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'label'
,
'length'
,
'orient'
,
'relief'
,
'repeatdelay'
,
'repeatinterval'
,
'resolution'
,
'showvalue'
,
'sliderlength'
,
'sliderrelief'
,
'state'
,
'takefocus'
,
'tickinterval'
,
'to'
,
'troughcolor'
,
'variable'
,
'width'
,
)
default_orient
=
'vertical'
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Scale
(
self
.
root
,
**
kwargs
)
def
test_bigincrement
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'bigincrement'
,
12.4
,
23.6
,
-
5
)
def
test_digits
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'digits'
,
5
,
0
)
def
test_from
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'from'
,
100
,
14.9
,
15.1
,
conv
=
float_round
)
def
test_label
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'label'
,
'any string'
)
self
.
checkParam
(
widget
,
'label'
,
''
)
def
test_length
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'length'
,
130
,
131.2
,
135.6
,
'5i'
)
def
test_resolution
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'resolution'
,
4.2
,
0
,
6.7
,
-
2
)
def
test_showvalue
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'showvalue'
)
def
test_sliderlength
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'sliderlength'
,
10
,
11.2
,
15.6
,
-
3
,
'3m'
)
def
test_sliderrelief
(
self
):
widget
=
self
.
create
()
self
.
checkReliefParam
(
widget
,
'sliderrelief'
)
def
test_tickinterval
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'tickinterval'
,
1
,
4.3
,
7.6
,
0
,
conv
=
float_round
)
self
.
checkParam
(
widget
,
'tickinterval'
,
-
2
,
expected
=
2
,
conv
=
float_round
)
def
test_to
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'to'
,
300
,
14.9
,
15.1
,
-
10
,
conv
=
float_round
)
@
add_standard_options
(
PixelSizeTests
,
StandardOptionsTests
)
class
ScrollbarTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'activerelief'
,
'background'
,
'borderwidth'
,
'command'
,
'cursor'
,
'elementborderwidth'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'jump'
,
'orient'
,
'relief'
,
'repeatdelay'
,
'repeatinterval'
,
'takefocus'
,
'troughcolor'
,
'width'
,
)
_conv_pixels
=
round
wantobjects
=
False
default_orient
=
'vertical'
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Scrollbar
(
self
.
root
,
**
kwargs
)
def
test_activerelief
(
self
):
widget
=
self
.
create
()
self
.
checkReliefParam
(
widget
,
'activerelief'
)
def
test_elementborderwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'elementborderwidth'
,
4.3
,
5.6
,
-
2
,
'1m'
)
def
test_orient
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'orient'
,
'vertical'
,
'horizontal'
,
errmsg
=
'bad orientation "{}": must be vertical or horizontal'
)
@
add_standard_options
(
StandardOptionsTests
)
class
PanedWindowTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'borderwidth'
,
'cursor'
,
'handlepad'
,
'handlesize'
,
'height'
,
'opaqueresize'
,
'orient'
,
'relief'
,
'sashcursor'
,
'sashpad'
,
'sashrelief'
,
'sashwidth'
,
'showhandle'
,
'width'
,
)
default_orient
=
'horizontal'
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
PanedWindow
(
self
.
root
,
**
kwargs
)
def
test_handlepad
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'handlepad'
,
5
,
6.4
,
7.6
,
-
3
,
'1m'
)
def
test_handlesize
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'handlesize'
,
8
,
9.4
,
10.6
,
-
3
,
'2m'
,
conv
=
noconv
)
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'height'
,
100
,
101.2
,
102.6
,
-
100
,
0
,
'1i'
,
conv
=
noconv
)
def
test_opaqueresize
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'opaqueresize'
)
def
test_sashcursor
(
self
):
widget
=
self
.
create
()
self
.
checkCursorParam
(
widget
,
'sashcursor'
)
def
test_sashpad
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'sashpad'
,
8
,
1.3
,
2.6
,
-
2
,
'2m'
)
def
test_sashrelief
(
self
):
widget
=
self
.
create
()
self
.
checkReliefParam
(
widget
,
'sashrelief'
)
def
test_sashwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'sashwidth'
,
10
,
11.1
,
15.6
,
-
3
,
'1m'
,
conv
=
noconv
)
def
test_showhandle
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'showhandle'
)
def
test_width
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'width'
,
402
,
403.4
,
404.6
,
-
402
,
0
,
'5i'
,
conv
=
noconv
)
@
add_standard_options
(
StandardOptionsTests
)
class
MenuTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'activebackground'
,
'activeborderwidth'
,
'activeforeground'
,
'background'
,
'borderwidth'
,
'cursor'
,
'disabledforeground'
,
'font'
,
'foreground'
,
'postcommand'
,
'relief'
,
'selectcolor'
,
'takefocus'
,
'tearoff'
,
'tearoffcommand'
,
'title'
,
'type'
,
)
_conv_pixels
=
noconv
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Menu
(
self
.
root
,
**
kwargs
)
def
test_postcommand
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'postcommand'
)
def
test_tearoff
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'tearoff'
)
def
test_tearoffcommand
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'tearoffcommand'
)
def
test_title
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'title'
,
'any string'
)
def
test_type
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'type'
,
'normal'
,
'tearoff'
,
'menubar'
)
@
add_standard_options
(
PixelSizeTests
,
StandardOptionsTests
)
class
MessageTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'anchor'
,
'aspect'
,
'background'
,
'borderwidth'
,
'cursor'
,
'font'
,
'foreground'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'justify'
,
'padx'
,
'pady'
,
'relief'
,
'takefocus'
,
'text'
,
'textvariable'
,
'width'
,
)
_conv_pad_pixels
=
noconv
def
_create
(
self
,
**
kwargs
):
return
tkinter
.
Message
(
self
.
root
,
**
kwargs
)
def
test_aspect
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'aspect'
,
250
,
0
,
-
300
)
tests_gui
=
(
ButtonTest
,
CanvasTest
,
CheckbuttonTest
,
EntryTest
,
FrameTest
,
LabelFrameTest
,
LabelTest
,
ListboxTest
,
MenubuttonTest
,
MenuTest
,
MessageTest
,
OptionMenuTest
,
PanedWindowTest
,
RadiobuttonTest
,
ScaleTest
,
ScrollbarTest
,
SpinboxTest
,
TextTest
,
ToplevelTest
,
)
if
__name__
==
'__main__'
:
unittest
.
main
()
Lib/tkinter/test/test_ttk/test_widgets.py
View file @
30d00ef9
import
unittest
import
tkinter
import
os
from
tkinter
import
ttk
from
test.support
import
requires
,
run_unittest
from
test.support
import
requires
import
sys
import
tkinter.test.support
as
support
from
tkinter.test.test_ttk.test_functions
import
MockTclObj
,
MockStateSpec
from
tkinter.test.test_ttk.test_functions
import
MockTclObj
from
tkinter.test.support
import
tcl_version
from
tkinter.test.widget_tests
import
(
add_standard_options
,
noconv
,
AbstractWidgetTest
,
StandardOptionsTests
,
IntegerSizeTests
,
PixelSizeTests
)
requires
(
'gui'
)
class
StandardTtkOptionsTests
(
StandardOptionsTests
):
def
test_class
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'class'
],
''
)
errmsg
=
'attempt to change read-only option'
if
tcl_version
<
(
8
,
6
):
errmsg
=
'Attempt to change read-only option'
self
.
checkInvalidParam
(
widget
,
'class'
,
'Foo'
,
errmsg
=
errmsg
)
widget2
=
self
.
create
(
class_
=
'Foo'
)
self
.
assertEqual
(
widget2
[
'class'
],
'Foo'
)
def
test_padding
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'padding'
,
0
,
expected
=
(
'0'
,))
self
.
checkParam
(
widget
,
'padding'
,
5
,
expected
=
(
'5'
,))
self
.
checkParam
(
widget
,
'padding'
,
(
5
,
6
),
expected
=
(
'5'
,
'6'
))
self
.
checkParam
(
widget
,
'padding'
,
(
5
,
6
,
7
),
expected
=
(
'5'
,
'6'
,
'7'
))
self
.
checkParam
(
widget
,
'padding'
,
(
5
,
6
,
7
,
8
),
expected
=
(
'5'
,
'6'
,
'7'
,
'8'
))
self
.
checkParam
(
widget
,
'padding'
,
(
'5p'
,
'6p'
,
'7p'
,
'8p'
))
self
.
checkParam
(
widget
,
'padding'
,
(),
expected
=
''
)
def
test_style
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'style'
],
''
)
errmsg
=
'Layout Foo not found'
if
hasattr
(
self
,
'default_orient'
):
errmsg
=
(
'Layout %s.Foo not found'
%
getattr
(
self
,
'default_orient'
).
title
())
self
.
checkInvalidParam
(
widget
,
'style'
,
'Foo'
,
errmsg
=
errmsg
)
widget2
=
self
.
create
(
class_
=
'Foo'
)
self
.
assertEqual
(
widget2
[
'class'
],
'Foo'
)
# XXX
pass
class
WidgetTest
(
unittest
.
TestCase
):
"""Tests methods available in every ttk widget."""
...
...
@@ -73,7 +115,112 @@ class WidgetTest(unittest.TestCase):
self
.
assertEqual
(
self
.
widget
.
state
(),
(
'active'
,
))
class
ButtonTest
(
unittest
.
TestCase
):
class
AbstractToplevelTest
(
AbstractWidgetTest
,
PixelSizeTests
):
_conv_pixels
=
noconv
@
add_standard_options
(
StandardTtkOptionsTests
)
class
FrameTest
(
AbstractToplevelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'borderwidth'
,
'class'
,
'cursor'
,
'height'
,
'padding'
,
'relief'
,
'style'
,
'takefocus'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Frame
(
self
.
root
,
**
kwargs
)
@
add_standard_options
(
StandardTtkOptionsTests
)
class
LabelFrameTest
(
AbstractToplevelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'borderwidth'
,
'class'
,
'cursor'
,
'height'
,
'labelanchor'
,
'labelwidget'
,
'padding'
,
'relief'
,
'style'
,
'takefocus'
,
'text'
,
'underline'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
ttk
.
LabelFrame
(
self
.
root
,
**
kwargs
)
def
test_labelanchor
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'labelanchor'
,
'e'
,
'en'
,
'es'
,
'n'
,
'ne'
,
'nw'
,
's'
,
'se'
,
'sw'
,
'w'
,
'wn'
,
'ws'
,
errmsg
=
'Bad label anchor specification {}'
)
self
.
checkInvalidParam
(
widget
,
'labelanchor'
,
'center'
)
def
test_labelwidget
(
self
):
widget
=
self
.
create
()
label
=
ttk
.
Label
(
self
.
root
,
text
=
'Mupp'
,
name
=
'foo'
)
self
.
checkParam
(
widget
,
'labelwidget'
,
label
,
expected
=
'.foo'
)
label
.
destroy
()
class
AbstractLabelTest
(
AbstractWidgetTest
):
def
checkImageParam
(
self
,
widget
,
name
):
image
=
tkinter
.
PhotoImage
(
'image1'
)
image2
=
tkinter
.
PhotoImage
(
'image2'
)
self
.
checkParam
(
widget
,
name
,
image
,
expected
=
(
'image1'
,))
self
.
checkParam
(
widget
,
name
,
'image1'
,
expected
=
(
'image1'
,))
self
.
checkParam
(
widget
,
name
,
(
image
,),
expected
=
(
'image1'
,))
self
.
checkParam
(
widget
,
name
,
(
image
,
'active'
,
image2
),
expected
=
(
'image1'
,
'active'
,
'image2'
))
self
.
checkParam
(
widget
,
name
,
'image1 active image2'
,
expected
=
(
'image1'
,
'active'
,
'image2'
))
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
'image "spam" doesn
\
'
t exist'
)
def
test_compound
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'compound'
,
'none'
,
'text'
,
'image'
,
'center'
,
'top'
,
'bottom'
,
'left'
,
'right'
)
def
test_state
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'state'
,
'active'
,
'disabled'
,
'normal'
)
def
test_width
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'width'
,
402
,
-
402
,
0
)
@
add_standard_options
(
StandardTtkOptionsTests
)
class
LabelTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'anchor'
,
'background'
,
'class'
,
'compound'
,
'cursor'
,
'font'
,
'foreground'
,
'image'
,
'justify'
,
'padding'
,
'relief'
,
'state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'width'
,
'wraplength'
,
)
_conv_pixels
=
noconv
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Label
(
self
.
root
,
**
kwargs
)
def
test_font
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'font'
,
'-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*'
)
@
add_standard_options
(
StandardTtkOptionsTests
)
class
ButtonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'command'
,
'compound'
,
'cursor'
,
'default'
,
'image'
,
'state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Button
(
self
.
root
,
**
kwargs
)
def
test_default
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'default'
,
'normal'
,
'active'
,
'disabled'
)
def
test_invoke
(
self
):
success
=
[]
...
...
@@ -82,7 +229,27 @@ class ButtonTest(unittest.TestCase):
self
.
assertTrue
(
success
)
class
CheckbuttonTest
(
unittest
.
TestCase
):
@
add_standard_options
(
StandardTtkOptionsTests
)
class
CheckbuttonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'command'
,
'compound'
,
'cursor'
,
'image'
,
'offvalue'
,
'onvalue'
,
'state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'variable'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Checkbutton
(
self
.
root
,
**
kwargs
)
def
test_offvalue
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'offvalue'
,
1
,
2.3
,
''
,
'any string'
)
def
test_onvalue
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'onvalue'
,
1
,
2.3
,
''
,
'any string'
)
def
test_invoke
(
self
):
success
=
[]
...
...
@@ -105,21 +272,40 @@ class CheckbuttonTest(unittest.TestCase):
cbtn
[
'command'
]
=
''
res
=
cbtn
.
invoke
()
self
.
assert
Equal
(
str
(
res
),
''
)
self
.
assert
False
(
str
(
res
)
)
self
.
assertFalse
(
len
(
success
)
>
1
)
self
.
assertEqual
(
cbtn
[
'offvalue'
],
cbtn
.
tk
.
globalgetvar
(
cbtn
[
'variable'
]))
class
ComboboxTest
(
unittest
.
TestCase
):
@
add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
ComboboxTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'cursor'
,
'exportselection'
,
'height'
,
'justify'
,
'postcommand'
,
'state'
,
'style'
,
'takefocus'
,
'textvariable'
,
'values'
,
'width'
,
)
def
setUp
(
self
):
super
().
setUp
()
support
.
root_deiconify
()
self
.
combo
=
ttk
.
Combobox
()
self
.
combo
=
self
.
create
()
def
tearDown
(
self
):
self
.
combo
.
destroy
()
support
.
root_withdraw
()
super
().
tearDown
()
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Combobox
(
self
.
root
,
**
kwargs
)
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'height'
,
100
,
101.2
,
102.6
,
-
100
,
0
,
'1i'
)
def
test_state
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'state'
,
'active'
,
'disabled'
,
'normal'
)
def
_show_drop_down_listbox
(
self
):
width
=
self
.
combo
.
winfo_width
()
...
...
@@ -167,8 +353,16 @@ class ComboboxTest(unittest.TestCase):
self
.
assertEqual
(
self
.
combo
.
get
(),
getval
)
self
.
assertEqual
(
self
.
combo
.
current
(),
currval
)
self
.
assertEqual
(
self
.
combo
[
'values'
],
()
if
tcl_version
<
(
8
,
5
)
else
''
)
check_get_current
(
''
,
-
1
)
self
.
checkParam
(
self
.
combo
,
'values'
,
'mon tue wed thur'
,
expected
=
(
'mon'
,
'tue'
,
'wed'
,
'thur'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
(
'mon'
,
'tue'
,
'wed'
,
'thur'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
(
42
,
3.14
,
''
,
'any string'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
''
,
expected
=
())
self
.
combo
[
'values'
]
=
[
'a'
,
1
,
'c'
]
self
.
combo
.
set
(
'c'
)
...
...
@@ -209,15 +403,52 @@ class ComboboxTest(unittest.TestCase):
combo2
.
destroy
()
class
EntryTest
(
unittest
.
TestCase
):
@
add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
EntryTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'class'
,
'cursor'
,
'exportselection'
,
'font'
,
'invalidcommand'
,
'justify'
,
'show'
,
'state'
,
'style'
,
'takefocus'
,
'textvariable'
,
'validate'
,
'validatecommand'
,
'width'
,
'xscrollcommand'
,
)
def
setUp
(
self
):
super
().
setUp
()
support
.
root_deiconify
()
self
.
entry
=
ttk
.
Entry
()
self
.
entry
=
self
.
create
()
def
tearDown
(
self
):
self
.
entry
.
destroy
()
support
.
root_withdraw
()
super
().
tearDown
()
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Entry
(
self
.
root
,
**
kwargs
)
def
test_invalidcommand
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'invalidcommand'
)
def
test_show
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'show'
,
'*'
)
self
.
checkParam
(
widget
,
'show'
,
''
)
self
.
checkParam
(
widget
,
'show'
,
' '
)
def
test_state
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'state'
,
'disabled'
,
'normal'
,
'readonly'
)
def
test_validate
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'validate'
,
'all'
,
'key'
,
'focus'
,
'focusin'
,
'focusout'
,
'none'
)
def
test_validatecommand
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'validatecommand'
)
def
test_bbox
(
self
):
...
...
@@ -313,16 +544,36 @@ class EntryTest(unittest.TestCase):
self
.
assertEqual
(
self
.
entry
.
state
(),
())
class
PanedwindowTest
(
unittest
.
TestCase
):
@
add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
PanedWindowTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'cursor'
,
'height'
,
'orient'
,
'style'
,
'takefocus'
,
'width'
,
)
def
setUp
(
self
):
super
().
setUp
()
support
.
root_deiconify
()
self
.
paned
=
ttk
.
Panedwindow
()
self
.
paned
=
self
.
create
()
def
tearDown
(
self
):
self
.
paned
.
destroy
()
support
.
root_withdraw
()
super
().
tearDown
()
def
_create
(
self
,
**
kwargs
):
return
ttk
.
PanedWindow
(
self
.
root
,
**
kwargs
)
def
test_orient
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
str
(
widget
[
'orient'
]),
'vertical'
)
errmsg
=
'attempt to change read-only option'
if
tcl_version
<
(
8
,
6
):
errmsg
=
'Attempt to change read-only option'
self
.
checkInvalidParam
(
widget
,
'orient'
,
'horizontal'
,
errmsg
=
errmsg
)
widget2
=
self
.
create
(
orient
=
'horizontal'
)
self
.
assertEqual
(
str
(
widget2
[
'orient'
]),
'horizontal'
)
def
test_add
(
self
):
# attempt to add a child that is not a direct child of the paned window
...
...
@@ -432,7 +683,22 @@ class PanedwindowTest(unittest.TestCase):
self
.
assertTrue
(
isinstance
(
self
.
paned
.
sashpos
(
0
),
int
))
class
RadiobuttonTest
(
unittest
.
TestCase
):
@
add_standard_options
(
StandardTtkOptionsTests
)
class
RadiobuttonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'command'
,
'compound'
,
'cursor'
,
'image'
,
'state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'value'
,
'variable'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Radiobutton
(
self
.
root
,
**
kwargs
)
def
test_value
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'value'
,
1
,
2.3
,
''
,
'any string'
)
def
test_invoke
(
self
):
success
=
[]
...
...
@@ -462,19 +728,68 @@ class RadiobuttonTest(unittest.TestCase):
self
.
assertEqual
(
str
(
cbtn
[
'variable'
]),
str
(
cbtn2
[
'variable'
]))
class
MenubuttonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'compound'
,
'cursor'
,
'direction'
,
'image'
,
'menu'
,
'state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'width'
,
)
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Menubutton
(
self
.
root
,
**
kwargs
)
def
test_direction
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'direction'
,
'above'
,
'below'
,
'left'
,
'right'
,
'flush'
)
def
test_menu
(
self
):
widget
=
self
.
create
()
menu
=
tkinter
.
Menu
(
widget
,
name
=
'menu'
)
self
.
checkParam
(
widget
,
'menu'
,
menu
,
conv
=
str
)
menu
.
destroy
()
class
ScaleTest
(
unittest
.
TestCase
):
@
add_standard_options
(
StandardTtkOptionsTests
)
class
ScaleTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'command'
,
'cursor'
,
'from'
,
'length'
,
'orient'
,
'style'
,
'takefocus'
,
'to'
,
'value'
,
'variable'
,
)
_conv_pixels
=
noconv
default_orient
=
'horizontal'
def
setUp
(
self
):
super
().
setUp
()
support
.
root_deiconify
()
self
.
scale
=
ttk
.
Scal
e
()
self
.
scale
=
self
.
creat
e
()
self
.
scale
.
pack
()
self
.
scale
.
update
()
def
tearDown
(
self
):
self
.
scale
.
destroy
()
support
.
root_withdraw
()
super
().
tearDown
()
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Scale
(
self
.
root
,
**
kwargs
)
def
test_from
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'from'
,
100
,
14.9
,
15.1
,
conv
=
False
)
def
test_length
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'length'
,
130
,
131.2
,
135.6
,
'5i'
)
def
test_to
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'to'
,
300
,
14.9
,
15.1
,
-
10
,
conv
=
False
)
def
test_value
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'value'
,
300
,
14.9
,
15.1
,
-
10
,
conv
=
False
)
def
test_custom_event
(
self
):
failure
=
[
1
,
1
,
1
]
# will need to be empty
...
...
@@ -539,11 +854,64 @@ class ScaleTest(unittest.TestCase):
self
.
assertRaises
(
tkinter
.
TclError
,
self
.
scale
.
set
,
None
)
class
NotebookTest
(
unittest
.
TestCase
):
@
add_standard_options
(
StandardTtkOptionsTests
)
class
ProgressbarTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'cursor'
,
'orient'
,
'length'
,
'mode'
,
'maximum'
,
'phase'
,
'style'
,
'takefocus'
,
'value'
,
'variable'
,
)
_conv_pixels
=
noconv
default_orient
=
'horizontal'
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Progressbar
(
self
.
root
,
**
kwargs
)
def
test_length
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'length'
,
100.1
,
56.7
,
'2i'
)
def
test_maximum
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'maximum'
,
150.2
,
77.7
,
0
,
-
10
,
conv
=
False
)
def
test_mode
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'mode'
,
'determinate'
,
'indeterminate'
)
def
test_phase
(
self
):
# XXX
pass
def
test_value
(
self
):
widget
=
self
.
create
()
self
.
checkFloatParam
(
widget
,
'value'
,
150.2
,
77.7
,
0
,
-
10
,
conv
=
False
)
@
unittest
.
skipIf
(
sys
.
platform
==
'darwin'
,
'ttk.Scrollbar is special on MacOSX'
)
@
add_standard_options
(
StandardTtkOptionsTests
)
class
ScrollbarTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'command'
,
'cursor'
,
'orient'
,
'style'
,
'takefocus'
,
)
default_orient
=
'vertical'
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Scrollbar
(
self
.
root
,
**
kwargs
)
@
add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
NotebookTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'cursor'
,
'height'
,
'padding'
,
'style'
,
'takefocus'
,
)
def
setUp
(
self
):
super
().
setUp
()
support
.
root_deiconify
()
self
.
nb
=
ttk
.
Notebook
(
padding
=
0
)
self
.
nb
=
self
.
create
(
padding
=
0
)
self
.
child1
=
ttk
.
Label
()
self
.
child2
=
ttk
.
Label
()
self
.
nb
.
add
(
self
.
child1
,
text
=
'a'
)
...
...
@@ -554,7 +922,10 @@ class NotebookTest(unittest.TestCase):
self
.
child2
.
destroy
()
self
.
nb
.
destroy
()
support
.
root_withdraw
()
super
().
tearDown
()
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Notebook
(
self
.
root
,
**
kwargs
)
def
test_tab_identifiers
(
self
):
self
.
nb
.
forget
(
0
)
...
...
@@ -746,16 +1117,68 @@ class NotebookTest(unittest.TestCase):
self
.
assertEqual
(
self
.
nb
.
select
(),
str
(
self
.
child1
))
class
TreeviewTest
(
unittest
.
TestCase
):
@
add_standard_options
(
StandardTtkOptionsTests
)
class
TreeviewTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'columns'
,
'cursor'
,
'displaycolumns'
,
'height'
,
'padding'
,
'selectmode'
,
'show'
,
'style'
,
'takefocus'
,
'xscrollcommand'
,
'yscrollcommand'
,
)
def
setUp
(
self
):
super
().
setUp
()
support
.
root_deiconify
()
self
.
tv
=
ttk
.
Treeview
(
padding
=
0
)
self
.
tv
=
self
.
create
(
padding
=
0
)
def
tearDown
(
self
):
self
.
tv
.
destroy
()
support
.
root_withdraw
()
super
().
tearDown
()
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Treeview
(
self
.
root
,
**
kwargs
)
def
test_columns
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'columns'
,
'a b c'
,
expected
=
(
'a'
,
'b'
,
'c'
))
self
.
checkParam
(
widget
,
'columns'
,
(
'a'
,
'b'
,
'c'
))
self
.
checkParam
(
widget
,
'columns'
,
())
def
test_displaycolumns
(
self
):
widget
=
self
.
create
()
widget
[
'columns'
]
=
(
'a'
,
'b'
,
'c'
)
self
.
checkParam
(
widget
,
'displaycolumns'
,
'b a c'
,
expected
=
(
'b'
,
'a'
,
'c'
))
self
.
checkParam
(
widget
,
'displaycolumns'
,
(
'b'
,
'a'
,
'c'
))
self
.
checkParam
(
widget
,
'displaycolumns'
,
'#all'
,
expected
=
(
'#all'
,))
self
.
checkParam
(
widget
,
'displaycolumns'
,
(
2
,
1
,
0
))
self
.
checkInvalidParam
(
widget
,
'displaycolumns'
,
(
'a'
,
'b'
,
'd'
),
errmsg
=
'Invalid column index d'
)
self
.
checkInvalidParam
(
widget
,
'displaycolumns'
,
(
1
,
2
,
3
),
errmsg
=
'Column index 3 out of bounds'
)
self
.
checkInvalidParam
(
widget
,
'displaycolumns'
,
(
1
,
-
2
),
errmsg
=
'Column index -2 out of bounds'
)
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'height'
,
100
,
-
100
,
0
,
'3c'
,
conv
=
False
)
self
.
checkPixelsParam
(
widget
,
'height'
,
101.2
,
102.6
,
conv
=
noconv
)
def
test_selectmode
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'selectmode'
,
'none'
,
'browse'
,
'extended'
)
def
test_show
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'show'
,
'tree headings'
,
expected
=
(
'tree'
,
'headings'
))
self
.
checkParam
(
widget
,
'show'
,
(
'tree'
,
'headings'
))
self
.
checkParam
(
widget
,
'show'
,
(
'headings'
,
'tree'
))
self
.
checkParam
(
widget
,
'show'
,
'tree'
,
expected
=
(
'tree'
,))
self
.
checkParam
(
widget
,
'show'
,
'headings'
,
expected
=
(
'headings'
,))
def
test_bbox
(
self
):
self
.
tv
.
pack
()
...
...
@@ -1149,11 +1572,35 @@ class TreeviewTest(unittest.TestCase):
self
.
assertTrue
(
isinstance
(
self
.
tv
.
tag_configure
(
'test'
),
dict
))
@
add_standard_options
(
StandardTtkOptionsTests
)
class
SeparatorTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'cursor'
,
'orient'
,
'style'
,
'takefocus'
,
# 'state'?
)
default_orient
=
'horizontal'
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Separator
(
self
.
root
,
**
kwargs
)
@
add_standard_options
(
StandardTtkOptionsTests
)
class
SizegripTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'cursor'
,
'style'
,
'takefocus'
,
# 'state'?
)
def
_create
(
self
,
**
kwargs
):
return
ttk
.
Sizegrip
(
self
.
root
,
**
kwargs
)
tests_gui
=
(
WidgetTest
,
ButtonTest
,
CheckbuttonTest
,
RadiobuttonTest
,
ComboboxTest
,
EntryTest
,
PanedwindowTest
,
ScaleTest
,
NotebookTest
,
TreeviewTest
ButtonTest
,
CheckbuttonTest
,
ComboboxTest
,
EntryTest
,
FrameTest
,
LabelFrameTest
,
LabelTest
,
MenubuttonTest
,
NotebookTest
,
PanedWindowTest
,
ProgressbarTest
,
RadiobuttonTest
,
ScaleTest
,
ScrollbarTest
,
SeparatorTest
,
SizegripTest
,
TreeviewTest
,
WidgetTest
,
)
if
__name__
==
"__main__"
:
run_unittest
(
*
tests_gui
)
unittest
.
main
(
)
Lib/tkinter/test/widget_tests.py
0 → 100644
View file @
30d00ef9
# Common tests for test_tkinter/test_widgets.py and test_ttk/test_widgets.py
import
tkinter
from
tkinter.ttk
import
setup_master
,
Scale
from
tkinter.test.support
import
(
tcl_version
,
requires_tcl
,
pixels_conv
,
tcl_obj_eq
)
noconv
=
str
if
tcl_version
<
(
8
,
5
)
else
False
_sentinel
=
object
()
class
AbstractWidgetTest
:
_conv_pixels
=
round
if
tcl_version
[:
2
]
!=
(
8
,
5
)
else
int
_conv_pad_pixels
=
None
wantobjects
=
True
def
setUp
(
self
):
self
.
root
=
setup_master
()
self
.
scaling
=
float
(
self
.
root
.
call
(
'tk'
,
'scaling'
))
if
not
self
.
root
.
wantobjects
():
self
.
wantobjects
=
False
def
create
(
self
,
**
kwargs
):
widget
=
self
.
_create
(
**
kwargs
)
self
.
addCleanup
(
widget
.
destroy
)
return
widget
def
assertEqual2
(
self
,
actual
,
expected
,
msg
=
None
,
eq
=
object
.
__eq__
):
if
eq
(
actual
,
expected
):
return
self
.
assertEqual
(
actual
,
expected
,
msg
)
def
checkParam
(
self
,
widget
,
name
,
value
,
*
,
expected
=
_sentinel
,
conv
=
False
,
eq
=
None
):
widget
[
name
]
=
value
if
expected
is
_sentinel
:
expected
=
value
if
conv
:
expected
=
conv
(
expected
)
if
not
self
.
wantobjects
:
if
isinstance
(
expected
,
tuple
):
expected
=
tkinter
.
_join
(
expected
)
else
:
expected
=
str
(
expected
)
if
eq
is
None
:
eq
=
tcl_obj_eq
self
.
assertEqual2
(
widget
[
name
],
expected
,
eq
=
eq
)
self
.
assertEqual2
(
widget
.
cget
(
name
),
expected
,
eq
=
eq
)
# XXX
if
not
isinstance
(
widget
,
Scale
):
t
=
widget
.
configure
(
name
)
self
.
assertEqual
(
len
(
t
),
5
)
## XXX
if
not
isinstance
(
t
[
4
],
tuple
):
self
.
assertEqual2
(
t
[
4
],
expected
,
eq
=
eq
)
def
checkInvalidParam
(
self
,
widget
,
name
,
value
,
errmsg
=
None
,
*
,
keep_orig
=
True
):
orig
=
widget
[
name
]
if
errmsg
is
not
None
:
errmsg
=
errmsg
.
format
(
value
)
with
self
.
assertRaises
(
tkinter
.
TclError
)
as
cm
:
widget
[
name
]
=
value
if
errmsg
is
not
None
:
self
.
assertEqual
(
str
(
cm
.
exception
),
errmsg
)
if
keep_orig
:
self
.
assertEqual
(
widget
[
name
],
orig
)
else
:
widget
[
name
]
=
orig
with
self
.
assertRaises
(
tkinter
.
TclError
)
as
cm
:
widget
.
configure
({
name
:
value
})
if
errmsg
is
not
None
:
self
.
assertEqual
(
str
(
cm
.
exception
),
errmsg
)
if
keep_orig
:
self
.
assertEqual
(
widget
[
name
],
orig
)
else
:
widget
[
name
]
=
orig
def
checkParams
(
self
,
widget
,
name
,
*
values
,
**
kwargs
):
for
value
in
values
:
self
.
checkParam
(
widget
,
name
,
value
,
**
kwargs
)
def
checkIntegerParam
(
self
,
widget
,
name
,
*
values
,
**
kwargs
):
self
.
checkParams
(
widget
,
name
,
*
values
,
**
kwargs
)
self
.
checkInvalidParam
(
widget
,
name
,
''
,
errmsg
=
'expected integer but got ""'
)
self
.
checkInvalidParam
(
widget
,
name
,
'10p'
,
errmsg
=
'expected integer but got "10p"'
)
self
.
checkInvalidParam
(
widget
,
name
,
3.2
,
errmsg
=
'expected integer but got "3.2"'
)
def
checkFloatParam
(
self
,
widget
,
name
,
*
values
,
conv
=
float
,
**
kwargs
):
for
value
in
values
:
self
.
checkParam
(
widget
,
name
,
value
,
conv
=
conv
,
**
kwargs
)
self
.
checkInvalidParam
(
widget
,
name
,
''
,
errmsg
=
'expected floating-point number but got ""'
)
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
'expected floating-point number but got "spam"'
)
def
checkBooleanParam
(
self
,
widget
,
name
):
for
value
in
(
False
,
0
,
'false'
,
'no'
,
'off'
):
self
.
checkParam
(
widget
,
name
,
value
,
expected
=
0
)
for
value
in
(
True
,
1
,
'true'
,
'yes'
,
'on'
):
self
.
checkParam
(
widget
,
name
,
value
,
expected
=
1
)
self
.
checkInvalidParam
(
widget
,
name
,
''
,
errmsg
=
'expected boolean value but got ""'
)
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
'expected boolean value but got "spam"'
)
def
checkColorParam
(
self
,
widget
,
name
,
*
,
allow_empty
=
None
,
**
kwargs
):
self
.
checkParams
(
widget
,
name
,
'#ff0000'
,
'#00ff00'
,
'#0000ff'
,
'#123456'
,
'red'
,
'green'
,
'blue'
,
'white'
,
'black'
,
'grey'
,
**
kwargs
)
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
'unknown color name "spam"'
)
def
checkCursorParam
(
self
,
widget
,
name
,
**
kwargs
):
self
.
checkParams
(
widget
,
name
,
'arrow'
,
'watch'
,
'cross'
,
''
,
**
kwargs
)
if
tcl_version
>=
(
8
,
5
):
self
.
checkParam
(
widget
,
name
,
'none'
)
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
'bad cursor spec "spam"'
)
def
checkCommandParam
(
self
,
widget
,
name
):
def
command
(
*
args
):
pass
widget
[
name
]
=
command
self
.
assertTrue
(
widget
[
name
])
self
.
checkParams
(
widget
,
name
,
''
)
def
checkEnumParam
(
self
,
widget
,
name
,
*
values
,
errmsg
=
None
,
**
kwargs
):
self
.
checkParams
(
widget
,
name
,
*
values
,
**
kwargs
)
if
errmsg
is
None
:
errmsg2
=
' %s "{}": must be %s%s or %s'
%
(
name
,
', '
.
join
(
values
[:
-
1
]),
','
if
len
(
values
)
>
2
else
''
,
values
[
-
1
])
self
.
checkInvalidParam
(
widget
,
name
,
''
,
errmsg
=
'ambiguous'
+
errmsg2
)
errmsg
=
'bad'
+
errmsg2
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
errmsg
)
def
checkPixelsParam
(
self
,
widget
,
name
,
*
values
,
conv
=
None
,
keep_orig
=
True
,
**
kwargs
):
if
conv
is
None
:
conv
=
self
.
_conv_pixels
for
value
in
values
:
expected
=
_sentinel
conv1
=
conv
if
isinstance
(
value
,
str
):
if
conv1
and
conv1
is
not
str
:
expected
=
pixels_conv
(
value
)
*
self
.
scaling
conv1
=
round
self
.
checkParam
(
widget
,
name
,
value
,
expected
=
expected
,
conv
=
conv1
,
**
kwargs
)
self
.
checkInvalidParam
(
widget
,
name
,
'6x'
,
errmsg
=
'bad screen distance "6x"'
,
keep_orig
=
keep_orig
)
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
'bad screen distance "spam"'
,
keep_orig
=
keep_orig
)
def
checkReliefParam
(
self
,
widget
,
name
):
self
.
checkParams
(
widget
,
name
,
'flat'
,
'groove'
,
'raised'
,
'ridge'
,
'solid'
,
'sunken'
)
errmsg
=
'bad relief "spam": must be '
\
'flat, groove, raised, ridge, solid, or sunken'
if
tcl_version
<
(
8
,
6
):
errmsg
=
None
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
errmsg
)
def
checkImageParam
(
self
,
widget
,
name
):
image
=
tkinter
.
PhotoImage
(
'image1'
)
self
.
checkParam
(
widget
,
name
,
image
,
conv
=
str
)
self
.
checkInvalidParam
(
widget
,
name
,
'spam'
,
errmsg
=
'image "spam" doesn
\
'
t exist'
)
widget
[
name
]
=
''
def
checkVariableParam
(
self
,
widget
,
name
,
var
):
self
.
checkParam
(
widget
,
name
,
var
,
conv
=
str
)
class
StandardOptionsTests
:
STANDARD_OPTIONS
=
(
'activebackground'
,
'activeborderwidth'
,
'activeforeground'
,
'anchor'
,
'background'
,
'bitmap'
,
'borderwidth'
,
'compound'
,
'cursor'
,
'disabledforeground'
,
'exportselection'
,
'font'
,
'foreground'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'image'
,
'insertbackground'
,
'insertborderwidth'
,
'insertofftime'
,
'insertontime'
,
'insertwidth'
,
'jump'
,
'justify'
,
'orient'
,
'padx'
,
'pady'
,
'relief'
,
'repeatdelay'
,
'repeatinterval'
,
'selectbackground'
,
'selectborderwidth'
,
'selectforeground'
,
'setgrid'
,
'takefocus'
,
'text'
,
'textvariable'
,
'troughcolor'
,
'underline'
,
'wraplength'
,
'xscrollcommand'
,
'yscrollcommand'
,
)
def
test_activebackground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'activebackground'
)
def
test_activeborderwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'activeborderwidth'
,
0
,
1.3
,
2.9
,
6
,
-
2
,
'10p'
)
def
test_activeforeground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'activeforeground'
)
def
test_anchor
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'anchor'
,
'n'
,
'ne'
,
'e'
,
'se'
,
's'
,
'sw'
,
'w'
,
'nw'
,
'center'
)
def
test_background
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'background'
)
if
'bg'
in
self
.
OPTIONS
:
self
.
checkColorParam
(
widget
,
'bg'
)
def
test_bitmap
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'bitmap'
,
'questhead'
)
self
.
checkParam
(
widget
,
'bitmap'
,
'gray50'
)
self
.
checkInvalidParam
(
widget
,
'bitmap'
,
'spam'
,
errmsg
=
'bitmap "spam" not defined'
)
def
test_borderwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'borderwidth'
,
0
,
1.3
,
2.6
,
6
,
-
2
,
'10p'
)
if
'bd'
in
self
.
OPTIONS
:
self
.
checkPixelsParam
(
widget
,
'bd'
,
0
,
1.3
,
2.6
,
6
,
-
2
,
'10p'
)
def
test_compound
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'compound'
,
'bottom'
,
'center'
,
'left'
,
'none'
,
'right'
,
'top'
)
def
test_cursor
(
self
):
widget
=
self
.
create
()
self
.
checkCursorParam
(
widget
,
'cursor'
)
def
test_disabledforeground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'disabledforeground'
)
def
test_exportselection
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'exportselection'
)
def
test_font
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'font'
,
'-Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*'
)
self
.
checkInvalidParam
(
widget
,
'font'
,
''
,
errmsg
=
'font "" doesn
\
'
t exist'
)
def
test_foreground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'foreground'
)
if
'fg'
in
self
.
OPTIONS
:
self
.
checkColorParam
(
widget
,
'fg'
)
def
test_highlightbackground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'highlightbackground'
)
def
test_highlightcolor
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'highlightcolor'
)
def
test_highlightthickness
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'highlightthickness'
,
0
,
1.3
,
2.6
,
6
,
'10p'
)
self
.
checkParam
(
widget
,
'highlightthickness'
,
-
2
,
expected
=
0
,
conv
=
self
.
_conv_pixels
)
def
test_image
(
self
):
widget
=
self
.
create
()
self
.
checkImageParam
(
widget
,
'image'
)
def
test_insertbackground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'insertbackground'
)
def
test_insertborderwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'insertborderwidth'
,
0
,
1.3
,
2.6
,
6
,
-
2
,
'10p'
)
def
test_insertofftime
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'insertofftime'
,
100
)
def
test_insertontime
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'insertontime'
,
100
)
def
test_insertwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'insertwidth'
,
1.3
,
2.6
,
-
2
,
'10p'
)
def
test_jump
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'jump'
)
def
test_justify
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'justify'
,
'left'
,
'right'
,
'center'
,
errmsg
=
'bad justification "{}": must be '
'left, right, or center'
)
self
.
checkInvalidParam
(
widget
,
'justify'
,
''
,
errmsg
=
'ambiguous justification "": must be '
'left, right, or center'
)
def
test_orient
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
str
(
widget
[
'orient'
]),
self
.
default_orient
)
self
.
checkEnumParam
(
widget
,
'orient'
,
'horizontal'
,
'vertical'
)
def
test_padx
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'padx'
,
3
,
4.4
,
5.6
,
-
2
,
'12m'
,
conv
=
self
.
_conv_pad_pixels
)
def
test_pady
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'pady'
,
3
,
4.4
,
5.6
,
-
2
,
'12m'
,
conv
=
self
.
_conv_pad_pixels
)
def
test_relief
(
self
):
widget
=
self
.
create
()
self
.
checkReliefParam
(
widget
,
'relief'
)
def
test_repeatdelay
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'repeatdelay'
,
-
500
,
500
)
def
test_repeatinterval
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'repeatinterval'
,
-
500
,
500
)
def
test_selectbackground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'selectbackground'
)
def
test_selectborderwidth
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'selectborderwidth'
,
1.3
,
2.6
,
-
2
,
'10p'
)
def
test_selectforeground
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'selectforeground'
)
def
test_setgrid
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'setgrid'
)
def
test_state
(
self
):
widget
=
self
.
create
()
self
.
checkEnumParam
(
widget
,
'state'
,
'active'
,
'disabled'
,
'normal'
)
def
test_takefocus
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'takefocus'
,
'0'
,
'1'
,
''
)
def
test_text
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'text'
,
''
,
'any string'
)
def
test_textvariable
(
self
):
widget
=
self
.
create
()
var
=
tkinter
.
StringVar
()
self
.
checkVariableParam
(
widget
,
'textvariable'
,
var
)
def
test_troughcolor
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'troughcolor'
)
def
test_underline
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'underline'
,
0
,
1
,
10
)
def
test_wraplength
(
self
):
widget
=
self
.
create
()
if
tcl_version
<
(
8
,
5
):
self
.
checkPixelsParam
(
widget
,
'wraplength'
,
100
)
else
:
self
.
checkParams
(
widget
,
'wraplength'
,
100
)
def
test_xscrollcommand
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'xscrollcommand'
)
def
test_yscrollcommand
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'yscrollcommand'
)
# non-standard but common options
def
test_command
(
self
):
widget
=
self
.
create
()
self
.
checkCommandParam
(
widget
,
'command'
)
def
test_indicatoron
(
self
):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'indicatoron'
)
def
test_offrelief
(
self
):
widget
=
self
.
create
()
self
.
checkReliefParam
(
widget
,
'offrelief'
)
def
test_overrelief
(
self
):
widget
=
self
.
create
()
self
.
checkReliefParam
(
widget
,
'overrelief'
)
def
test_selectcolor
(
self
):
widget
=
self
.
create
()
self
.
checkColorParam
(
widget
,
'selectcolor'
)
def
test_selectimage
(
self
):
widget
=
self
.
create
()
self
.
checkImageParam
(
widget
,
'selectimage'
)
@
requires_tcl
(
8
,
5
)
def
test_tristateimage
(
self
):
widget
=
self
.
create
()
self
.
checkImageParam
(
widget
,
'tristateimage'
)
@
requires_tcl
(
8
,
5
)
def
test_tristatevalue
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'tristatevalue'
,
'unknowable'
)
def
test_variable
(
self
):
widget
=
self
.
create
()
var
=
tkinter
.
DoubleVar
()
self
.
checkVariableParam
(
widget
,
'variable'
,
var
)
class
IntegerSizeTests
:
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'height'
,
100
,
-
100
,
0
)
def
test_width
(
self
):
widget
=
self
.
create
()
self
.
checkIntegerParam
(
widget
,
'width'
,
402
,
-
402
,
0
)
class
PixelSizeTests
:
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'height'
,
100
,
101.2
,
102.6
,
-
100
,
0
,
'3c'
)
def
test_width
(
self
):
widget
=
self
.
create
()
self
.
checkPixelsParam
(
widget
,
'width'
,
402
,
403.4
,
404.6
,
-
402
,
0
,
'5i'
)
def
add_standard_options
(
*
source_classes
):
# This decorator adds test_xxx methods from source classes for every xxx
# option in the OPTIONS class attribute if they are not defined explicitly.
def
decorator
(
cls
):
for
option
in
cls
.
OPTIONS
:
methodname
=
'test_'
+
option
if
not
hasattr
(
cls
,
methodname
):
for
source_class
in
source_classes
:
if
hasattr
(
source_class
,
methodname
):
setattr
(
cls
,
methodname
,
getattr
(
source_class
,
methodname
))
break
else
:
def
test
(
self
,
option
=
option
):
widget
=
self
.
create
()
widget
[
option
]
raise
AssertionError
(
'Option "%s" is not tested in %s'
%
(
option
,
cls
.
__name__
))
test
.
__name__
=
methodname
setattr
(
cls
,
methodname
,
test
)
return
cls
return
decorator
Misc/NEWS
View file @
30d00ef9
...
...
@@ -15,6 +15,11 @@ Library
- Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler.
Tests
-----
- Issue #19085: Added basic tests for all tkinter widget options.
What'
s
New
in
Python
3.3.3
release
candidate
1
?
===============================================
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment