##// END OF EJS Templates
squashing the whitespace changes
squashing the whitespace changes

File last commit:

r20287:e8dddcc1
r20287:e8dddcc1
Show More
test_interaction.py
692 lines | 18.9 KiB | text/x-python | PythonLexer
Brian E. Granger
Utter interact insanity....
r15140 """Test interact and interactive."""
MinRK
avoid copious warnings in interact tests...
r17926 # Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
Brian E. Granger
Utter interact insanity....
r15140
MinRK
test widget interaction (Python)
r15153 from __future__ import print_function
from collections import OrderedDict
Brian E. Granger
Utter interact insanity....
r15140 import nose.tools as nt
MinRK
test widget interaction (Python)
r15153 import IPython.testing.tools as tt
MinRK
avoid copious warnings in interact tests...
r17926 from IPython.kernel.comm import Comm
MinRK
test widget interaction (Python)
r15153 from IPython.html import widgets
from IPython.html.widgets import interact, interactive, Widget, interaction
from IPython.utils.py3compat import annotate
#-----------------------------------------------------------------------------
# Utility stuff
#-----------------------------------------------------------------------------
MinRK
avoid copious warnings in interact tests...
r17926 class DummyComm(Comm):
MinRK
test widget interaction (Python)
r15153 comm_id = 'a-b-c-d'
MinRK
avoid copious warnings in interact tests...
r17926
Thomas Kluyver
Make comm_manager a property of kernel, not shell
r17987 def open(self, *args, **kwargs):
pass
MinRK
test widget interaction (Python)
r15153 def send(self, *args, **kwargs):
pass
def close(self, *args, **kwargs):
pass
_widget_attrs = {}
displayed = []
MinRK
avoid copious warnings in interact tests...
r17926 undefined = object()
MinRK
test widget interaction (Python)
r15153
def setup():
MinRK
avoid copious warnings in interact tests...
r17926 _widget_attrs['_comm_default'] = getattr(Widget, '_comm_default', undefined)
Widget._comm_default = lambda self: DummyComm()
MinRK
test widget interaction (Python)
r15153 _widget_attrs['_ipython_display_'] = Widget._ipython_display_
def raise_not_implemented(*args, **kwargs):
raise NotImplementedError()
Widget._ipython_display_ = raise_not_implemented
Brian E. Granger
Utter interact insanity....
r15140
MinRK
test widget interaction (Python)
r15153 def teardown():
for attr, value in _widget_attrs.items():
MinRK
avoid copious warnings in interact tests...
r17926 if value is undefined:
delattr(Widget, attr)
else:
setattr(Widget, attr, value)
MinRK
test widget interaction (Python)
r15153
def f(**kwargs):
pass
def clear_display():
global displayed
displayed = []
def record_display(*args):
displayed.extend(args)
Brian E. Granger
Utter interact insanity....
r15140
#-----------------------------------------------------------------------------
MinRK
test widget interaction (Python)
r15153 # Actual tests
Brian E. Granger
Utter interact insanity....
r15140 #-----------------------------------------------------------------------------
MinRK
test widget interaction (Python)
r15153 def check_widget(w, **d):
"""Check a single widget against a dict"""
for attr, expected in d.items():
if attr == 'cls':
nt.assert_is(w.__class__, expected)
else:
value = getattr(w, attr)
nt.assert_equal(value, expected,
"%s.%s = %r != %r" % (w.__class__.__name__, attr, value, expected)
)
def check_widgets(container, **to_check):
"""Check that widgets are created as expected"""
# build a widget dictionary, so it matches
widgets = {}
for w in container.children:
Jonathan Frederic
Fix interact test
r20234 if hasattr(w, 'description'):
widgets[w.description] = w
MinRK
test widget interaction (Python)
r15153
for key, d in to_check.items():
nt.assert_in(key, widgets)
check_widget(widgets[key], **d)
def test_single_value_string():
a = u'hello'
c = interactive(f, a=a)
w = c.children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
MinRK
test widget interaction (Python)
r15153 description='a',
value=a,
)
def test_single_value_bool():
for a in (True, False):
c = interactive(f, a=a)
w = c.children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Checkbox,
MinRK
test widget interaction (Python)
r15153 description='a',
value=a,
)
def test_single_value_dict():
for d in [
dict(a=5),
dict(a=5, b='b', c=dict),
]:
c = interactive(f, d=d)
w = c.children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Dropdown,
MinRK
test widget interaction (Python)
r15153 description='d',
Nicholas Bollweg
squashing the whitespace changes
r20287 options=d,
MinRK
test widget interaction (Python)
r15153 value=next(iter(d.values())),
)
def test_single_value_float():
for a in (2.25, 1.0, -3.5):
c = interactive(f, a=a)
w = c.children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.FloatSlider,
MinRK
test widget interaction (Python)
r15153 description='a',
value=a,
min= -a if a > 0 else 3*a,
max= 3*a if a > 0 else -a,
step=0.1,
MinRK
set readout=True as default on SliderWidgets
r15159 readout=True,
MinRK
test widget interaction (Python)
r15153 )
def test_single_value_int():
for a in (1, 5, -3):
c = interactive(f, a=a)
Jonathan Frederic
Fix interact test
r20234 nt.assert_equal(len(c.children), 2)
MinRK
test widget interaction (Python)
r15153 w = c.children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
test widget interaction (Python)
r15153 description='a',
value=a,
min= -a if a > 0 else 3*a,
max= 3*a if a > 0 else -a,
step=1,
MinRK
set readout=True as default on SliderWidgets
r15159 readout=True,
MinRK
test widget interaction (Python)
r15153 )
def test_list_tuple_2_int():
with nt.assert_raises(ValueError):
c = interactive(f, tup=(1,1))
with nt.assert_raises(ValueError):
c = interactive(f, tup=(1,-1))
for min, max in [ (0,1), (1,10), (1,2), (-5,5), (-20,-19) ]:
c = interactive(f, tup=(min, max), lis=[min, max])
Jonathan Frederic
Fix interact test
r20234 nt.assert_equal(len(c.children), 3)
MinRK
test widget interaction (Python)
r15153 d = dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
test widget interaction (Python)
r15153 min=min,
max=max,
step=1,
MinRK
set readout=True as default on SliderWidgets
r15159 readout=True,
MinRK
test widget interaction (Python)
r15153 )
check_widgets(c, tup=d, lis=d)
def test_list_tuple_3_int():
with nt.assert_raises(ValueError):
c = interactive(f, tup=(1,2,0))
with nt.assert_raises(ValueError):
c = interactive(f, tup=(1,2,-1))
for min, max, step in [ (0,2,1), (1,10,2), (1,100,2), (-5,5,4), (-100,-20,4) ]:
c = interactive(f, tup=(min, max, step), lis=[min, max, step])
Jonathan Frederic
Fix interact test
r20234 nt.assert_equal(len(c.children), 3)
MinRK
test widget interaction (Python)
r15153 d = dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
test widget interaction (Python)
r15153 min=min,
max=max,
step=step,
MinRK
set readout=True as default on SliderWidgets
r15159 readout=True,
MinRK
test widget interaction (Python)
r15153 )
check_widgets(c, tup=d, lis=d)
def test_list_tuple_2_float():
with nt.assert_raises(ValueError):
c = interactive(f, tup=(1.0,1.0))
with nt.assert_raises(ValueError):
c = interactive(f, tup=(0.5,-0.5))
for min, max in [ (0.5, 1.5), (1.1,10.2), (1,2.2), (-5.,5), (-20,-19.) ]:
c = interactive(f, tup=(min, max), lis=[min, max])
Jonathan Frederic
Fix interact test
r20234 nt.assert_equal(len(c.children), 3)
MinRK
test widget interaction (Python)
r15153 d = dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.FloatSlider,
MinRK
test widget interaction (Python)
r15153 min=min,
max=max,
step=.1,
MinRK
set readout=True as default on SliderWidgets
r15159 readout=True,
MinRK
test widget interaction (Python)
r15153 )
check_widgets(c, tup=d, lis=d)
def test_list_tuple_3_float():
with nt.assert_raises(ValueError):
c = interactive(f, tup=(1,2,0.0))
with nt.assert_raises(ValueError):
c = interactive(f, tup=(-1,-2,1.))
with nt.assert_raises(ValueError):
c = interactive(f, tup=(1,2.,-1.))
for min, max, step in [ (0.,2,1), (1,10.,2), (1,100,2.), (-5.,5.,4), (-100,-20.,4.) ]:
c = interactive(f, tup=(min, max, step), lis=[min, max, step])
Jonathan Frederic
Fix interact test
r20234 nt.assert_equal(len(c.children), 3)
MinRK
test widget interaction (Python)
r15153 d = dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.FloatSlider,
MinRK
test widget interaction (Python)
r15153 min=min,
max=max,
step=step,
MinRK
set readout=True as default on SliderWidgets
r15159 readout=True,
MinRK
test widget interaction (Python)
r15153 )
check_widgets(c, tup=d, lis=d)
def test_list_tuple_str():
values = ['hello', 'there', 'guy']
first = values[0]
c = interactive(f, tup=tuple(values), lis=list(values))
Jonathan Frederic
Fix interact test
r20234 nt.assert_equal(len(c.children), 3)
MinRK
test widget interaction (Python)
r15153 d = dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Dropdown,
MinRK
test widget interaction (Python)
r15153 value=first,
Nicholas Bollweg
squashing the whitespace changes
r20287 options=values
MinRK
test widget interaction (Python)
r15153 )
check_widgets(c, tup=d, lis=d)
def test_list_tuple_invalid():
for bad in [
(),
(5, 'hi'),
('hi', 5),
({},),
(None,),
]:
with nt.assert_raises(ValueError):
print(bad) # because there is no custom message in assert_raises
c = interactive(f, tup=bad)
def test_defaults():
@annotate(n=10)
MinRK
set default value from signature defaults in interact...
r15348 def f(n, f=4.5, g=1):
MinRK
test widget interaction (Python)
r15153 pass
c = interactive(f)
check_widgets(c,
n=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
test widget interaction (Python)
r15153 value=10,
),
f=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.FloatSlider,
MinRK
test widget interaction (Python)
r15153 value=4.5,
),
MinRK
set default value from signature defaults in interact...
r15348 g=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
set default value from signature defaults in interact...
r15348 value=1,
),
)
def test_default_values():
MinRK
further tests for default values in interact...
r15399 @annotate(n=10, f=(0, 10.), g=5, h={'a': 1, 'b': 2}, j=['hi', 'there'])
def f(n, f=4.5, g=1, h=2, j='there'):
MinRK
set default value from signature defaults in interact...
r15348 pass
c = interactive(f)
check_widgets(c,
n=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
set default value from signature defaults in interact...
r15348 value=10,
),
f=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.FloatSlider,
MinRK
set default value from signature defaults in interact...
r15348 value=4.5,
),
g=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
set default value from signature defaults in interact...
r15348 value=5,
),
MinRK
further tests for default values in interact...
r15399 h=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Dropdown,
Nicholas Bollweg
squashing the whitespace changes
r20287 options={'a': 1, 'b': 2},
MinRK
further tests for default values in interact...
r15399 value=2
),
j=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Dropdown,
Nicholas Bollweg
squashing the whitespace changes
r20287 options=['hi', 'there'],
MinRK
further tests for default values in interact...
r15399 value='there'
),
)
def test_default_out_of_bounds():
MinRK
undo failed changes...
r15401 @annotate(f=(0, 10.), h={'a': 1}, j=['hi', 'there'])
MinRK
further tests for default values in interact...
r15399 def f(f='hi', h=5, j='other'):
pass
c = interactive(f)
check_widgets(c,
f=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.FloatSlider,
MinRK
further tests for default values in interact...
r15399 value=5.,
),
h=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Dropdown,
Nicholas Bollweg
squashing the whitespace changes
r20287 options={'a': 1},
MinRK
undo failed changes...
r15401 value=1,
MinRK
further tests for default values in interact...
r15399 ),
j=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Dropdown,
Nicholas Bollweg
squashing the whitespace changes
r20287 options=['hi', 'there'],
MinRK
undo failed changes...
r15401 value='hi',
MinRK
further tests for default values in interact...
r15399 ),
MinRK
test widget interaction (Python)
r15153 )
def test_annotations():
Jonathan Frederic
Fix interact tests for rename
r17599 @annotate(n=10, f=widgets.FloatText())
MinRK
test widget interaction (Python)
r15153 def f(n, f):
pass
c = interactive(f)
check_widgets(c,
n=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
test widget interaction (Python)
r15153 value=10,
),
f=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.FloatText,
MinRK
test widget interaction (Python)
r15153 ),
)
def test_priority():
@annotate(annotate='annotate', kwarg='annotate')
def f(kwarg='default', annotate='default', default='default'):
pass
c = interactive(f, kwarg='kwarg')
check_widgets(c,
kwarg=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
MinRK
test widget interaction (Python)
r15153 value='kwarg',
),
annotate=dict(
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
MinRK
test widget interaction (Python)
r15153 value='annotate',
),
)
@nt.with_setup(clear_display)
def test_decorator_kwarg():
with tt.monkeypatch(interaction, 'display', record_display):
@interact(a=5)
def foo(a):
pass
nt.assert_equal(len(displayed), 1)
w = displayed[0].children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
test widget interaction (Python)
r15153 value=5,
)
@nt.with_setup(clear_display)
Min RK
allow interact(instancemethod)...
r19930 def test_interact_instancemethod():
class Foo(object):
def show(self, x):
print(x)
f = Foo()
with tt.monkeypatch(interaction, 'display', record_display):
g = interact(f.show, x=(1,10))
nt.assert_equal(len(displayed), 1)
w = displayed[0].children[0]
check_widget(w,
cls=widgets.IntSlider,
value=5,
)
@nt.with_setup(clear_display)
MinRK
test widget interaction (Python)
r15153 def test_decorator_no_call():
with tt.monkeypatch(interaction, 'display', record_display):
@interact
def foo(a='default'):
pass
nt.assert_equal(len(displayed), 1)
w = displayed[0].children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
MinRK
test widget interaction (Python)
r15153 value='default',
)
@nt.with_setup(clear_display)
def test_call_interact():
def foo(a='default'):
pass
with tt.monkeypatch(interaction, 'display', record_display):
ifoo = interact(foo)
nt.assert_equal(len(displayed), 1)
w = displayed[0].children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
MinRK
test widget interaction (Python)
r15153 value='default',
)
@nt.with_setup(clear_display)
def test_call_interact_kwargs():
def foo(a='default'):
pass
with tt.monkeypatch(interaction, 'display', record_display):
ifoo = interact(foo, a=10)
nt.assert_equal(len(displayed), 1)
w = displayed[0].children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.IntSlider,
MinRK
test widget interaction (Python)
r15153 value=10,
)
@nt.with_setup(clear_display)
def test_call_decorated_on_trait_change():
"""test calling @interact decorated functions"""
d = {}
with tt.monkeypatch(interaction, 'display', record_display):
@interact
def foo(a='default'):
d['a'] = a
return a
nt.assert_equal(len(displayed), 1)
w = displayed[0].children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
MinRK
test widget interaction (Python)
r15153 value='default',
)
# test calling the function directly
a = foo('hello')
nt.assert_equal(a, 'hello')
nt.assert_equal(d['a'], 'hello')
# test that setting trait values calls the function
w.value = 'called'
nt.assert_equal(d['a'], 'called')
@nt.with_setup(clear_display)
def test_call_decorated_kwargs_on_trait_change():
"""test calling @interact(foo=bar) decorated functions"""
d = {}
with tt.monkeypatch(interaction, 'display', record_display):
@interact(a='kwarg')
def foo(a='default'):
d['a'] = a
return a
nt.assert_equal(len(displayed), 1)
w = displayed[0].children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
MinRK
test widget interaction (Python)
r15153 value='kwarg',
)
# test calling the function directly
a = foo('hello')
nt.assert_equal(a, 'hello')
nt.assert_equal(d['a'], 'hello')
# test that setting trait values calls the function
w.value = 'called'
nt.assert_equal(d['a'], 'called')
def test_fixed():
c = interactive(f, a=widgets.fixed(5), b='text')
Jonathan Frederic
Fix interact test
r20234 nt.assert_equal(len(c.children), 2)
MinRK
test widget interaction (Python)
r15153 w = c.children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
MinRK
test widget interaction (Python)
r15153 value='text',
description='b',
)
Jessica B. Hamrick
Add tests for default/custom description
r16658 def test_default_description():
c = interactive(f, b='text')
w = c.children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
Jessica B. Hamrick
Add tests for default/custom description
r16658 value='text',
description='b',
)
def test_custom_description():
Min RK
test that custom description doesn't change kwarg
r20027 d = {}
def record_kwargs(**kwargs):
d.clear()
d.update(kwargs)
c = interactive(record_kwargs, b=widgets.Text(value='text', description='foo'))
Jessica B. Hamrick
Add tests for default/custom description
r16658 w = c.children[0]
check_widget(w,
Jonathan Frederic
Fix interact tests for rename
r17599 cls=widgets.Text,
Jessica B. Hamrick
Add tests for default/custom description
r16658 value='text',
description='foo',
)
Min RK
test that custom description doesn't change kwarg
r20027 w.value = 'different text'
nt.assert_equal(d, {'b': 'different text'})
Gordon Ball
Add tests for the on_demand option
r17072
Gordon Ball
s/choose/manual/g
r17923 def test_interact_manual_button():
c = interactive(f, __manual=True)
Gordon Ball
Add tests for the on_demand option
r17072 w = c.children[0]
Gordon Ball
Merge master
r17708 check_widget(w, cls=widgets.Button)
Gordon Ball
Add tests for the on_demand option
r17072
Gordon Ball
s/choose/manual/g
r17923 def test_interact_manual_nocall():
Gordon Ball
Add tests for the on_demand option
r17072 callcount = 0
def calltest(testarg):
callcount += 1
Gordon Ball
s/choose/manual/g
r17923 c = interactive(calltest, testarg=5, __manual=True)
Gordon Ball
Add tests for the on_demand option
r17072 c.children[0].value = 10
nt.assert_equal(callcount, 0)
Gordon Ball
Merge master
r17708
Gordon Ball
Remove tests for 4-5 tuples, add tests for validate logic
r17128 def test_int_range_logic():
Gordon Ball
Merge master
r17698 irsw = widgets.IntRangeSlider
Gordon Ball
Remove tests for 4-5 tuples, add tests for validate logic
r17128 w = irsw(value=(2, 4), min=0, max=6)
check_widget(w, cls=irsw, value=(2, 4), min=0, max=6)
w.value = (4, 2)
check_widget(w, cls=irsw, value=(2, 4), min=0, max=6)
Gordon Ball
Add a number of extra tests for the range widgets
r17683 w.value = (-1, 7)
check_widget(w, cls=irsw, value=(0, 6), min=0, max=6)
Gordon Ball
Remove tests for 4-5 tuples, add tests for validate logic
r17128 w.min = 3
Gordon Ball
Add a number of extra tests for the range widgets
r17683 check_widget(w, cls=irsw, value=(3, 6), min=3, max=6)
Gordon Ball
Remove tests for 4-5 tuples, add tests for validate logic
r17128 w.max = 3
check_widget(w, cls=irsw, value=(3, 3), min=3, max=3)
Gordon Ball
Add a number of extra tests for the range widgets
r17683
w.min = 0
w.max = 6
w.lower = 2
w.upper = 4
check_widget(w, cls=irsw, value=(2, 4), min=0, max=6)
w.value = (0, 1) #lower non-overlapping range
check_widget(w, cls=irsw, value=(0, 1), min=0, max=6)
w.value = (5, 6) #upper non-overlapping range
check_widget(w, cls=irsw, value=(5, 6), min=0, max=6)
w.value = (-1, 4) #semi out-of-range
check_widget(w, cls=irsw, value=(0, 4), min=0, max=6)
w.lower = 2
check_widget(w, cls=irsw, value=(2, 4), min=0, max=6)
w.value = (-2, -1) #wholly out of range
check_widget(w, cls=irsw, value=(0, 0), min=0, max=6)
w.value = (7, 8)
check_widget(w, cls=irsw, value=(6, 6), min=0, max=6)
with nt.assert_raises(ValueError):
w.min = 7
with nt.assert_raises(ValueError):
w.max = -1
with nt.assert_raises(ValueError):
w.lower = 5
with nt.assert_raises(ValueError):
w.upper = 1
Gordon Ball
Test case for setting only lower or upper, no sensible default so should be an error
r17704 w = irsw(min=2, max=3)
check_widget(w, min=2, max=3)
w = irsw(min=100, max=200)
check_widget(w, lower=125, upper=175, value=(125, 175))
Gordon Ball
Add a number of extra tests for the range widgets
r17683
with nt.assert_raises(ValueError):
irsw(value=(2, 4), lower=3)
with nt.assert_raises(ValueError):
irsw(value=(2, 4), upper=3)
with nt.assert_raises(ValueError):
irsw(value=(2, 4), lower=3, upper=3)
with nt.assert_raises(ValueError):
irsw(min=2, max=1)
Gordon Ball
Test case for setting only lower or upper, no sensible default so should be an error
r17704 with nt.assert_raises(ValueError):
irsw(lower=5)
with nt.assert_raises(ValueError):
irsw(upper=5)
Gordon Ball
Add a number of extra tests for the range widgets
r17683
Gordon Ball
Remove tests for 4-5 tuples, add tests for validate logic
r17128
def test_float_range_logic():
Gordon Ball
Merge master
r17698 frsw = widgets.FloatRangeSlider
Gordon Ball
Remove tests for 4-5 tuples, add tests for validate logic
r17128 w = frsw(value=(.2, .4), min=0., max=.6)
check_widget(w, cls=frsw, value=(.2, .4), min=0., max=.6)
w.value = (.4, .2)
check_widget(w, cls=frsw, value=(.2, .4), min=0., max=.6)
Gordon Ball
Add a number of extra tests for the range widgets
r17683 w.value = (-.1, .7)
check_widget(w, cls=frsw, value=(0., .6), min=0., max=.6)
Gordon Ball
Remove tests for 4-5 tuples, add tests for validate logic
r17128 w.min = .3
Gordon Ball
Add a number of extra tests for the range widgets
r17683 check_widget(w, cls=frsw, value=(.3, .6), min=.3, max=.6)
Gordon Ball
Remove tests for 4-5 tuples, add tests for validate logic
r17128 w.max = .3
check_widget(w, cls=frsw, value=(.3, .3), min=.3, max=.3)
Gordon Ball
Add a number of extra tests for the range widgets
r17683
w.min = 0.
w.max = .6
w.lower = .2
w.upper = .4
check_widget(w, cls=frsw, value=(.2, .4), min=0., max=.6)
w.value = (0., .1) #lower non-overlapping range
check_widget(w, cls=frsw, value=(0., .1), min=0., max=.6)
w.value = (.5, .6) #upper non-overlapping range
check_widget(w, cls=frsw, value=(.5, .6), min=0., max=.6)
w.value = (-.1, .4) #semi out-of-range
check_widget(w, cls=frsw, value=(0., .4), min=0., max=.6)
w.lower = .2
check_widget(w, cls=frsw, value=(.2, .4), min=0., max=.6)
w.value = (-.2, -.1) #wholly out of range
check_widget(w, cls=frsw, value=(0., 0.), min=0., max=.6)
w.value = (.7, .8)
check_widget(w, cls=frsw, value=(.6, .6), min=.0, max=.6)
with nt.assert_raises(ValueError):
w.min = .7
with nt.assert_raises(ValueError):
w.max = -.1
with nt.assert_raises(ValueError):
w.lower = .5
with nt.assert_raises(ValueError):
w.upper = .1
Gordon Ball
Test case for setting only lower or upper, no sensible default so should be an error
r17704 w = frsw(min=2, max=3)
check_widget(w, min=2, max=3)
w = frsw(min=1., max=2.)
check_widget(w, lower=1.25, upper=1.75, value=(1.25, 1.75))
Gordon Ball
Add a number of extra tests for the range widgets
r17683
with nt.assert_raises(ValueError):
frsw(value=(2, 4), lower=3)
with nt.assert_raises(ValueError):
frsw(value=(2, 4), upper=3)
with nt.assert_raises(ValueError):
frsw(value=(2, 4), lower=3, upper=3)
with nt.assert_raises(ValueError):
Gordon Ball
Merge master
r17698 frsw(min=.2, max=.1)
Gordon Ball
Test case for setting only lower or upper, no sensible default so should be an error
r17704 with nt.assert_raises(ValueError):
frsw(lower=5)
with nt.assert_raises(ValueError):
frsw(upper=5)
Nicholas Bollweg
squashing the whitespace changes
r20287
def test_multiple_selection():
smw = widgets.SelectMultiple
# degenerate multiple select
w = smw()
check_widget(w, value=tuple(), options=None, selected_labels=tuple())
# don't accept random other value when no options
with nt.assert_raises(KeyError):
w.value = (2,)
check_widget(w, value=tuple(), selected_labels=tuple())
# basic multiple select
w = smw(options=[(1, 1)], value=[1])
check_widget(w, cls=smw, value=(1,), options=[(1, 1)])
# don't accept random other value
with nt.assert_raises(KeyError):
w.value = w.value + (2,)
check_widget(w, value=(1,), selected_labels=(1,))
# change options
w.options = w.options + [(2, 2)]
check_widget(w, options=[(1, 1), (2,2)])
# change value
w.value = w.value + (2,)
check_widget(w, value=(1, 2), selected_labels=(1, 2))
# change value name
w.selected_labels = (1,)
check_widget(w, value=(1,))
# don't accept random other names when no options
with nt.assert_raises(KeyError):
w.selected_labels = (3,)
check_widget(w, value=(1,))
# don't accept selected_label (from superclass)
with nt.assert_raises(AttributeError):
w.selected_label = 3
# don't return selected_label (from superclass)
with nt.assert_raises(AttributeError):
print(w.selected_label)
# dict style
w.options = {1: 1}
check_widget(w, options={1: 1})
# updating
with nt.assert_raises(KeyError):
w.value = (2,)
check_widget(w, options={1: 1})