package co.codewizards.cloudstore.core.collection; import static org.assertj.core.api.Assertions.*; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.junit.Test; public class StringListMergerTest { private Random random = new Random(); private ListMerger<String, String> merger = new ListMerger<String, String>() { @Override protected String getKey(String element) { return element; } @Override protected void update(List<String> dest, int index, String sourceElement, String destElement) { dest.set(index, sourceElement); } }; @Test public void addElements() { List<String> source = new ArrayList<>(); source.add("000"); source.add("001"); source.add("002"); source.add("003"); source.add("004"); source.add("001"); source.add("003"); source.add("003"); List<String> dest = new ArrayList<>(); dest.add("002"); dest.add("003"); merger.merge(source, dest); assertThat(source).hasSize(8); assertThat(dest).hasSize(8); assertThat(dest).isEqualTo(source); } @Test public void removeElements() { List<String> source = new ArrayList<>(); source.add("000"); source.add("001"); source.add("002"); source.add("003"); source.add("004"); source.add("001"); source.add("003"); source.add("003"); List<String> dest = new ArrayList<>(source); source.remove(7); source.remove(6); source.remove(2); merger.merge(source, dest); assertThat(source).hasSize(5); assertThat(dest).hasSize(5); assertThat(dest).isEqualTo(source); } @Test public void addOrRemoveElements() { List<String> source = new ArrayList<>(); source.add("000"); source.add("001"); source.add("002"); source.add("003"); source.add("004"); source.add("001"); source.add("003"); source.add("003"); List<String> dest = new ArrayList<>(); dest.add("100"); dest.add("004"); dest.add("003"); dest.add("001"); dest.add("100"); dest.add("101"); dest.add("102"); dest.add("104"); dest.add("000"); dest.add("103"); dest.add("100"); dest.add("001"); dest.add("101"); dest.add("003"); merger.merge(source, dest); assertThat(source).hasSize(8); assertThat(dest).hasSize(8); assertThat(dest).isEqualTo(source); } @Test public void randomAddOrRemoveElements() { List<String> source = createRandomList(); List<String> dest = createRandomList(); merger.merge(source, dest); assertThat(dest).isEqualTo(source); } private List<String> createRandomList() { int length = random.nextInt(1000); List<String> result = new ArrayList<String>(length); for (int i = 0; i < length; ++i) result.add(Integer.toString(random.nextInt(1000))); return result; } }