package de.westnordost.streetcomplete.data.osm.changes; import junit.framework.TestCase; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class StringMapChangesTest extends TestCase { public void testEmpty() { List<StringMapEntryChange> list = Collections.emptyList(); StringMapChanges changes = new StringMapChanges(list); assertEquals("", changes.toString()); assertTrue(changes.getChanges().isEmpty()); // executable without error: Map<String,String> someMap = Collections.emptyMap(); changes.applyTo(someMap); assertFalse(changes.hasConflictsTo(someMap)); } public void testOne() { StringMapEntryChange change1 = mock(StringMapEntryChange.class); when(change1.toString()).thenReturn("a"); StringMapChanges changes = new StringMapChanges(Collections.singletonList(change1)); Map<String,String> someMap = Collections.emptyMap(); assertEquals("a",changes.toString()); changes.applyTo(someMap); verify(change1).applyTo(someMap); changes.hasConflictsTo(someMap); verify(change1, atLeastOnce()).conflictsWith(someMap); } public void testTwo() { List<StringMapEntryChange> list = new ArrayList<>(); StringMapEntryChange change1 = mock(StringMapEntryChange.class); when(change1.toString()).thenReturn("a"); list.add(change1); StringMapEntryChange change2 = mock(StringMapEntryChange.class); when(change2.toString()).thenReturn("b"); list.add(change2); StringMapChanges changes = new StringMapChanges(list); Map<String,String> someMap = Collections.emptyMap(); assertEquals("a, b",changes.toString()); changes.applyTo(someMap); verify(change1).applyTo(someMap); verify(change2).applyTo(someMap); changes.hasConflictsTo(someMap); verify(change1, atLeastOnce()).conflictsWith(someMap); verify(change2, atLeastOnce()).conflictsWith(someMap); } public void testApplyToConflict() { Map<String,String> someMap = Collections.emptyMap(); StringMapEntryChange change1 = mock(StringMapEntryChange.class); when(change1.conflictsWith(someMap)).thenReturn(true); StringMapChanges changes = new StringMapChanges(Collections.singletonList(change1)); try { changes.applyTo(someMap); fail(); } catch(IllegalStateException e) { } } public void testGetConflicts() { List<StringMapEntryChange> list = new ArrayList<>(); Map<String,String> someMap = Collections.emptyMap(); StringMapEntryChange conflict = mock(StringMapEntryChange.class); when(conflict.conflictsWith(someMap)).thenReturn(true); list.add( mock(StringMapEntryChange.class)); list.add( mock(StringMapEntryChange.class)); list.add( conflict ); list.add( mock(StringMapEntryChange.class)); list.add( conflict ); StringMapChanges changes = new StringMapChanges(list); changes.getConflictsTo(someMap); Iterator<StringMapEntryChange> it = changes.getConflictsTo(someMap).iterator(); assertSame(conflict, it.next()); assertSame(conflict, it.next()); } }