### Question:
TableMeta implements ProtoObject<CatalogProtos.TableProto>, GsonObject, Cloneable { @Override public Object clone() throws CloneNotSupportedException { TableMeta meta = (TableMeta) super.clone(); meta.builder = TableProto.newBuilder(); meta.storeType = getStoreType(); meta.options = (Options) (toMap() != null ? options.clone() : null); return meta; } private  TableMeta();  TableMeta(StoreType type, Options options);  TableMeta(TableProto proto); StoreType getStoreType(); void setOptions(Options options); void putOption(String key, String val); String getOption(String key); String getOption(String key, String defaultValue); Options getOptions(); 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 { Schema schema1 = new Schema(); schema1.addColumn("name", Type.BLOB); schema1.addColumn("addr", Type.TEXT); TableMeta meta1 = CatalogUtil.newTableMeta(StoreType.CSV); TableMeta meta2 = (TableMeta) meta1.clone(); assertEquals(meta1.getStoreType(), meta2.getStoreType()); assertEquals(meta1, meta2); }
@Test public void testSchema() throws CloneNotSupportedException { Schema schema1 = new Schema(); schema1.addColumn("name", Type.BLOB); schema1.addColumn("addr", Type.TEXT); TableMeta meta1 = CatalogUtil.newTableMeta(StoreType.CSV); TableMeta meta2 = (TableMeta) meta1.clone(); assertEquals(meta1, meta2); }