SolutionCloner<TestdataAccessModifierSolution> cloner = createSolutionCloner(solutionDescriptor);
TestdataValue val1 = new TestdataValue("1");
TestdataValue val2 = new TestdataValue("2");
TestdataValue val3 = new TestdataValue("3");
TestdataEntity a = new TestdataEntity("a", val1);
TestdataEntity b = new TestdataEntity("b", val1);
TestdataEntity c = new TestdataEntity("c", val3);
TestdataEntity d = new TestdataEntity("d", val3);
TestdataAccessModifierSolution original = new TestdataAccessModifierSolution("solution");
original.setWriteOnlyField("writeHello");
List<TestdataValue> valueList = Arrays.asList(val1, val2, val3);
original.setValueList(valueList);
List<TestdataEntity> originalEntityList = Arrays.asList(a, b, c, d);
original.setEntityList(originalEntityList);
TestdataAccessModifierSolution clone = cloner.cloneSolution(original);
assertSame("staticFinalFieldValue", TestdataAccessModifierSolution.getStaticFinalField());
assertSame(staticObject, TestdataAccessModifierSolution.getStaticField());
assertNotSame(original, clone);
assertCode("solution", clone);
assertEquals(original.getFinalField(), clone.getFinalField());
assertEquals("readHello", clone.getReadOnlyField());
assertSame(valueList, clone.getValueList());
List<TestdataEntity> cloneEntityList = clone.getEntityList();
assertNotSame(originalEntityList, cloneEntityList);
assertEquals(4, cloneEntityList.size());
TestdataEntity cloneA = cloneEntityList.get(0);
TestdataEntity cloneB = cloneEntityList.get(1);
TestdataEntity cloneC = cloneEntityList.get(2);
TestdataEntity cloneD = cloneEntityList.get(3);
assertEntityClone(a, cloneA, "a", "1");
assertEntityClone(b, cloneB, "b", "1");
assertEntityClone(c, cloneC, "c", "3");
assertEntityClone(d, cloneD, "d", "3");