package it.geosolutions.geocollect.android.core.test;
import it.geosolutions.android.map.dto.MarkerDTO;
import it.geosolutions.geocollect.android.core.mission.Mission;
import it.geosolutions.geocollect.android.core.mission.MissionFeature;
import it.geosolutions.geocollect.android.core.mission.utils.MissionUtils;
import it.geosolutions.geocollect.android.core.mission.utils.PersistenceUtils;
import it.geosolutions.geocollect.android.core.mission.utils.SpatialiteUtils;
import it.geosolutions.geocollect.model.config.MissionTemplate;
import it.geosolutions.geocollect.model.viewmodel.Field;
import it.geosolutions.geocollect.model.viewmodel.Page;
import it.geosolutions.geocollect.model.viewmodel.type.XType;
import java.io.File;
import java.util.ArrayList;
import jsqlite.Database;
import org.mapsforge.core.model.GeoPoint;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.widget.LinearLayout;
import eu.geopaparazzi.library.util.ResourcesManager;
/**
* Test Class for PersistenceUtils Class
*
* @author Lorenzo
*
*/
public class PersTest extends android.test.AndroidTestCase {
static String TAG = "PersistenceTest";
protected void setUp() throws Exception {
super.setUp();
Log.v(TAG, "setUp()");
}
protected void tearDown() throws Exception {
super.tearDown();
Log.v(TAG, "tearDown()");
}
public void testPersistenceUtils() {
Log.v(TAG, "YAY! I'm running!");
assertTrue(true);
}
public void testMarkerColorCreation() {
Drawable drawable=null;
try{
drawable = getContext().getResources().getDrawable(MarkerDTO.MARKER_BLUE);
Log.v("MARKER","marker found!");
}catch(Exception e){
Log.w("MARKER","unable to find type of marker");
drawable = getContext().getResources().getDrawable(MarkerDTO.MARKER_RED);
}
assertNotNull(drawable);
}
/*
public void testStorePageDataPageLinearLayoutMissionString() {
Log.v(TAG, "YAY! I'm running!");
}
*/
public void testLoadPageDataPageLinearLayoutMissionContext() {
// Mock Page
Page p = new Page();
// Mock LinearLayout
LinearLayout l = new LinearLayout(getContext());
// Mock Mission
Mission m = new Mission();
Database spatialiteDatabase = getSpatialiteDatabase();
m.db = spatialiteDatabase;
assertNotNull(m.db);
assertFalse(m.db.dbversion().equals("unknown"));
try {
m.db.close();
} catch (jsqlite.Exception e) {
// ignore
}
assertTrue(m.db.dbversion().equals("unknown"));
assertFalse(PersistenceUtils.loadPageData(p, l, m, getContext(),false));
}
public void testNullDatabase() {
// Mock Page
Page p = new Page();
// Mock LinearLayout
LinearLayout l = new LinearLayout(getContext());
// Mock Mission
Mission m = new Mission();
assertNull(m.db);
assertFalse(PersistenceUtils.loadPageData(p, l, m, getContext(),false));
}
public void testLoadPageDataPageLinearLayoutMissionContextString() {
Log.v(TAG, "YAY! I'm running!");
fail("Not yet implemented");
}
public void testTableCreation(){
final MissionTemplate t = MissionUtils.getDefaultTemplate(getContext());
final Database spatialiteDatabase = getSpatialiteDatabase();
assertTrue(PersistenceUtils.createTableFromTemplate(spatialiteDatabase, t.schema_seg.localSourceStore+ "_new", t.schema_seg.fields));
assertTrue(PersistenceUtils.createOrUpdateTable(spatialiteDatabase,t.schema_seg.localSourceStore, t.schema_seg.fields));
assertTrue(PersistenceUtils.createOrUpdateTable(spatialiteDatabase,t.schema_sop.localFormStore, t.schema_sop.fields));
try {
spatialiteDatabase.close();
} catch (jsqlite.Exception e) {
// ignore
}
}
public void testMissionFeatureCreation(){
final MissionTemplate t = MissionUtils.getDefaultTemplate(getContext());
final Database spatialiteDatabase = getSpatialiteDatabase();
final String tableName = t.schema_seg.localSourceStore+ "_new";
final Long id = PersistenceUtils.getIDforNewMissionFeatureEntry(spatialiteDatabase, tableName);
final String id_ = Long.toString(id);
assertNotNull(id);
assertTrue(PersistenceUtils.insertCreatedMissionFeature(spatialiteDatabase, tableName, id));
Field field = t.seg_form.pages.get(0).fields.get(1);
assertNotNull(field);
assertEquals("CODICE", field.fieldId);
final String value = "Great Code";
PersistenceUtils.updateCreatedMissionFeatureRow(spatialiteDatabase, tableName, field, value, id_);
ArrayList<MissionFeature> features = MissionUtils.getMissionFeatures(tableName, spatialiteDatabase);
MissionFeature inserted = null;
for(MissionFeature f : features){
if(f.id.equals(id_)){
assertEquals(f.properties.get("CODICE"),value);
inserted = f;
break;
}
}
PersistenceUtils.deleteMissionFeature(spatialiteDatabase, tableName, inserted.id);
ArrayList<MissionFeature> newFeatures = MissionUtils.getMissionFeatures(tableName, spatialiteDatabase);
assertFalse(newFeatures.contains(inserted));
try {
spatialiteDatabase.close();
} catch (jsqlite.Exception e) {
// ignore
}
}
public void testMissionFeatureGeometry(){
final MissionTemplate t = MissionUtils.getDefaultTemplate(getContext());
final Database spatialiteDatabase = getSpatialiteDatabase();
final String tableName = t.schema_seg.localSourceStore+ "_new";
final Long id = PersistenceUtils.getIDforNewMissionFeatureEntry(spatialiteDatabase, tableName);
final String id_ = Long.toString(id);
assertNotNull(id);
assertTrue(PersistenceUtils.insertCreatedMissionFeature(spatialiteDatabase, tableName, id));
final double lat = 43.4244351;
final double lon = 11.53254524;
final GeoPoint g = new GeoPoint(lat,lon);
final String insertPoint = "MakePoint("+g.longitude+","+g.latitude+", 4326)";
Field mapfield = t.seg_form.pages.get(5).fields.get(0);
assertEquals(XType.mapViewPoint, mapfield.xtype);
PersistenceUtils.updateCreatedMissionFeatureRow(spatialiteDatabase, tableName, mapfield, insertPoint, id_);
double[] xy = PersistenceUtils.getXYCoord(spatialiteDatabase, tableName, id_);
assertEquals(lat, xy[1]);
assertEquals(lon, xy[0]);
try {
spatialiteDatabase.close();
} catch (jsqlite.Exception e) {
// ignore
}
}
public Database getSpatialiteDatabase(){
Database spatialiteDatabase = null;
try {
File sdcardDir = ResourcesManager.getInstance(getContext()).getSdcardDir();
File spatialDbFile = new File(sdcardDir, "geocollect/genova.sqlite");
if (!spatialDbFile.getParentFile().exists()) {
throw new RuntimeException();
}
spatialiteDatabase = new jsqlite.Database();
spatialiteDatabase.open(spatialDbFile.getAbsolutePath(), jsqlite.Constants.SQLITE_OPEN_READWRITE
| jsqlite.Constants.SQLITE_OPEN_CREATE);
Log.v("MISSION_DETAIL", SpatialiteUtils.queryVersions(spatialiteDatabase));
Log.v("MISSION_DETAIL", spatialiteDatabase.dbversion());
return spatialiteDatabase;
} catch (Exception e) {
Log.v("MISSION_DETAIL", Log.getStackTraceString(e));
return null;
}
}
}