### Question:
TableMeta implements ProtoObject<CatalogProtos.TableProto>, GsonObject, Cloneable { @Override public Object clone() throws CloneNotSupportedException { TableMeta meta = (TableMeta) super.clone(); meta.dataFormat = getDataFormat(); meta.propertySet = (KeyValueSet) (toMap() != null ? propertySet.clone() : null); return meta; } TableMeta(String dataFormat, KeyValueSet propertySet);  TableMeta(TableProto proto); String getDataFormat(); void setPropertySet(KeyValueSet options); KeyValueSet getPropertySet(); void putProperty(String key, String val); boolean containsProperty(String key); String getProperty(String key); String getProperty(String key, String defaultValue); Map<String,String> toMap(); boolean equals(Object object); int hashCode(); @Override Object clone(); String toString(); TableProto getProto(); @Override String toJson(); void mergeProtoToLocal();  }### Answer:
@Test public final void testClone() throws CloneNotSupportedException { TableMeta meta1 = CatalogUtil.newTableMeta(BuiltinStorages.TEXT, conf); TableMeta meta2 = (TableMeta) meta1.clone(); assertEquals(meta1.getDataFormat(), meta2.getDataFormat()); assertEquals(meta1, meta2); }
@Test public void testSchema() throws CloneNotSupportedException { TableMeta meta1 = CatalogUtil.newTableMeta(BuiltinStorages.TEXT, conf); TableMeta meta2 = (TableMeta) meta1.clone(); assertEquals(meta1, meta2); }