def test_float_slider(document, comm): slider = FloatSlider(start=0.1, end=0.5, value=0.4, name='Slider') widget = slider.get_root(document, comm=comm) assert isinstance(widget, slider._widget_type) assert widget.title == 'Slider' assert widget.step == 0.1 assert widget.start == 0.1 assert widget.end == 0.5 assert widget.value == 0.4 slider._process_events({'value': 0.2}) assert slider.value == 0.2 slider._process_events({'value_throttled': 0.2}) assert slider.value_throttled == 0.2 slider.value = 0.3 assert widget.value == 0.3 # Testing throttled mode with config.set(throttled=True): slider._process_events({'value': 0.4}) assert slider.value == 0.3 # no change slider._process_events({'value_throttled': 0.4}) assert slider.value == 0.4 slider.value = 0.5 assert widget.value == 0.5
def test_template_session_destroy(document, comm): tmplt = Template(template) widget = FloatSlider() row = Row('A', 'B') tmplt.add_panel('A', widget) tmplt.add_panel('B', row) tmplt._init_doc(document, comm, notebook=True) session_context = param.Parameterized() session_context._document = document session_context.id = 'Some ID' assert len(widget._models) == 2 assert len(row._models) == 2 assert len(row[0]._models) == 2 assert len(row[1]._models) == 2 for cb in document.session_destroyed_callbacks: cb(session_context) assert len(widget._models) == 0 assert len(row._models) == 0 assert len(row[0]._models) == 0 assert len(row[1]._models) == 0
def test_embed_slider_str_link(document, comm): slider = FloatSlider(start=0, end=10) string = Str() def link(target, event): target.object = event.new slider.link(string, callbacks={'value': link}) panel = Row(slider, string) with config.set(embed=True): model = panel.get_root(document, comm) embed_state(panel, model, document) _, state = document.roots assert set(state.state) == {0, 1, 2} values = [0, 5, 10] 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>%.1f</pre>' % values[k]
def test_embed_float_slider_explicit_values(document, comm): select = FloatSlider() 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, states={select: [0.1, 0.7, 1]}) _, state = document.roots assert set(state.state) == {0, 1, 2} states = {0: 0.1, 1: 0.7, 2: 1} 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>' % states[k]
def test_pnwidget_hvplot_links(document, comm): size_widget = FloatSlider(value=5, start=1, end=10) points1 = hv.Points([1, 2, 3]) size_widget.jslink(points1, value='glyph.size') row = Row(points1, size_widget) model = row._get_root(document, comm=comm) hv_views = row.select(HoloViews) widg_views = row.select(FloatSlider) assert len(hv_views) == 1 assert len(widg_views) == 1 slider = widg_views[0]._models[model.ref['id']] scatter = hv_views[0]._plots[model.ref['id']].handles['glyph'] link_customjs = slider.js_property_callbacks['change:value'][-1] assert link_customjs.args['source'] is slider assert link_customjs.args['target'] is scatter code = ( "value = source['value'];" "try { property = target.properties['size'];" "if (property !== undefined) { property.validate(value); } }" "catch(err) { console.log('WARNING: Could not set size on target, raised error: ' + err); return; }" "target['size'] = value") assert link_customjs.code == code
def test_embed_float_slider_explicit_values_out_of_bounds(document, comm): select = FloatSlider() 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: [0.1, 0.7, 2]})
def test_float_slider(document, comm): slider = FloatSlider(start=0.1, end=0.5, value=0.4, name='Slider') widget = slider.get_root(document, comm=comm) assert isinstance(widget, slider._widget_type) assert widget.title == 'Slider' assert widget.step == 0.1 assert widget.start == 0.1 assert widget.end == 0.5 assert widget.value == 0.4 slider._comm_change({'value': 0.2}) assert slider.value == 0.2 slider.value = 0.3 assert widget.value == 0.3
def test_basic_template(template, document, comm): tmplt = template(title='BasicTemplate', header_background='blue', header_color='red') tmplt._update_vars() tvars = tmplt._render_variables assert tvars['app_title'] == 'BasicTemplate' assert tvars['header_background'] == 'blue' assert tvars['header_color'] == 'red' assert tvars['nav'] == False assert tvars['busy'] == True assert tvars['header'] == False titems = tmplt._render_items assert titems['busy_indicator'] == (tmplt.busy_indicator, []) markdown = Markdown('# Some title') tmplt.main.append(markdown) assert titems[str(id(markdown))] == (markdown, ['main']) slider = FloatSlider() tmplt.sidebar.append(slider) assert titems[str(id(slider))] == (slider, ['nav']) assert tvars['nav'] == True tmplt.sidebar[:] = [] assert tvars['nav'] == False assert str(id(slider)) not in titems subtitle = Markdown('## Some subtitle') tmplt.header.append(subtitle) assert titems[str(id(subtitle))] == (subtitle, ['header']) assert tvars['header'] == True tmplt.header[:] = [] assert str(id(subtitle)) not in titems assert tvars['header'] == False
def test_embed_continuous(document, comm): select = FloatSlider(start=0, end=10) 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) == {0, 1, 2} values = [0, 5, 10] 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>%.1f</pre>' % values[k]
def test_float_slider(document, comm): slider = FloatSlider(start=0.1, end=0.5, value=0.4, name='Slider') box = slider._get_model(document, comm=comm) assert isinstance(box, WidgetBox) widget = box.children[0] assert isinstance(widget, slider._widget_type) assert widget.title == 'Slider' assert widget.step == 0.1 assert widget.start == 0.1 assert widget.end == 0.5 assert widget.value == 0.4 slider._comm_change({'value': 0.2}) assert slider.value == 0.2 slider.value = 0.3 assert widget.value == 0.3
def test_embed_slider_str_jslink(document, comm): slider = FloatSlider(start=0, end=10) string = Str() slider.link(string, value='object') panel = Row(slider, 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 slider._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 == """