code: def test_points_overlay_categorical_xaxis(self):
      points = Points((["A", "B", "C"], (1, 2, 3)))
      points2 = Points((["B", "C", "D"], (1, 2, 3)))
      plot = bokeh_renderer.get_plot(points * points2)
      x_range = plot.handles["x_range"]
      self.assertIsInstance(x_range, FactorRange)
      self.assertEqual(x_range.factors, ["A", "B", "C", "D"])
  
imports: import datetime
  import numpy
  import pandas
  from bokeh.models import CategoricalColorMapper, FactorRange, LinearColorMapper, Scatter
  from holoviews.core import NdOverlay
  from holoviews.core.options import Cycle
  from holoviews.element import Points
  from holoviews.plotting.bokeh.util import property_to_dict
  from holoviews.streams import Stream
  from ..utils import ParamLogStream
  from .test_plot import TestBokehPlot, bokeh_renderer
label_desc: Use image node_id 20 for calling the TestPointPlot obj's underlying member method code with example usage: obj.test_points_overlay_categorical_xaxis() without return types