package rabbit.data.internal.xml.merge; import rabbit.data.internal.xml.schema.events.PartEventType; import com.google.common.collect.Lists; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.matchers.JUnitMatchers.hasItems; import org.junit.Test; import java.util.Collection; import java.util.Collections; import java.util.List; /** * @see Mergers */ public class MergersTest { @Test public void testMerge_collectionAndElement_mergerNull() { Collection<String> data = Lists.newArrayList("1"); assertThat(Mergers.merge(null, data, "2"), sameInstance(data)); assertThat(data.size(), equalTo(2)); assertThat(data, hasItems("1", "2")); } @Test(expected = NullPointerException.class) public void testMerge_collectionAndElement_collectionNull() { Mergers.merge(new PartEventTypeMerger(), null, new PartEventType()); } @Test(expected = NullPointerException.class) public void testMerge_collectionAndElement_elementNull() { Mergers.merge(new PartEventTypeMerger(), Collections.<PartEventType> emptyList(), null); } @Test(expected = NullPointerException.class) public void testMerge_collectionAndCollection_firstCollectionNull() { Mergers.merge(new PartEventTypeMerger(), null, Collections .<PartEventType> emptyList()); } @Test(expected = NullPointerException.class) public void testMerge_collectionAndCollection_secondCollectionNull() { Mergers.merge(new PartEventTypeMerger(), Collections .<PartEventType> emptyList(), null); } @Test public void testMerge_collectionAndCollection_mergerNull() { Collection<Integer> main = Lists.newArrayList(1); Collection<Integer> sub = Lists.newArrayList(2); Collection<Integer> subClone = Lists.newArrayList(sub); assertThat(Mergers.merge(null, main, sub), sameInstance(main)); // Assert "main" is changed: assertThat(main.size(), equalTo(2)); assertThat(main, hasItems(1, 2)); // Assert "sub" is unchanged: assertThat(sub, equalTo(subClone)); } @Test public void testMerge_collectionAndElement_mergeableElements() { String id = "abc"; PartEventType type1 = new PartEventType(); type1.setDuration(11); type1.setPartId(id); PartEventType type2 = new PartEventType(); type2.setDuration(9823); type2.setPartId(id); IMerger<PartEventType> merger = new PartEventTypeMerger(); // Check the elements we just created are mergeable assertTrue(merger.isMergeable(type1, type2)); List<PartEventType> elements = Lists.newArrayList(type1); assertSame(elements, Mergers.merge(merger, elements, type2)); // Check the elements are merged: assertEquals(1, elements.size()); PartEventType result = elements.get(0); assertEquals(id, result.getPartId()); assertEquals(type1.getDuration() + type2.getDuration(), result.getDuration()); } @Test public void testMerge_collectionAndElement_unmergeableElements() { String id1 = "13458"; String id2 = "abcdef"; long duration1 = 139834; long duration2 = 983471; PartEventType type1 = new PartEventType(); PartEventType type2 = new PartEventType(); type1.setDuration(duration1); type2.setDuration(duration2); type1.setPartId(id1); type2.setPartId(id2); IMerger<PartEventType> merger = new PartEventTypeMerger(); // Check the elements we just created are not mergeable assertFalse(merger.isMergeable(type1, type2)); List<PartEventType> collection = Lists.newArrayList(type1); assertSame(collection, Mergers.merge(merger, collection, type2)); // Check the elements are merged: assertEquals(2, collection.size()); assertSame(type1, collection.get(0)); assertSame(type2, collection.get(1)); assertEquals(id1, type1.getPartId()); assertEquals(id2, type2.getPartId()); assertEquals(duration1, type1.getDuration()); assertEquals(duration2, type2.getDuration()); } }