/* ********************************************************************** ** ** Copyright notice ** ** ** ** (c) 2005-2009 RSSOwl Development Team ** ** http://www.rssowl.org/ ** ** ** ** All rights reserved ** ** ** ** This program and the accompanying materials are made available under ** ** the terms of the Eclipse Public License v1.0 which accompanies this ** ** distribution, and is available at: ** ** http://www.rssowl.org/legal/epl-v10.html ** ** ** ** A copy is found in the file epl-v10.html and important notices to the ** ** license from the team is found in the textfile LICENSE.txt distributed ** ** in this package. ** ** ** ** This copyright notice MUST APPEAR in all copies of the file! ** ** ** ** Contributors: ** ** RSSOwl Development Team - initial API and implementation ** ** ** ** ********************************************************************** */ package org.rssowl.core.tests.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import org.junit.Test; import org.rssowl.core.internal.persist.Category; import org.rssowl.core.internal.persist.ComplexMergeResult; import org.rssowl.core.internal.persist.Label; import org.rssowl.core.internal.persist.Person; import org.rssowl.core.persist.ICategory; import org.rssowl.core.persist.ILabel; import org.rssowl.core.persist.IPerson; import org.rssowl.core.util.MergeUtils; import org.rssowl.core.util.SyncUtils; import java.util.ArrayList; import java.util.List; /** * Tests methods in {@link MergeUtils}. */ public class MergeUtilsTest { /** * Tests * {@link MergeUtils#merge(org.rssowl.core.persist.MergeCapable, org.rssowl.core.persist.MergeCapable)} * . */ @Test public void testSingleItemMergeWithNullDestination() { IPerson person = new Person((Long) null); ComplexMergeResult<IPerson> mergeResult = MergeUtils.merge(null, person); assertEquals(person, mergeResult.getMergedObject()); assertEquals(true, mergeResult.isStructuralChange()); } /** * Tests * {@link MergeUtils#merge(org.rssowl.core.persist.MergeCapable, org.rssowl.core.persist.MergeCapable)} * . */ @Test public void testSingleItemMergeWithNonNullDestinationAndNullOrigin() { IPerson person = new Person((Long) null); ComplexMergeResult<IPerson> mergeResult = MergeUtils.merge(person, null); assertNull(mergeResult.getMergedObject()); assertEquals(true, mergeResult.isStructuralChange()); } /** * Tests * {@link MergeUtils#merge(List, List, org.rssowl.core.persist.IPersistable)}. */ @Test public void testCollectionMergeWithNullExistingListAndNullNewParent() { List<ICategory> categories = new ArrayList<ICategory>(); categories.add(new Category()); MergeUtils.merge(null, categories, null); } /** * Tests * {@link MergeUtils#mergeProperties(org.rssowl.core.persist.IEntity, org.rssowl.core.persist.IEntity)} * . */ @Test public void testMergeProperties() { ILabel label0 = new Label(null, "label0"); String key0 = "key0"; String value0 = "value0"; label0.setProperty(key0, value0); String key1 = "key1"; String value1 = "value1"; label0.setProperty(key1, value1); String key2 = "key2"; String value2 = "value2"; label0.setProperty(key2, value2); String key3 = SyncUtils.GOOGLE_MARKED_READ; String value3 = "value3"; label0.setProperty(key3, value3); ILabel label1 = new Label(null, "label1"); label1.setProperty(key1, value1); String newValue2 = "newValue2"; label1.setProperty(key2, newValue2); key3 = "key3"; value3 = "value3"; label1.setProperty(key3, value3); ComplexMergeResult<?> mergeResult = MergeUtils.mergeProperties(label0, label1); assertEquals(true, mergeResult.getRemovedObjects().contains(value0)); assertEquals(true, mergeResult.getRemovedObjects().contains(value2)); assertEquals(true, mergeResult.isStructuralChange()); assertEquals(4, label0.getProperties().size()); assertEquals(3, label1.getProperties().size()); assertEquals(value1, label0.getProperties().get(key1)); assertEquals(newValue2, label0.getProperties().get(key2)); assertEquals(value3, label0.getProperties().get(key3)); } /** * Tests * {@link MergeUtils#mergeProperties(org.rssowl.core.persist.IEntity, org.rssowl.core.persist.IEntity)} * . */ @Test public void testMergeExcludedProperties() { ILabel label0 = new Label(null, "label0"); String key0 = SyncUtils.GOOGLE_MARKED_READ; String value0 = "value0"; label0.setProperty(key0, value0); String key1 = SyncUtils.GOOGLE_MARKED_UNREAD; String value1 = "value1"; label0.setProperty(key1, value1); String key2 = SyncUtils.GOOGLE_LABELS; String value2 = "value2"; label0.setProperty(key2, value2); ILabel label1 = new Label(null, "label1"); ComplexMergeResult<?> mergeResult = MergeUtils.mergeProperties(label0, label1); assertEquals(true, mergeResult.getRemovedObjects().isEmpty()); assertEquals(false, mergeResult.isStructuralChange()); assertEquals(3, label0.getProperties().size()); assertEquals(0, label1.getProperties().size()); } }