def test_js_on_change_executes(self,
                                   single_plot_page: SinglePlotPage) -> None:
        source = ColumnDataSource(dict(x=[1, 2], y=[1, 1]))
        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))
        num_input = NumericInput()
        num_input.js_on_change('value',
                               CustomJS(code=RECORD("value", "cb_obj.value")))

        page = single_plot_page(column(num_input, plot))

        el = find_element_for(page.driver, num_input, "input")
        enter_text_in_element(page.driver, el, "10")

        results = page.results
        assert results['value'] == 10

        # double click to highlight and overwrite old text
        enter_text_in_element(page.driver, el, "20", click=2)

        results = page.results
        assert results['value'] == 20

        # Check clicking outside input also triggers
        enter_text_in_element(page.driver, el, "30", click=2, enter=False)
        page.click_canvas_at_position(plot, 10, 10)
        results = page.results

        assert results['value'] == 30

        assert page.has_no_console_errors()
    def test_float_inputs(self, single_plot_page: SinglePlotPage) -> None:

        values_to_enter = [
            "0", "1", "-1", "+5", "0.1", "-0.1", "+0.1", "-.1", "+.1", "1e-6",
            "1.e5", "-1e+3", "-1.e-5", "a"
        ]

        expected_results = [
            0, 1, -1, 5, 0.1, -0.1, 0.1, -0.1, 0.1, 1e-6, 10, -1e3, -1e-5, None
        ]

        source = ColumnDataSource(dict(x=[1, 2], y=[1, 1]))
        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))
        num_input = NumericInput(high=10, mode="float")
        num_input.js_on_change('value',
                               CustomJS(code=RECORD("value", "cb_obj.value")))

        page = single_plot_page(column(num_input, plot))
        el = find_element_for(page.driver, num_input, "input")

        for val, res in zip(values_to_enter, expected_results):
            el.clear()
            enter_text_in_element(page.driver, el, val)

            results = page.results
            assert results['value'] == res
    def test_server_on_change_round_trip(
            self, bokeh_server_page: BokehServerPage) -> None:
        num_input = NumericInput(low=-1, high=100, value=4)
        modify_doc, plot = mk_modify_doc(num_input)
        page = bokeh_server_page(modify_doc)

        el = find_element_for(page.driver, num_input, "input")
        enter_text_in_element(page.driver, el, "2")

        page.eval_custom_action()

        results = page.results
        assert results['data']['val'] == [4, 42]

        # double click to highlight and overwrite old text
        enter_text_in_element(page.driver, el, "34", click=2)

        page.eval_custom_action()

        results = page.results
        assert results['data']['val'] == [42, 34]

        # Check clicking outside input also triggers
        enter_text_in_element(page.driver, el, "56", click=2, enter=False)
        page.click_canvas_at_position(plot, 10, 10)

        page.eval_custom_action()

        results = page.results
        assert results['data']['val'] == [34, 56]
    def test_display_number_input(self,
                                  bokeh_model_page: BokehModelPage) -> None:
        num_input = NumericInput()
        page = bokeh_model_page(num_input)

        el = find_element_for(page.driver, num_input, "input")
        assert el.get_attribute('type') == "text"

        assert page.has_no_console_errors()
Example #5
0
    def test_display_number_input(self, bokeh_model_page) -> None:
        num_input = NumericInput(css_classes=["foo"])

        page = bokeh_model_page(num_input)

        el = page.driver.find_element_by_css_selector('.foo input')
        assert el.get_attribute('type') == "text"

        assert page.has_no_console_errors()
    def test_displays_placeholder(self,
                                  bokeh_model_page: BokehModelPage) -> None:
        num_input = NumericInput(placeholder="placeholder")
        page = bokeh_model_page(num_input)

        el = find_element_for(page.driver, num_input, "label")
        assert el.text == ""
        el = find_element_for(page.driver, num_input, "input")
        assert el.get_attribute('placeholder') == "placeholder"
        assert el.get_attribute('type') == "text"
Example #7
0
    def test_displays_placeholder(self, bokeh_model_page) -> None:
        num_input = NumericInput(placeholder="placeholder",
                                 css_classes=["foo"])

        page = bokeh_model_page(num_input)

        el = page.driver.find_element_by_css_selector('.foo label')
        assert el.text == ""
        el = page.driver.find_element_by_css_selector('.foo input')
        assert el.get_attribute('placeholder') == "placeholder"
        assert el.get_attribute('type') == "text"
Example #8
0
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'))
    plot.add_tools(
        CustomAction(callback=CustomJS(args=dict(s=source),
                                       code=RECORD("data", "s.data"))))
    num_input = NumericInput(low=-1, high=100, value=4, css_classes=["foo"])

    def cb(attr, old, new):
        source.data['val'] = [old, new]

    num_input.on_change('value', cb)
    doc.add_root(column(num_input, plot))
    return doc
    def test_low_high(self, single_plot_page: SinglePlotPage) -> None:
        source = ColumnDataSource(dict(x=[1, 2], y=[1, 1]))
        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))
        num_input = NumericInput(value=4, low=-1, high=10)
        num_input.js_on_change('value',
                               CustomJS(code=RECORD("value", "cb_obj.value")))

        page = single_plot_page(column(num_input, plot))

        el = find_element_for(page.driver, num_input, "input")
        assert el.get_attribute('value') == "4"

        enter_text_in_element(page.driver, el, "30", click=2)
        assert el.get_attribute('value') == "10"

        enter_text_in_element(page.driver, el, "-10", click=2)
        assert el.get_attribute('value') == "-1"
Example #10
0
    def test_server_on_change_no_round_trip_without_enter_or_click(
            self, bokeh_server_page: BokehServerPage) -> None:
        num_input = NumericInput(low=-1, high=100, value=4)
        modify_doc, _ = mk_modify_doc(num_input)
        page = bokeh_server_page(modify_doc)

        el = find_element_for(page.driver, num_input, "input")
        enter_text_in_element(
            page.driver, el, "pre",
            enter=False)  # not change event if enter is not pressed

        page.eval_custom_action()

        results = page.results
        assert results['data']['val'] == ["a", "b"]
Example #11
0
method.on_change('value', lambda attr, old, new: setInfo(title=new))
# 障碍物类型
impedimentType = Select(title='障碍类型', value='矩形障碍_设置', options=['矩形障碍_设置', '随机矩形', '随机圆', '随机矩形+随机圆'])
impedimentType.on_change('value', lambda attr, old, new: setInfo(imType=new))
# 在x情况下执行 算法 新增点
newNode = [Button(label='刷新随机', width=120, button_type="primary"),
           Button(label='► 开始', width=60, button_type="primary")]
newNode[0].on_click(reFlash)
newNode[1].on_click(buttonOnchange)
setInfo(newNode=newNode)
# goal 的半径
goalRadius = Slider(title="目标点的半径", value=1, start=1, end=max(initInfo.get('xlen'), initInfo.get('ylen')) / 10, step=1)
goalRadius.on_change('value', lambda attr, old, new: setInfo(goalRadius=new))

# input test
start_x = NumericInput(title='start_x', value=min(initInfo.get('startPoint')[0], initInfo.get('xlen') - 1), low=0,
                       high=initInfo.get('xlen') - 1, width=60)
start_x.on_change('value', pointOnchange)
start_y = NumericInput(title='start_y', value=min(initInfo.get('startPoint')[1], initInfo.get('ylen') - 1), low=0,
                       high=initInfo.get('ylen') - 1, width=60)
start_y.on_change('value', pointOnchange)
end_x = NumericInput(title='end_x', value=min(initInfo.get('endPoint')[0], initInfo.get('xlen') - 1), low=0,
                     high=initInfo.get('xlen') - 1, width=60)
end_x.on_change('value', pointOnchange)
end_y = NumericInput(title='end_y', value=min(initInfo.get('endPoint')[1], initInfo.get('ylen') - 1), low=0,
                     high=initInfo.get('ylen') - 1, width=60)
end_y.on_change('value', pointOnchange)
# 造对象 显示
initInfo['layout'] = row(
    column(method, xLenSlider, yLenSlider, impedimentType, goalRadius, row(start_x, start_y, end_x, end_y),
           row(newNode)),
    initInfo.get('p'))