code: def test_num_object_limits_lines(
      self, single_plot_page: SinglePlotPage
  ) -> None:
      plot = _make_plot(num_objects=1)
  
      page = single_plot_page(plot)
  
      # ensure clicking adds a point
      page.drag_canvas_at_position(plot, 200, 200, 50, 50)
      page.drag_canvas_at_position(plot, 100, 100, 100, 100)
      page.eval_custom_action()
  
      expected = {
          "xs": [
              [
                  0.8108108108108109,
                  1.6216216216216217,
                  1.6216216216216217,
                  1.6216216216216217,
              ]
          ],
          "ys": [[2.25, 1.5, 1.5, 1.5]],
      }
      assert cds_data_almost_equal(page.results, expected)
  
      assert page.has_no_console_errors()
  
file_path: bokeh/tests/integration/tools/test_freehand_draw_tool.py
imports: from __future__ import annotations
  import pytest
  import time
  from bokeh.application.handlers.function import ModifyDoc
  from bokeh.layouts import column
  from bokeh.models import ColumnDataSource, CustomJS, Div, FreehandDrawTool, MultiLine, Plot, Range1d
  from tests.support.plugins.project import BokehServerPage, SinglePlotPage
  from tests.support.util.compare import cds_data_almost_equal
  from tests.support.util.selenium import RECORD
label_desc: Use image node_id 4 for calling the Test_FreehandDrawTool obj's underlying member method code with example usage: obj.test_num_object_limits_lines(single_plot_page) without return types