def test_server_bar_color_updates(self, bokeh_server_page) -> None: def modify_doc(doc): plot = Plot(plot_height=400, plot_width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0) slider = RangeSlider(start=0, end=10, value=(1, 5), title="bar", css_classes=["foo"], width=300) def cb(attr, old, new): slider.bar_color = "rgba(255, 255, 0, 1)" slider.on_change('value', cb) doc.add_root(column(slider, plot)) page = bokeh_server_page(modify_doc) drag_range_slider(page.driver, ".foo", "lower", 150) sleep(1) # noUiSlider does a transition that takes some time assert get_slider_bar_color(page.driver, ".foo") == "rgba(255, 255, 0, 1)"
def test_server_on_change_round_trip(self, bokeh_server_page) -> None: def modify_doc(doc): source = ColumnDataSource(dict(x=[1, 2], y=[1, 1], val=["a", "b"])) plot = Plot(plot_height=400, plot_width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0) plot.add_glyph(source, Circle(x='x', y='y', size=20)) plot.add_tools(CustomAction(callback=CustomJS(args=dict(s=source), code=RECORD("data", "s.data")))) slider = DateRangeSlider(start=start, end=end, value=value, css_classes=["foo"], width=300) def cb(attr, old, new): source.data['val'] = [slider.value_as_date[0].isoformat(), slider.value_as_date[1].isoformat()] slider.on_change('value', cb) doc.add_root(column(slider, plot)) page = bokeh_server_page(modify_doc) drag_range_slider(page.driver, ".foo", "lower", 50) page.click_custom_action() results = page.results new = results['data']['val'] assert new[0] > '2017-08-04' drag_range_slider(page.driver, ".foo", "upper", -50) page.click_custom_action() results = page.results new = results['data']['val'] assert new[1] < '2017-08-09'
def test_js_on_change_executes(self, bokeh_model_page) -> None: slider = RangeSlider(start=0, end=10, value=(1, 5), title="bar", css_classes=["foo"], width=300) slider.js_on_change('value', CustomJS(code=RECORD("value", "cb_obj.value"))) page = bokeh_model_page(slider) drag_range_slider(page.driver, ".foo", "lower", 150) results = page.results assert float(results['value'][0]) > 1 assert float(results['value'][1]) == 5 drag_range_slider(page.driver, ".foo", "lower", 150) results = page.results assert float(results['value'][0]) > 1 assert float(results['value'][1]) > 5 assert page.has_no_console_errors()
def test_server_bar_color_updates( self, bokeh_server_page: BokehServerPage) -> None: slider = DateRangeSlider(start=start, end=end, value=value, width=300, bar_color="red") def modify_doc(doc): plot = Plot(height=400, width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0) def cb(attr, old, new): slider.bar_color = "rgba(255, 255, 0, 1)" slider.on_change('value', cb) doc.add_root(column(slider, plot)) page = bokeh_server_page(modify_doc) drag_range_slider(page.driver, slider, "lower", 150) sleep(1) # noUiSlider does a transition that takes some time assert get_slider_bar_color(page.driver, slider) == "rgba(255, 255, 0, 1)"
def test_js_on_change_executes(self, bokeh_model_page) -> None: slider = DateRangeSlider(start=start, end=end, value=value, css_classes=["foo"], width=300) slider.js_on_change('value', CustomJS(code=RECORD("value", "cb_obj.value"))) page = bokeh_model_page(slider) drag_range_slider(page.driver, ".foo", "lower", 50) results = page.results assert datetime.fromtimestamp(results['value'][0]/1000) > datetime(*date.fromisoformat("2017-08-04").timetuple()[:3]) drag_range_slider(page.driver, ".foo", "upper", -70) assert datetime.fromtimestamp(results['value'][1]/1000) < datetime(*date.fromisoformat("2017-08-09").timetuple()[:3]) assert page.has_no_console_errors()
def test_title_updates(self, bokeh_model_page) -> None: slider = DateRangeSlider(start=start, end=end, value=value, css_classes=["foo"], width=300) page = bokeh_model_page(slider) assert get_slider_title_value(page.driver, ".foo") == "04 Aug 2017 .. 09 Aug 2017" drag_range_slider(page.driver, ".foo", "lower", 50) val = get_slider_title_value(page.driver, ".foo").split(" .. ")[0] assert val > "04 Aug 2017" drag_range_slider(page.driver, ".foo", "lower", -70) val = get_slider_title_value(page.driver, ".foo").split(" .. ")[0] assert val == "03 Aug 2017" assert page.has_no_console_errors()
def test_server_on_change_round_trip( self, bokeh_server_page: BokehServerPage) -> None: slider = DatetimeRangeSlider(start=start, end=end, value=value, width=300) def modify_doc(doc): source = ColumnDataSource(dict(x=[1, 2], y=[1, 1], val=["a", "b"])) plot = Plot(height=400, width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0) plot.add_glyph(source, Circle(x='x', y='y', size=20)) plot.tags.append( CustomJS(name="custom-action", args=dict(s=source), code=RECORD("data", "s.data"))) def cb(attr, old, new): source.data['val'] = [ slider.value_as_datetime[0].isoformat(), slider.value_as_datetime[1].isoformat() ] slider.on_change('value', cb) doc.add_root(column(slider, plot)) page = bokeh_server_page(modify_doc) drag_range_slider(page.driver, slider, "lower", 5) page.eval_custom_action() results = page.results new = results['data']['val'] assert new[0] > '2022-02-01' drag_range_slider(page.driver, slider, "upper", -5) page.eval_custom_action() results = page.results new = results['data']['val'] assert new[1] < '2022-03-25'
def test_title_updates(self, bokeh_model_page: BokehModelPage) -> None: slider = DatetimeRangeSlider(start=start, end=end, value=value, width=300) page = bokeh_model_page(slider) assert get_slider_title_value( page.driver, slider) == '02 Feb 2022 05:04:03 .. 24 Mar 2022 12:34:56' drag_range_slider(page.driver, slider, "lower", 5) val = get_slider_title_value(page.driver, slider).split(" .. ")[0] assert val[:11] == "03 Feb 2022" drag_range_slider(page.driver, slider, "upper", -5) val = get_slider_title_value(page.driver, slider).split(" .. ")[1] assert val[:11] == "23 Mar 2022" assert page.has_no_console_errors()
def test_title_updates(self, bokeh_model_page) -> None: slider = RangeSlider(start=0, end=10, value=(1, 9), title="bar", css_classes=["foo"], width=300) page = bokeh_model_page(slider) assert get_slider_title_value(page.driver, ".foo") == "1 .. 9" drag_range_slider(page.driver, ".foo", "lower", 50) value = get_slider_title_value(page.driver, ".foo").split()[0] assert float(value) > 1 assert float(value) == int(value) # integral step size # don't go past upper handle drag_range_slider(page.driver, ".foo", "lower", 50) value = get_slider_title_value(page.driver, ".foo").split()[0] assert float(value) > 2 drag_range_slider(page.driver, ".foo", "lower", -135) value = get_slider_title_value(page.driver, ".foo").split()[0] assert float(value) == 0 assert page.has_no_console_errors()
def test_server_on_change_round_trip( self, bokeh_server_page: BokehServerPage) -> None: slider = RangeSlider(start=0, end=10, value=(1, 9), title="bar", width=300) def modify_doc(doc): source = ColumnDataSource(dict(x=[1, 2], y=[1, 1], val=["a", "b"])) plot = Plot(height=400, width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0) plot.add_glyph(source, Circle(x='x', y='y', size=20)) plot.tags.append( CustomJS(name="custom-action", args=dict(s=source), code=RECORD("data", "s.data"))) def cb(attr, old, new): source.data['val'] = [old, new] slider.on_change('value', cb) doc.add_root(column(slider, plot)) page = bokeh_server_page(modify_doc) drag_range_slider(page.driver, slider, "lower", 50) page.eval_custom_action() results = page.results old, new = results['data']['val'] assert float(old[0]) == 1 assert float(new[0]) > 1 drag_range_slider(page.driver, slider, "lower", 50) page.eval_custom_action() results = page.results old, new = results['data']['val'] assert float(new[0]) > 2 drag_range_slider(page.driver, slider, "lower", -135) page.eval_custom_action() results = page.results old, new = results['data']['val'] assert float(new[0]) == 0