def test_select_disabled_options_init(options, size, document, comm): select = Select(options=options, disabled_options=[20], size=size) widget = select.get_root(document, comm=comm) assert isinstance(widget, select._widget_type) assert widget.disabled_options == [20]
def test_embed_select_str_link_two_steps(document, comm): select = Select(options=['A', 'B', 'C']) string1 = Str() select.link(string1, value='object') string2 = Str() string1.link(string2, object='object') panel = Row(select, string1, string2) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {'A', 'B', 'C'} for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 2 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%s</pre>' % k event = events[1] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[2].ref assert event['new'] == '<pre>%s</pre>' % k
def test_select_float_option_with_equality(): opts = {'A': 3.14, '1': 2.0} select = Select(options=opts, value=3.14, name='Select') assert select.value == 3.14 select.value = 2 assert select.value == 2.0 select.value = 3.14 assert select.value == 3.14
def test_select_text_option_with_equality(): opts = {'A': 'ABC', '1': 'DEF'} select = Select(options=opts, value='DEF', name='Select') assert select.value == 'DEF' select.value = 'ABC' assert select.value == 'ABC' select.value = 'DEF' assert select.value == 'DEF'
def test_select_disabled_options_set_value_and_disabled_options( options, size, document, comm): select = Select(options=options, disabled_options=[20], size=size) select.param.set_param(value=20, disabled_options=[10]) widget = select.get_root(document, comm=comm) assert widget.value == '20' assert select.value == 20 assert widget.disabled_options == [10]
def test_embed_select_str_explicit_values_not_found(document, comm): select = Select(options=['A', 'B', 'C']) string = Str() def link(target, event): target.object = event.new select.link(string, callbacks={'value': link}) panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) with pytest.raises(ValueError): embed_state(panel, model, document, states={select: ['A', 'D']})
def test_select_change_options(document, comm): opts = {'A': 'a', '1': 1} select = Select(options=opts, value=opts['1'], name='Select') widget = select.get_root(document, comm=comm) select.options = {'A': 'a'} assert select.value == opts['A'] assert widget.value == as_unicode(opts['A']) select.options = {} assert select.value == None assert widget.value == ''
def test_select_non_hashable_options(document, comm): opts = {'A': np.array([1, 2, 3]), '1': np.array([3, 4, 5])} select = Select(options=opts, value=opts['1'], name='Select') widget = select.get_root(document, comm=comm) select.value = opts['A'] assert select.value is opts['A'] assert widget.value == as_unicode(opts['A']) opts.pop('A') select.options = opts assert select.value is opts['1'] assert widget.value == as_unicode(opts['1'])
def test_select_change_options_on_watch(document, comm): select = Select(options=OrderedDict([('A', 'A'), ('1', 1), ('C', object)]), value='A', name='Select') def set_options(event): if event.new == 1: select.options = OrderedDict([('D', 2), ('E', 'a')]) select.param.watch(set_options, 'value') model = select.get_root(document, comm=comm) select.value = 1 assert model.value == as_unicode(list(select.options.values())[0]) assert model.options == [(as_unicode(v),k) for k,v in select.options.items()]
def test_select_mutables(document, comm): opts = OrderedDict([('A', [1, 2, 3]), ('B', [2, 4, 6]), ('C', dict(a=1, b=2))]) select = Select(options=opts, value=opts['B'], name='Select') box = select._get_model(document, comm=comm) assert isinstance(box, WidgetBox) widget = box.children[0] assert isinstance(widget, select._widget_type) assert widget.title == 'Select' assert widget.value == 'B' assert widget.options == ['A', 'B', 'C'] widget.value = 'B' select._comm_change({'value': 'A'}) assert select.value == opts['A'] widget.value = 'B' select._comm_change({'value': 'B'}) assert select.value == opts['B'] select.value = opts['A'] assert widget.value == 'A'
def test_select_change_groups(document, comm): groups = dict(A=dict(a=1, b=2), B=dict(c=3)) select = Select(value=groups['A']['a'], groups=groups, name='Select') widget = select.get_root(document, comm=comm) new_groups = dict(C=dict(d=4), D=dict(e=5, f=6)) select.groups = new_groups assert select.value == new_groups['C']['d'] assert widget.value == str(new_groups['C']['d']) assert widget.options == {'C': [('4', 'd')], 'D': [('5', 'e'), ('6', 'f')]} select.groups = {} assert select.value == None assert widget.value == ''
def test_holoviews_widgets_explicit_widget_instance_override(): hmap = hv.HoloMap({(i, chr(65+i)): hv.Curve([i]) for i in range(3)}, kdims=['X', 'Y']) widget = Select(options=[1, 2, 3], value=3) widgets, _ = HoloViews.widgets_from_dimensions(hmap, widget_types={'X': widget}) assert widgets[0] is widget
def test_embed_param_jslink(document, comm): select = Select(options=['A', 'B', 'C']) params = Param(select, parameters=['disabled']).layout panel = Row(select, params) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) assert len(document.roots) == 1 ref = model.ref['id'] cbs = list(model.select({'type': CustomJS})) assert len(cbs) == 2 cb1, cb2 = cbs cb1, cb2 = (cb1, cb2) if select._models[ref][0] is cb1.args['target'] else (cb2, cb1) assert cb1.code == """ var value = source['active']; value = value.indexOf(0) >= 0; value = value; try { var property = target.properties['disabled']; if (property !== undefined) { property.validate(value); } } catch(err) { console.log('WARNING: Could not set disabled on target, raised error: ' + err); return; } try { target['disabled'] = value; } catch(err) { console.log(err) } """ assert cb2.code == """
def test_select_change_options_on_watch(document, comm): select = Select(options=OrderedDict([('A', 'A'), ('1', 1), ('C', object)]), value='A', name='Select') def set_options(event): if event.new == 1: select.options = OrderedDict([('D', 2), ('E', 'a')]) select.param.watch(set_options, 'value') model = select._get_root(document, comm=comm) select.value = 1 assert model.value == 'D' assert model.options == ['D', 'E']
def test_embed_discrete(document, comm): select = Select(options=['A', 'B', 'C']) string = Str() select.link(string, value='object') panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {'A', 'B', 'C'} for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%s</pre>' % k
def test_embed_select_str_jslink(document, comm): select = Select(options=['A', 'B', 'C']) string = Str() select.link(string, value='object') panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) assert len(document.roots) == 1 assert model is document.roots[0] ref = model.ref['id'] cbs = list(model.select({'type': CustomJS})) assert len(cbs) == 2 cb1, cb2 = cbs cb1, cb2 = (cb1, cb2) if select._models[ref][0] is cb1.args['source'] else (cb2, cb1) assert cb1.code == """ var value = source['value']; value = value; value = JSON.stringify(value).replace(/,/g, ", ").replace(/:/g, ": "); try { var property = target.properties['text']; if (property !== undefined) { property.validate(value); } } catch(err) { console.log('WARNING: Could not set text on target, raised error: ' + err); return; } try { target['text'] = value; } catch(err) { console.log(err) } """ assert cb2.code == """
def test_embed_select_str_link(document, comm): select = Select(options=['A', 'B', 'C']) string = Str() def link(target, event): target.object = event.new select.link(string, callbacks={'value': link}) panel = Row(select, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {'A', 'B', 'C'} for k, v in state.state.items(): content = json.loads(v['content']) assert 'events' in content events = content['events'] assert len(events) == 1 event = events[0] assert event['kind'] == 'ModelChanged' assert event['attr'] == 'text' assert event['model'] == model.children[1].ref assert event['new'] == '<pre>%s</pre>' % k
def test_select_groups_dict_options(document, comm): groups = dict(A=dict(a=1, b=2), B=dict(c=3)) select = Select(value=groups['A']['a'], groups=groups, name='Select') widget = select.get_root(document, comm=comm) assert isinstance(widget, select._widget_type) assert widget.title == 'Select' assert widget.value == str(groups['A']['a']) assert widget.options == {'A': [('1', 'a'), ('2', 'b')], 'B': [('3', 'c')]} select._process_events({'value': str(groups['B']['c'])}) assert select.value == groups['B']['c'] select._process_events({'value': str(groups['A']['b'])}) assert select.value == groups['A']['b'] select.value = groups['A']['a'] assert widget.value == str(groups['A']['a'])
def test_select(document, comm): opts = {'A': 'a', '1': 1} select = Select(options=opts, value=opts['1'], name='Select') widget = select._get_root(document, comm=comm) assert isinstance(widget, select._widget_type) assert widget.title == 'Select' assert widget.value == '1' assert widget.options == ['A', '1'] select._comm_change({'value': 'A'}) assert select.value == opts['A'] widget.value = '1' select._comm_change({'value': '1'}) assert select.value == opts['1'] select.value = opts['A'] assert widget.value == 'A'
def test_select_groups_error_with_options(): # Instantiate with groups and options with pytest.raises(ValueError): Select(options=[1, 2], groups=dict(a=[1], b=[2]), name='Select') opts = [1, 2, 3] groups = dict(a=[1, 2], b=[3]) # Instamtiate with options and then update groups select = Select(options=opts, name='Select') with pytest.raises(ValueError): select.groups = groups # Instantiate with groups and then update options select = Select(groups=groups, name='Select') with pytest.raises(ValueError): select.options = opts
def test_select_mutables(document, comm): opts = OrderedDict([('A', [1,2,3]), ('B', [2,4,6]), ('C', dict(a=1,b=2))]) select = Select(options=opts, value=opts['B'], name='Select') widget = select.get_root(document, comm=comm) assert isinstance(widget, select._widget_type) assert widget.title == 'Select' assert widget.value == as_unicode(opts['B']) assert widget.options == [(as_unicode(v),k) for k,v in opts.items()] widget.value = as_unicode(opts['B']) select._comm_change({'value': as_unicode(opts['A'])}) assert select.value == opts['A'] widget.value = as_unicode(opts['B']) select._comm_change({'value': as_unicode(opts['B'])}) assert select.value == opts['B'] select.value = opts['A'] assert widget.value == as_unicode(opts['A'])
def test_select_groups_list_options(document, comm): groups = dict(a=[1, 2], b=[3]) select = Select(value=groups['a'][0], groups=groups, name='Select') widget = select.get_root(document, comm=comm) assert isinstance(widget, select._widget_type) assert widget.title == 'Select' assert widget.value == str(groups['a'][0]) assert widget.options == { gr: [(str(v), str(v)) for v in values] for gr, values in groups.items() } select._process_events({'value': str(groups['a'][1])}) assert select.value == groups['a'][1] select._process_events({'value': str(groups['a'][0])}) assert select.value == groups['a'][0] select.value = groups['a'][1] assert widget.value == str(groups['a'][1])
def test_select(document, comm): opts = {'A': 'a', '1': 1} select = Select(options=opts, value=opts['1'], name='Select') widget = select.get_root(document, comm=comm) assert isinstance(widget, select._widget_type) assert widget.title == 'Select' assert widget.value == as_unicode(opts['1']) assert widget.options == [(as_unicode(v), k) for k, v in opts.items()] select._process_events({'value': as_unicode(opts['A'])}) assert select.value == opts['A'] widget.value = as_unicode(opts['1']) select.value = opts['1'] assert select.value == opts['1'] select.value = opts['A'] assert widget.value == as_unicode(opts['A'])
def test_select_disabled_options_error_set_disabled_options(options, size): select = Select(value=20, options=options, size=size) with pytest.raises(ValueError, match='Cannot set disabled_options'): select.disabled_options = [20]
def test_select_disabled_options_error_on_init(options, size): with pytest.raises(ValueError, match='as it is one of the disabled options'): Select(options=options, disabled_options=[10])
def test_select_list_constructor(): select = Select(options=['A', 1], value=1) assert select.options == ['A', 1]
def test_select_disabled_options_error_set_value(options, size): select = Select(options=options, disabled_options=[20], size=size) with pytest.raises(ValueError, match='as it is a disabled option'): select.value = 20
def test_select_disabled_options_all_raises_error_after_init(options, size): select = Select(options=options, size=size) with pytest.raises(ValueError, match='All the options'): select.disabled_options = [10, 20]
def test_select_disabled_options_error_disabled_options_not_in_options( options, size): with pytest.raises(ValueError, match='Cannot disable non existing options'): Select(options=options, disabled_options=[30], size=size)