package de.westnordost.streetcomplete.data.osm.changes;
import junit.framework.TestCase;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class StringMapChangesBuilderTest extends TestCase
{
public void testDelete()
{
StringMapChangesBuilder builder = new StringMapChangesBuilder(createMap());
builder.delete("exists");
List<StringMapEntryChange> changes = builder.create().getChanges();
assertEquals(1, changes.size());
assertEquals(StringMapEntryDelete.class, changes.get(0).getClass());
StringMapEntryDelete change = (StringMapEntryDelete) changes.get(0);
assertEquals("exists", change.key);
assertEquals("like this", change.valueBefore);
}
public void testDeleteNonExistingFails()
{
StringMapChangesBuilder builder = new StringMapChangesBuilder(createMap());
try
{
builder.delete("does not exist");
}
catch(IllegalArgumentException e) { return; }
fail();
}
public void testAdd()
{
StringMapChangesBuilder builder = new StringMapChangesBuilder(createMap());
builder.add("does not exist", "but now");
List<StringMapEntryChange> changes = builder.create().getChanges();
assertEquals(1, changes.size());
assertEquals(StringMapEntryAdd.class, changes.get(0).getClass());
StringMapEntryAdd change = (StringMapEntryAdd) changes.get(0);
assertEquals("does not exist", change.key);
assertEquals("but now", change.value);
}
public void testAddAlreadyExistingFails()
{
StringMapChangesBuilder builder = new StringMapChangesBuilder(createMap());
try
{
builder.add("exists", "like that");
}
catch(IllegalArgumentException e) { return; }
fail();
}
public void testModify()
{
StringMapChangesBuilder builder = new StringMapChangesBuilder(createMap());
builder.modify("exists", "like that");
List<StringMapEntryChange> changes = builder.create().getChanges();
assertEquals(1, changes.size());
assertEquals(StringMapEntryModify.class, changes.get(0).getClass());
StringMapEntryModify change = (StringMapEntryModify) changes.get(0);
assertEquals("exists", change.key);
assertEquals("like this", change.valueBefore);
assertEquals("like that", change.value);
}
public void testDuplicateChange()
{
StringMapChangesBuilder builder = new StringMapChangesBuilder(createMap());
builder.modify("exists", "like that");
try
{
builder.delete("exists");
fail();
}
catch(IllegalStateException e) { }
}
private Map<String,String> createMap()
{
Map<String,String> result = new HashMap<>();
result.put("exists","like this");
return result;
}
}