package de.westnordost.streetcomplete.data.osm.persist;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.List;
import de.westnordost.streetcomplete.data.ApplicationDbTestCase;
import de.westnordost.streetcomplete.data.osm.ElementGeometry;
import de.westnordost.streetcomplete.data.osm.OsmQuest;
import de.westnordost.streetcomplete.data.osm.OsmElementQuestType;
import de.westnordost.osmapi.map.data.Element;
import de.westnordost.osmapi.map.data.LatLon;
import de.westnordost.osmapi.map.data.OsmLatLon;
public class ElementGeometryDaoTest extends ApplicationDbTestCase
{
private ElementGeometryDao dao;
@Override public void setUp()
{
super.setUp();
dao = new ElementGeometryDao(dbHelper, serializer);
}
public void testGetNull()
{
assertNull(dao.get(Element.Type.NODE, 0));
}
public void testGetNullDifferentPKey()
{
dao.put(Element.Type.NODE, 0, createSimpleGeometry());
assertNull(dao.get(Element.Type.WAY, 0));
assertNull(dao.get(Element.Type.NODE, 1));
}
public void testPutAll()
{
ElementGeometry geometry = createSimpleGeometry();
ArrayList<ElementGeometryDao.Row> rows = new ArrayList<>();
rows.add(new ElementGeometryDao.Row(Element.Type.NODE, 1, geometry));
rows.add(new ElementGeometryDao.Row(Element.Type.WAY, 2, geometry));
dao.putAll(rows);
assertNotNull(dao.get(Element.Type.WAY, 2));
assertNotNull(dao.get(Element.Type.NODE, 1));
}
public void testSimplePutGet()
{
ElementGeometry geometry = createSimpleGeometry();
dao.put(Element.Type.NODE, 0, geometry);
ElementGeometry dbGeometry = dao.get(Element.Type.NODE, 0);
assertEquals(geometry, dbGeometry);
}
public void testPolylineGeometryPutGet()
{
List<List<LatLon>> polylines = new ArrayList<>();
polylines.add(createSomeLatLons(0));
ElementGeometry geometry = new ElementGeometry(polylines, null);
dao.put(Element.Type.WAY, 0, geometry);
ElementGeometry dbGeometry = dao.get(Element.Type.WAY, 0);
assertEquals(geometry, dbGeometry);
}
public void testPolygonGeometryPutGet()
{
List<List<LatLon>> polygons = new ArrayList<>();
polygons.add(createSomeLatLons(0));
polygons.add(createSomeLatLons(10));
ElementGeometry geometry = new ElementGeometry(polygons, null);
dao.put(Element.Type.RELATION, 0, geometry);
ElementGeometry dbGeometry = dao.get(Element.Type.RELATION, 0);
assertEquals(geometry, dbGeometry);
}
public void testDeleteUnreferenced()
{
Element.Type type = Element.Type.WAY;
long id = 0;
ElementGeometry geometry = createSimpleGeometry();
dao.put(type, id, geometry);
assertEquals(1,dao.deleteUnreferenced());
dao.put(type, id, geometry);
new OsmQuestDao(dbHelper, serializer, null).add(
new OsmQuest(Mockito.mock(OsmElementQuestType.class), type, id, geometry));
assertEquals(0, dao.deleteUnreferenced());
}
private ElementGeometry createSimpleGeometry()
{
return new ElementGeometry(new OsmLatLon(50,50));
}
private List<LatLon> createSomeLatLons(double start)
{
List<LatLon> result = new ArrayList<>(5);
for(int i = 0; i < 5; ++i)
{
result.add(new OsmLatLon(start+i, start+i));
}
return result;
}
}