Got closer to finishing astrid upgrade first unit test, plus fixed startup crash

pull/14/head
Tim Su 16 years ago
parent 811b4862c9
commit ecc539418b

@ -20,9 +20,14 @@ import com.timsu.astrid.activities.TaskEdit;
import com.timsu.astrid.activities.TaskList; import com.timsu.astrid.activities.TaskList;
import com.timsu.astrid.data.task.TaskController; import com.timsu.astrid.data.task.TaskController;
import com.timsu.astrid.data.task.TaskModelForWidget; import com.timsu.astrid.data.task.TaskModelForWidget;
import com.todoroo.astrid.service.AstridDependencyInjector;
public class AstridAppWidgetProvider extends AppWidgetProvider { public class AstridAppWidgetProvider extends AppWidgetProvider {
static {
AstridDependencyInjector.initialize();
}
private final static String TAG = "AstridAppWidgetProvider"; private final static String TAG = "AstridAppWidgetProvider";
public final static int[] TEXT_IDS = { R.id.task_1, R.id.task_2, public final static int[] TEXT_IDS = { R.id.task_1, R.id.task_2,
R.id.task_3, R.id.task_4, R.id.task_5 }; R.id.task_3, R.id.task_4, R.id.task_5 };

@ -1,5 +1,7 @@
package com.timsu.astrid.utilities; package com.timsu.astrid.utilities;
import java.util.List;
import android.Manifest; import android.Manifest;
import android.app.AlarmManager; import android.app.AlarmManager;
import android.app.AlertDialog; import android.app.AlertDialog;
@ -7,22 +9,26 @@ import android.app.PendingIntent;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent; import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.util.Log; import android.util.Log;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.timsu.astrid.activities.SyncPreferences; import com.timsu.astrid.activities.SyncPreferences;
import com.timsu.astrid.appwidget.AstridAppWidgetProvider.UpdateService; import com.timsu.astrid.appwidget.AstridAppWidgetProvider.UpdateService;
import com.timsu.astrid.sync.SynchronizationService; import com.timsu.astrid.sync.SynchronizationService;
import com.todoroo.astrid.service.AstridDependencyInjector;
import java.util.List;
public class StartupReceiver extends BroadcastReceiver { public class StartupReceiver extends BroadcastReceiver {
private static boolean hasStartedUp = false; private static boolean hasStartedUp = false;
static {
AstridDependencyInjector.initialize();
}
@Override @Override
/** Called when the system is started up */ /** Called when the system is started up */
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {

@ -8,6 +8,7 @@ import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;
import com.timsu.astrid.data.AbstractController; import com.timsu.astrid.data.AbstractController;
import com.timsu.astrid.data.task.AbstractTaskModel; import com.timsu.astrid.data.task.AbstractTaskModel;
@ -18,6 +19,7 @@ import com.todoroo.andlib.data.Property.PropertyVisitor;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.astrid.dao.Database;
import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.model.Metadata; import com.todoroo.astrid.model.Metadata;
@ -33,6 +35,9 @@ public final class UpgradeService {
@Autowired @Autowired
private MetadataDao metadataDao; private MetadataDao metadataDao;
@Autowired
private Database database;
@Autowired @Autowired
private String tasksTable; private String tasksTable;
@ -72,21 +77,14 @@ public final class UpgradeService {
*/ */
private static class Astrid2UpgradeHelper extends SQLiteOpenHelper { private static class Astrid2UpgradeHelper extends SQLiteOpenHelper {
private String name;
public Astrid2UpgradeHelper(Context context, String name, public Astrid2UpgradeHelper(Context context, String name,
CursorFactory factory, int version) { CursorFactory factory, int version) {
super(context, name, factory, version); super(context, name, factory, version);
this.name = name;
} }
@Override @Override
@SuppressWarnings("nls")
public void onCreate(SQLiteDatabase db) { public void onCreate(SQLiteDatabase db) {
// create empty table with nothing in it // do nothing
String sql = "CREATE TABLE IF NOT EXISTS " + name + " (" +
AbstractModel.ID_PROPERTY + " INTEGER);";
db.execSQL(sql);
} }
@Override @Override
@ -102,12 +100,14 @@ public final class UpgradeService {
private void upgrade2To3() { private void upgrade2To3() {
Context context = ContextManager.getContext(); Context context = ContextManager.getContext();
database.openForWriting();
// --- upgrade tasks table // --- upgrade tasks table
HashMap<String, Property<?>> propertyMap = HashMap<String, Property<?>> propertyMap =
new HashMap<String, Property<?>>(); new HashMap<String, Property<?>>();
propertyMap.put(AbstractController.KEY_ROWID, Task.ID); propertyMap.put(AbstractController.KEY_ROWID, Task.ID);
propertyMap.put(AbstractTaskModel.NAME, Task.TITLE); propertyMap.put(AbstractTaskModel.NAME, Task.TITLE);
propertyMap.put(AbstractTaskModel.NOTES, Task.TITLE); propertyMap.put(AbstractTaskModel.NOTES, Task.NOTES);
// don't update progress percentage, we don't use this anymore // don't update progress percentage, we don't use this anymore
propertyMap.put(AbstractTaskModel.IMPORTANCE, Task.IMPORTANCE); propertyMap.put(AbstractTaskModel.IMPORTANCE, Task.IMPORTANCE);
propertyMap.put(AbstractTaskModel.ESTIMATED_SECONDS, Task.ESTIMATED_SECONDS); propertyMap.put(AbstractTaskModel.ESTIMATED_SECONDS, Task.ESTIMATED_SECONDS);
@ -131,6 +131,7 @@ public final class UpgradeService {
// --- upgrade tags tables // --- upgrade tags tables
migrateTagsToMetadata(); migrateTagsToMetadata();
database.close();
} }
@ -152,6 +153,7 @@ public final class UpgradeService {
public Void visitDouble(Property<Double> property, UpgradeVisitorContainer data) { public Void visitDouble(Property<Double> property, UpgradeVisitorContainer data) {
double value = data.cursor.getDouble(data.columnIndex); double value = data.cursor.getDouble(data.columnIndex);
data.model.setValue(property, value); data.model.setValue(property, value);
Log.d("upgrade", "wrote " + value + " to -> " + property + " of model id " + data.cursor.getLong(1));
return null; return null;
} }
@ -173,6 +175,7 @@ public final class UpgradeService {
value = data.cursor.getInt(data.columnIndex); value = data.cursor.getInt(data.columnIndex);
data.model.setValue(property, value); data.model.setValue(property, value);
Log.d("upgrade", "wrote " + value + " to -> " + property + " of model id " + data.cursor.getLong(1));
return null; return null;
} }
@ -180,6 +183,7 @@ public final class UpgradeService {
public Void visitLong(Property<Long> property, UpgradeVisitorContainer data) { public Void visitLong(Property<Long> property, UpgradeVisitorContainer data) {
long value = data.cursor.getLong(data.columnIndex); long value = data.cursor.getLong(data.columnIndex);
data.model.setValue(property, value); data.model.setValue(property, value);
Log.d("upgrade", "wrote " + value + " to -> " + property + " of model id " + data.cursor.getLong(1));
return null; return null;
} }
@ -187,6 +191,7 @@ public final class UpgradeService {
public Void visitString(Property<String> property, UpgradeVisitorContainer data) { public Void visitString(Property<String> property, UpgradeVisitorContainer data) {
String value = data.cursor.getString(data.columnIndex); String value = data.cursor.getString(data.columnIndex);
data.model.setValue(property, value); data.model.setValue(property, value);
Log.d("upgrade", "wrote " + value + " to -> " + property + " of model id " + data.cursor.getLong(1));
return null; return null;
} }
} }
@ -206,6 +211,9 @@ public final class UpgradeService {
HashMap<String, Property<?>> propertyMap, TYPE model, HashMap<String, Property<?>> propertyMap, TYPE model,
GenericDao<TYPE> dao) { GenericDao<TYPE> dao) {
if(!checkIfDatabaseExists(context, legacyTable))
return;
SQLiteDatabase upgradeDb = new Astrid2UpgradeHelper(context, legacyTable, SQLiteDatabase upgradeDb = new Astrid2UpgradeHelper(context, legacyTable,
null, 1).getReadableDatabase(); null, 1).getReadableDatabase();
@ -226,6 +234,10 @@ public final class UpgradeService {
upgradeDb.close(); upgradeDb.close();
} }
private static boolean checkIfDatabaseExists(Context context, String legacyTable) {
return context.getDatabasePath(legacyTable).exists();
}
/** /**
* Move data from tags tables into metadata table. We do this by looping * Move data from tags tables into metadata table. We do this by looping
* through both the tags and tagTaskMap databases, reading data from * through both the tags and tagTaskMap databases, reading data from
@ -235,6 +247,11 @@ public final class UpgradeService {
@SuppressWarnings("nls") @SuppressWarnings("nls")
private void migrateTagsToMetadata() { private void migrateTagsToMetadata() {
Context context = ContextManager.getContext(); Context context = ContextManager.getContext();
if(!checkIfDatabaseExists(context, tagsTable) ||
!checkIfDatabaseExists(context, tagTaskTable))
return;
SQLiteDatabase tagsDb = new Astrid2UpgradeHelper(context, tagsTable, SQLiteDatabase tagsDb = new Astrid2UpgradeHelper(context, tagsTable,
null, 1).getReadableDatabase(); null, 1).getReadableDatabase();
SQLiteDatabase tagTaskDb = new Astrid2UpgradeHelper(context, tagTaskTable, SQLiteDatabase tagTaskDb = new Astrid2UpgradeHelper(context, tagTaskTable,

@ -530,6 +530,7 @@ public class TaskController extends AbstractController {
*/ */
public TaskController(Context activity) { public TaskController(Context activity) {
super(activity); super(activity);
Log.e("HEY", "task table is " + tasksTable);
} }
/** /**
@ -546,6 +547,7 @@ public class TaskController extends AbstractController {
SQLiteOpenHelper databaseHelper = new TaskModelDatabaseHelper( SQLiteOpenHelper databaseHelper = new TaskModelDatabaseHelper(
context, tasksTable, tasksTable); context, tasksTable, tasksTable);
database = databaseHelper.getWritableDatabase(); database = databaseHelper.getWritableDatabase();
Log.e("HEY", "task table is " + tasksTable);
} }
/** Closes database resource */ /** Closes database resource */

@ -1,5 +1,7 @@
package com.todoroo.astrid.test; package com.todoroo.astrid.test;
import java.io.File;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.TestDependencyInjector; import com.todoroo.andlib.service.TestDependencyInjector;
import com.todoroo.andlib.test.TodorooTestCase; import com.todoroo.andlib.test.TodorooTestCase;
@ -44,14 +46,20 @@ public class DatabaseTestCase extends TodorooTestCase {
database.openForWriting(); database.openForWriting();
// clear legacy databases // clear legacy databases
getContext().deleteDatabase(TASKS_TEST); deleteDatabase(TASKS_TEST);
getContext().deleteDatabase(TAGS_TEST); deleteDatabase(TAGS_TEST);
getContext().deleteDatabase(TAG_TASK_TEST); deleteDatabase(TAG_TASK_TEST);
getContext().deleteDatabase(ALERTS_TEST); deleteDatabase(ALERTS_TEST);
getContext().deleteDatabase(SYNC_TEST); deleteDatabase(SYNC_TEST);
} }
@Override private void deleteDatabase(String database) {
File db = getContext().getDatabasePath(database);
if(db.exists())
db.delete();
}
@Override
protected void tearDown() throws Exception { protected void tearDown() throws Exception {
database.close(); database.close();
} }

@ -31,7 +31,8 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
public static void assertDatesEqual(Date old, int newDate) { public static void assertDatesEqual(Date old, int newDate) {
if(old == null) if(old == null)
assertEquals(0, newDate); assertEquals(0, newDate);
assertEquals(old.getTime() / 1000L, newDate); else
assertEquals(old.getTime() / 1000L, newDate);
} }
public void xtestEmptyUpgrade() { public void xtestEmptyUpgrade() {
@ -55,7 +56,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
TaskModelForEdit griffey = new TaskModelForEdit(); TaskModelForEdit griffey = new TaskModelForEdit();
griffey.setName("ken griffey jr"); griffey.setName("ken griffey jr");
griffey.setDefiniteDueDate(new Date(1234567L)); griffey.setDefiniteDueDate(new Date(1234567L));
griffey.setImportance(Importance.LEVEL_1); griffey.setImportance(Importance.LEVEL_4);
griffey.setEstimatedSeconds(3212); griffey.setEstimatedSeconds(3212);
griffey.setNotes("debut game: 1989"); griffey.setNotes("debut game: 1989");
taskController.saveTask(griffey, false); taskController.saveTask(griffey, false);
@ -63,7 +64,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
TaskModelForEdit guti = new com.todoroo.astrid.legacy.data.task.TaskModelForEdit(); TaskModelForEdit guti = new com.todoroo.astrid.legacy.data.task.TaskModelForEdit();
guti.setName("franklin gutierrez"); guti.setName("franklin gutierrez");
guti.setPreferredDueDate(new Date(System.currentTimeMillis() + 5000000L)); guti.setPreferredDueDate(new Date(System.currentTimeMillis() + 5000000L));
guti.setImportance(Importance.LEVEL_4); guti.setImportance(Importance.LEVEL_1);
guti.setHiddenUntil(new Date()); guti.setHiddenUntil(new Date());
guti.setRepeat(new RepeatInfo(RepeatInterval.DAYS, 10)); guti.setRepeat(new RepeatInfo(RepeatInterval.DAYS, 10));
guti.setElapsedSeconds(500); guti.setElapsedSeconds(500);
@ -77,6 +78,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
upgrade2To3(); upgrade2To3();
// verify that data exists in our new table // verify that data exists in our new table
database.openForReading();
TodorooCursor<Task> tasks = taskDao.query(Query.select(Task.PROPERTIES)); TodorooCursor<Task> tasks = taskDao.query(Query.select(Task.PROPERTIES));
assertEquals(2, tasks.getCount()); assertEquals(2, tasks.getCount());
@ -84,7 +86,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
Task task = new Task(tasks); Task task = new Task(tasks);
assertEquals(griffey.getName(), task.getValue(Task.TITLE)); assertEquals(griffey.getName(), task.getValue(Task.TITLE));
assertDatesEqual(griffey.getDefiniteDueDate(), task.getValue(Task.DUE_DATE)); assertDatesEqual(griffey.getDefiniteDueDate(), task.getValue(Task.DUE_DATE));
assertEquals((Integer)Task.IMPORTANCE_SHOULD_DO, task.getValue(Task.IMPORTANCE)); assertEquals((Integer)Task.IMPORTANCE_NONE, task.getValue(Task.IMPORTANCE));
assertEquals(griffey.getEstimatedSeconds(), task.getValue(Task.ESTIMATED_SECONDS)); assertEquals(griffey.getEstimatedSeconds(), task.getValue(Task.ESTIMATED_SECONDS));
assertEquals(griffey.getNotes(), task.getValue(Task.NOTES)); assertEquals(griffey.getNotes(), task.getValue(Task.NOTES));
assertEquals((Integer)0, task.getValue(Task.LAST_NOTIFIED)); assertEquals((Integer)0, task.getValue(Task.LAST_NOTIFIED));
@ -94,18 +96,18 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
task = new Task(tasks); task = new Task(tasks);
assertEquals(guti.getName(), task.getValue(Task.TITLE)); assertEquals(guti.getName(), task.getValue(Task.TITLE));
assertDatesEqual(guti.getDefiniteDueDate(), task.getValue(Task.DUE_DATE)); assertDatesEqual(guti.getDefiniteDueDate(), task.getValue(Task.DUE_DATE));
assertDatesEqual(guti.getPreferredDueDate(), task.getValue(Task.DUE_DATE)); assertDatesEqual(guti.getPreferredDueDate(), task.getValue(Task.PREFERRED_DUE_DATE));
assertDatesEqual(guti.getHiddenUntil(), task.getValue(Task.HIDDEN_UNTIL)); assertDatesEqual(guti.getHiddenUntil(), task.getValue(Task.HIDDEN_UNTIL));
assertEquals((Integer)Task.IMPORTANCE_DO_OR_DIE, task.getValue(Task.IMPORTANCE)); assertEquals((Integer)Task.IMPORTANCE_DO_OR_DIE, task.getValue(Task.IMPORTANCE));
assertEquals(guti.getRepeat().getValue(), task.getRepeatInfo().getValue()); assertEquals(guti.getRepeat().getValue(), task.getRepeatInfo().getValue());
assertEquals(guti.getRepeat().getInterval().ordinal(), task.getRepeatInfo().getInterval().ordinal()); assertEquals(guti.getRepeat().getInterval().ordinal(), task.getRepeatInfo().getInterval().ordinal());
assertEquals(guti.getElapsedSeconds(), task.getValue(Task.ELAPSED_SECONDS)); assertEquals(guti.getElapsedSeconds(), task.getValue(Task.ELAPSED_SECONDS));
assertEquals(createdDate, task.getValue(Task.CREATION_DATE)); assertDatesEqual(createdDate, task.getValue(Task.CREATION_DATE));
assertEquals(createdDate, task.getValue(Task.MODIFICATION_DATE)); assertDatesEqual(createdDate, task.getValue(Task.MODIFICATION_DATE));
} }
public void testTagTableUpgrade() { public void xtestTagTableUpgrade() {
TaskController taskController = new TaskController(getContext()); TaskController taskController = new TaskController(getContext());
taskController.open(); taskController.open();
TagController tagController = new TagController(getContext()); TagController tagController = new TagController(getContext());
@ -132,6 +134,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase {
upgrade2To3(); upgrade2To3();
// verify that data exists in our new table // verify that data exists in our new table
database.openForReading();
DataService tagService = new DataService(getContext()); DataService tagService = new DataService(getContext());
Tag[] tags = tagService.getGroupedTags(DataService.GROUPED_TAGS_BY_ALPHA); Tag[] tags = tagService.getGroupedTags(DataService.GROUPED_TAGS_BY_ALPHA);
assertEquals(2, tags.length); assertEquals(2, tags.length);

Loading…
Cancel
Save