code: def test_empty():
      workspace, module = make_workspace(
          numpy.zeros((20, 10), int), numpy.zeros((20, 10), bool)
      )
      #
      # Make sure module tells us about the measurements
      #
      columns = module.get_measurement_columns(None)
      features = [c[1] for c in columns]
      features.sort()
      expected = cellprofiler.modules.measureobjectskeleton.F_ALL
      expected.sort()
      coltypes = {}
      for feature, expected in zip(features, expected):
          expected_feature = "_".join(
              (
                  cellprofiler.modules.measureobjectskeleton.C_OBJSKELETON,
                  expected,
                  IMAGE_NAME,
              )
          )
          assert feature == expected_feature
          coltypes[expected_feature] = (
              COLTYPE_FLOAT
              if expected
              == cellprofiler.modules.measureobjectskeleton.F_TOTAL_OBJSKELETON_LENGTH
              else COLTYPE_INTEGER
          )
      assert all([c[0] == OBJECT_NAME for c in columns])
      assert all([c[2] == coltypes[c[1]] for c in columns])
  
      categories = module.get_categories(None, OBJECT_NAME)
      assert len(categories) == 1
      assert (
          categories[0]
          == cellprofiler.modules.measureobjectskeleton.C_OBJSKELETON
      )
      assert len(module.get_categories(None, "Foo")) == 0
  
      measurements = module.get_measurements(
          None,
          OBJECT_NAME,
          cellprofiler.modules.measureobjectskeleton.C_OBJSKELETON,
      )
      assert len(measurements) == len(
          cellprofiler.modules.measureobjectskeleton.F_ALL
      )
      assert measurements[0] != measurements[1]
      assert all(
          [
              m in cellprofiler.modules.measureobjectskeleton.F_ALL
              for m in measurements
          ]
      )
  
      assert (
          len(
              module.get_measurements(
                  None,
                  "Foo",
                  cellprofiler.modules.measureobjectskeleton.C_OBJSKELETON,
              )
          )
          == 0
      )
      assert len(module.get_measurements(None, OBJECT_NAME, "Foo")) == 0
  
      for feature in cellprofiler.modules.measureobjectskeleton.F_ALL:
          images = module.get_measurement_images(
              None,
              OBJECT_NAME,
              cellprofiler.modules.measureobjectskeleton.C_OBJSKELETON,
              feature,
          )
          assert len(images) == 1
          assert images[0] == IMAGE_NAME
  
      module.run(workspace)
      m = workspace.measurements
      assert isinstance(m, cellprofiler_core.measurement.Measurements)
      for feature in cellprofiler.modules.measureobjectskeleton.F_ALL:
          mname = "_".join(
              (
                  cellprofiler.modules.measureobjectskeleton.C_OBJSKELETON,
                  expected,
                  IMAGE_NAME,
              )
          )
          data = m.get_current_measurement(OBJECT_NAME, mname)
          assert len(data) == 0
  
imports: import os
  import tempfile
  import traceback
  import numpy
  import six.moves
  import cellprofiler_core.image
  import cellprofiler_core.measurement
  from cellprofiler_core.constants.measurement import GROUP_NUMBER, GROUP_INDEX, COLTYPE_FLOAT, COLTYPE_INTEGER
  import cellprofiler.modules.measureobjectskeleton
  import cellprofiler_core.object
  import cellprofiler_core.pipeline
  import cellprofiler_core.preferences
  import cellprofiler_core.setting
  import cellprofiler_core.workspace
  import tests.frontend.modules
label_desc: Use image node_id 4 for calling a global function with example usage: test_empty() without return types