package com.cpiekarski.fourteeners.test;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import com.cpiekarski.fourteeners.register.RegisterEntry;
import com.cpiekarski.fourteeners.register.RegisterHelper;
import com.cpiekarski.fourteeners.utils.Mountains;
import com.cpiekarski.fourteeners.utils.SRLOG;
import junit.framework.Assert;
import java.io.File;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;
import android.util.Log;
public class RegisterEntryTest extends AndroidTestCase {
private RegisterEntry mEntry;
private final String TAG = "RegisterEntryTest";
public RegisterEntryTest() {
super();
}
protected void setUp() throws Exception {
super.setUp();
//clearAllRows();
deleteDatabase();
mEntry = new RegisterEntry(getContext());
}
protected void tearDown() throws Exception {
super.tearDown();
mEntry = null;
clearAllRows();
}
private String getTimeStamp() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.US);
String formatedDate = sdf.format(new Date(System.currentTimeMillis()));
return formatedDate;
}
private String setFalseEntryData(String mtn, int i) {
String ts = getTimeStamp();
mEntry.setMountain(Mountains.getInstance(getContext()).getMountain(mtn));
mEntry.setNotes("This is a JUnit test insert");
mEntry.setStartTime(ts);
mEntry.setDistance(String.valueOf(12345+i));
mEntry.setStartElevation(10000+i);
mEntry.setStartLoc(1.0+i, 1.0+i, 100+i);
mEntry.setReachedSummit(true);
return ts;
}
private void deleteDatabase() {
RegisterHelper r = new RegisterHelper(getContext());
SQLiteDatabase d = r.getWritableDatabase();
d.close();
r.close();
SRLOG.d(TAG, d.getPath());
Assert.assertTrue("delete not true", true == SQLiteDatabase.deleteDatabase(new File(d.getPath())));
}
private void clearAllRows() {
RegisterHelper r = new RegisterHelper(getContext());
SQLiteDatabase d = r.getWritableDatabase();
d.delete(RegisterHelper.TABLE_NAME, null, null);
d.close();
r.close();
}
@SmallTest
public void testSingleInsert() {
String ts = setFalseEntryData("Longs Peak", 1);
Assert.assertTrue(mEntry.createEntry());
RegisterHelper r = new RegisterHelper(getContext());
SQLiteDatabase d = r.getReadableDatabase();
Cursor c = d.query(RegisterHelper.TABLE_NAME, null, null, null, null, null, null);
Assert.assertTrue("Count is not 1", 1 == c.getCount());
c.moveToNext();
Assert.assertEquals("Front", c.getString(c.getColumnIndex(RegisterHelper.MNT_RANGE)));
Assert.assertEquals("Longs Peak", c.getString(c.getColumnIndex(RegisterHelper.MNT_NAME)));
Assert.assertEquals(ts, c.getString(c.getColumnIndex(RegisterHelper.START_TIME)));
Assert.assertEquals(Integer.parseInt("12345")+1, Integer.parseInt(c.getString(c.getColumnIndex(RegisterHelper.DISTANCE))));
Assert.assertEquals(10001, c.getInt(c.getColumnIndex(RegisterHelper.START_ELEVATION)));
c.close();
mEntry.deleteEntry();
c = d.query(RegisterHelper.TABLE_NAME, null, null, null, null, null, null);
Assert.assertTrue("Count is not 0", 0 == c.getCount());
c.close();
d.close();
r.close();
}
@MediumTest
public void testFiftyInsert() {
String[] tss = new String[50];
for(int i = 0; i < 50; ++i) {
String ts = setFalseEntryData("Longs Peak", i);
tss[i] = ts;
Assert.assertTrue(mEntry.createEntry());
}
RegisterHelper r = new RegisterHelper(getContext());
SQLiteDatabase d = r.getReadableDatabase();
Cursor c = d.query(RegisterHelper.TABLE_NAME, null, null, null, null, null, null);
Assert.assertTrue("Count is not 50", 50 == c.getCount());
int i = 0;
while(!c.moveToNext()) {
Assert.assertEquals("Front", c.getString(c.getColumnIndex(RegisterHelper.MNT_RANGE)));
Assert.assertEquals("Longs Peak", c.getString(c.getColumnIndex(RegisterHelper.MNT_NAME)));
Assert.assertEquals(tss[i], c.getString(c.getColumnIndex(RegisterHelper.START_TIME)));
Assert.assertEquals(Integer.parseInt("12345")+i, Integer.parseInt(c.getString(c.getColumnIndex(RegisterHelper.DISTANCE))));
Assert.assertEquals(10000+i, c.getInt(c.getColumnIndex(RegisterHelper.START_ELEVATION)));
++i;
}
c.close();
r.close();
d.close();
}
@LargeTest
public void testHundredInsert() {
String[] tss = new String[100];
for(int i = 0; i < 100; ++i) {
String ts = setFalseEntryData("Longs Peak", i);
tss[i] = ts;
Assert.assertTrue(mEntry.createEntry());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Log.v(TAG, "Error "+e.toString());
}
}
RegisterHelper r = new RegisterHelper(getContext());
SQLiteDatabase d = r.getReadableDatabase();
Cursor c = d.query(RegisterHelper.TABLE_NAME, null, null, null, null, null, null);
Assert.assertTrue("Count is not 100", 100 == c.getCount());
int i = 0;
while(!c.moveToNext()) {
Assert.assertEquals("Front", c.getString(c.getColumnIndex(RegisterHelper.MNT_RANGE)));
Assert.assertEquals("Longs Peak", c.getString(c.getColumnIndex(RegisterHelper.MNT_NAME)));
Assert.assertEquals(tss[i], c.getString(c.getColumnIndex(RegisterHelper.START_TIME)));
Assert.assertEquals(Integer.parseInt("12345")+i, Integer.parseInt(c.getString(c.getColumnIndex(RegisterHelper.DISTANCE))));
Assert.assertEquals(10000+i, c.getInt(c.getColumnIndex(RegisterHelper.START_ELEVATION)));
++i;
}
c.close();
r.close();
d.close();
}
}