code: def testExecutionParameterUseProto(self):
      class SpecWithNonPrimitiveTypes(ComponentSpec):
          PARAMETERS = {
              "config_proto": ExecutionParameter(
                  type=example_gen_pb2.Input, use_proto=True
              ),
              "boolean": ExecutionParameter(type=bool, use_proto=True),
              "list_config_proto": ExecutionParameter(
                  type=List[example_gen_pb2.Input], use_proto=True
              ),
              "list_boolean": ExecutionParameter(
                  type=List[bool], use_proto=True
              ),
          }
          INPUTS = {
              "input": ChannelParameter(type=_InputArtifact),
          }
          OUTPUTS = {
              "output": ChannelParameter(type=_OutputArtifact),
          }
  
      spec = SpecWithNonPrimitiveTypes(
          config_proto='{"splits": [{"name": "name", "pattern": "pattern"}]}',
          boolean=True,
          list_config_proto=[
              example_gen_pb2.Input(
                  splits=[
                      example_gen_pb2.Input.Split(
                          name="trainer", pattern="train.data"
                      )
                  ]
              ),
              example_gen_pb2.Input(
                  splits=[
                      example_gen_pb2.Input.Split(
                          name="eval", pattern="*eval.data"
                      )
                  ]
              ),
          ],
          list_boolean=[False, True],
          input=channel.Channel(type=_InputArtifact),
          output=channel.Channel(type=_OutputArtifact),
      )
  
      # Verify exec_properties store parsed value when use_proto set to True.
      expected_proto = text_format.Parse(
          """
              splits {
                name: "name"
                pattern: "pattern"
              }
            """,
          example_gen_pb2.Input(),
      )
      self.assertProtoEquals(
          expected_proto, spec.exec_properties["config_proto"]
      )
      self.assertEqual(True, spec.exec_properties["boolean"])
      self.assertIsInstance(
          spec.exec_properties["list_config_proto"], list
      )
      self.assertEqual(
          spec.exec_properties["list_boolean"], [False, True]
      )
  
imports: import json
  import sys
  from typing import Dict, List
  import unittest
  import tensorflow
  from tfx.dsl.placeholder import placeholder
  from tfx.proto import example_gen_pb2
  from tfx.types import artifact
  from tfx.types import channel
  from tfx.types import component_spec
  from tfx.types.component_spec import ChannelParameter
  from tfx.types.component_spec import ComponentSpec
  from tfx.types.component_spec import ExecutionParameter
  from tfx.types.standard_artifacts import Examples
  from tfx.utils import proto_utils
  from google.protobuf import json_format
  from google.protobuf import text_format
label_desc: Use image node_id 16 for calling the ComponentSpecTest obj's underlying member method code with example usage: obj.testExecutionParameterUseProto() without return types