class_docstr: Abstract class for integration testing concrete Metadata implementations.
  
  Subclasses should override metadata() to return an instance of Metadata that
  has not been entered.
class_docstr_tok: ["Abstract","class","for","integration","testing","concrete","Metadata","implementations",".","Subclasses","should","override","metadata","(",")","to","return","an","instance","of","Metadata","that","has","not","been","entered","."]
code: def testArtifactTypeRegistrationForwardCompatible(self):
      with self.metadata() as m:
          self.assertListEqual([], m.store.get_artifacts())
  
          # Test publish some artifact, the Examples type is registered dynamically.
          artifact = standard_artifacts.Examples()
          m.publish_artifacts([artifact])
          artifact_type = m.store.get_artifact_type(
              type_name="Examples"
          )
          artifact_type.ClearField("id")
          self.assertProtoEquals(
              """
          name: "Examples"
          properties {
            key: "span"
            value: INT
          }
          properties {
            key: "version"
            value: INT
          }
          properties {
            key: "split_names"
            value: STRING
          }
          base_type: DATASET
          """,
              artifact_type,
          )
  
          # Now mimic a future type updates registered by jobs of newer release
          artifact_type.properties[
              "new_property"
          ] = metadata_store_pb2.DOUBLE
          m.store.put_artifact_type(artifact_type, can_add_fields=True)
  
          # The artifact from the current artifacts can still be inserted.
          artifact2 = standard_artifacts.Examples()
          m.publish_artifacts([artifact2])
          stored_type = m.store.get_artifact_type(type_name="Examples")
          stored_type.ClearField("id")
          self.assertProtoEquals(
              """
          name: "Examples"
          properties {
            key: "span"
            value: INT
          }
          properties {
            key: "version"
            value: INT
          }
          properties {
            key: "split_names"
            value: STRING
          }
          properties {
            key: "new_property"
            value: DOUBLE
          }
          base_type: DATASET
          """,
              stored_type,
          )
          self.assertEqual(2, len(m.store.get_artifacts()))
  
imports: from typing import Mapping
  import tensorflow
  from tfx.orchestration import data_types
  from tfx.orchestration import metadata
  from tfx.types import artifact_utils
  from tfx.types import standard_artifacts
  from tfx.types.artifact import ArtifactState
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 6 for calling the MetadataTest obj's underlying member method code with example usage: obj.testArtifactTypeRegistrationForwardCompatible() without return types