### Question:
CSVDataSources implements IDataSourceConfig, Cloneable { @Override public CSVDataSources clone() { try { CSVDataSources result = (CSVDataSources)super.clone(); result.myDataSources = StreamUtilities.map(myDataSources, dataSource -> dataSource.clone()); return result; } catch (CloneNotSupportedException e) { throw new ExpectedCloneableException(e); } }  List<CSVDataSource> getCSVSourceList(); @Override boolean addSource(IDataSource source); @Override List<IDataSource> getSourceList(); @Override boolean removeSource(IDataSource source); @Override void updateSource(IDataSource source); @Override int hashCode(); @Override boolean equals(Object obj); @Override String toString(); @Override CSVDataSources clone();  }### Answer:
@Test public void testClone() { CSVDataSources input = new CSVDataSources(); input.addSource(CSVDataSourceTest.getTestObject()); CSVDataSources clone = input.clone(); Assert.assertTrue(Utilities.notSameInstance(input, clone)); Assert.assertTrue(Utilities.sameInstance(input.getClass(), clone.getClass())); Assert.assertEquals(input, clone); }