code: def test_server_on_change_round_trip_partial_entry(
      self, bokeh_server_page: BokehServerPage
  ) -> None:
      input_box = AutocompleteInput()
      modify_doc, plot = mk_modify_doc(input_box)
      page = bokeh_server_page(modify_doc)
  
      # double click to highlight and overwrite old text
      el = find_element_for(page.driver, input_box, "input")
      enter_text_in_element(page.driver, el, "100", click=2)
  
      page.eval_custom_action()
  
      results = page.results
      assert results["data"]["val"] == ["400", "100001"]
  
      enter_text_in_element(page.driver, el, "123", click=2)
  
      page.eval_custom_action()
  
      results = page.results
      assert results["data"]["val"] == ["100001", "12344556"]
  
      # Check clicking outside input also triggers
      enter_text_in_element(
          page.driver, el, "319", click=2, enter=False
      )
      page.click_canvas_at_position(plot, 10, 10)
  
      page.eval_custom_action()
  
      results = page.results
      assert results["data"]["val"] == ["12344556", "3194567289"]
  
      assert page.has_no_console_errors()
  
imports: from __future__ import annotations
  import pytest
  from selenium.webdriver.common.by import By
  from selenium.webdriver.common.keys import Keys
  from bokeh.application.handlers.function import ModifyDoc
  from bokeh.layouts import column
  from bokeh.models import AutocompleteInput, ColumnDataSource, CustomJS, Plot, Range1d, Scatter
  from tests.support.plugins.project import BokehModelPage, BokehServerPage
  from tests.support.util.selenium import RECORD, enter_text_in_element, find_element_for, hover_element
label_desc: Use image node_id 15 for calling the Test_AutocompleteInput obj's underlying member method code with example usage: obj.test_server_on_change_round_trip_partial_entry(bokeh_server_page) without return types