code: def test_action_spec(self):
      cvr = converter.Converter(
          settings=_make_converter_settings("raw"),
          environment_info=_make_dummy_env_info(),
      )
  
      action_spec = cvr.action_spec()
      self.assertCountEqual(
          action_spec.keys(),
          [
              "queued",
              "repeat",
              "target_unit_tag",
              "unit_tags",
              "world",
              "delay",
              "function",
          ],
      )
  
      for k, v in action_spec.items():
          self.assertEqual(k, v.name, msg=k)
          self.assertEqual(v.dtype, np.int32, msg=k)
          self.assertEqual(
              v.shape,
              (MAX_UNIT_SELECTION_SIZE,) if k == "unit_tags" else (),
              msg=k,
          )
          self.assertEqual(
              v.minimum, (1,) if k == "delay" else (0,), msg=k
          )
  
      for k, v in {
          "queued": 1,
          "repeat": 2,
          "target_unit_tag": MAX_UNIT_COUNT - 1,
          "world": RAW_RESOLUTION * RAW_RESOLUTION - 1,
          "delay": 127,
          "function": NUM_ACTION_TYPES - 1,
      }.items():
          self.assertEqual(action_spec[k].maximum, (v,), msg=k)
  
imports: from absl.testing import absltest
  from absl.testing import parameterized
  import numpy
  from pysc2.env.converter import converter
  from pysc2.env.converter.proto import converter_pb2
  from s2clientprotocol import common_pb2
  from s2clientprotocol import raw_pb2
  from s2clientprotocol import sc2api_pb2
  from s2clientprotocol import spatial_pb2
label_desc: Use image node_id 1 for calling the RawConverterTest obj's underlying member method code with example usage: obj.test_action_spec() without return types