From ecc539418bd6dcf341728d3755c33a1fe43bbdb7 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Sun, 16 May 2010 15:28:17 -0700 Subject: [PATCH] Got closer to finishing astrid upgrade first unit test, plus fixed startup crash --- .../appwidget/AstridAppWidgetProvider.java | 5 +++ .../astrid/utilities/StartupReceiver.java | 12 +++++-- .../astrid/service/UpgradeService.java | 35 ++++++++++++++----- .../legacy/data/task/TaskController.java | 2 ++ .../todoroo/astrid/test/DatabaseTestCase.java | 20 +++++++---- .../upgrade/Astrid2To3UpgradeTests.java | 19 +++++----- 6 files changed, 67 insertions(+), 26 deletions(-) diff --git a/src-legacy/com/timsu/astrid/appwidget/AstridAppWidgetProvider.java b/src-legacy/com/timsu/astrid/appwidget/AstridAppWidgetProvider.java index da4ea5ecb..2701ef70f 100644 --- a/src-legacy/com/timsu/astrid/appwidget/AstridAppWidgetProvider.java +++ b/src-legacy/com/timsu/astrid/appwidget/AstridAppWidgetProvider.java @@ -20,9 +20,14 @@ import com.timsu.astrid.activities.TaskEdit; import com.timsu.astrid.activities.TaskList; import com.timsu.astrid.data.task.TaskController; import com.timsu.astrid.data.task.TaskModelForWidget; +import com.todoroo.astrid.service.AstridDependencyInjector; public class AstridAppWidgetProvider extends AppWidgetProvider { + static { + AstridDependencyInjector.initialize(); + } + private final static String TAG = "AstridAppWidgetProvider"; 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 }; diff --git a/src-legacy/com/timsu/astrid/utilities/StartupReceiver.java b/src-legacy/com/timsu/astrid/utilities/StartupReceiver.java index 679b0e9c0..f5670a9dd 100644 --- a/src-legacy/com/timsu/astrid/utilities/StartupReceiver.java +++ b/src-legacy/com/timsu/astrid/utilities/StartupReceiver.java @@ -1,5 +1,7 @@ package com.timsu.astrid.utilities; +import java.util.List; + import android.Manifest; import android.app.AlarmManager; import android.app.AlertDialog; @@ -7,22 +9,26 @@ import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; import android.content.Intent; +import android.content.DialogInterface.OnClickListener; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.util.Log; + import com.timsu.astrid.R; import com.timsu.astrid.activities.SyncPreferences; import com.timsu.astrid.appwidget.AstridAppWidgetProvider.UpdateService; import com.timsu.astrid.sync.SynchronizationService; - -import java.util.List; +import com.todoroo.astrid.service.AstridDependencyInjector; public class StartupReceiver extends BroadcastReceiver { private static boolean hasStartedUp = false; + static { + AstridDependencyInjector.initialize(); + } + @Override /** Called when the system is started up */ public void onReceive(Context context, Intent intent) { diff --git a/src/com/todoroo/astrid/service/UpgradeService.java b/src/com/todoroo/astrid/service/UpgradeService.java index a8c257790..49088f701 100644 --- a/src/com/todoroo/astrid/service/UpgradeService.java +++ b/src/com/todoroo/astrid/service/UpgradeService.java @@ -8,6 +8,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; +import android.util.Log; import com.timsu.astrid.data.AbstractController; 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.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.model.Metadata; @@ -33,6 +35,9 @@ public final class UpgradeService { @Autowired private MetadataDao metadataDao; + @Autowired + private Database database; + @Autowired private String tasksTable; @@ -72,21 +77,14 @@ public final class UpgradeService { */ private static class Astrid2UpgradeHelper extends SQLiteOpenHelper { - private String name; - public Astrid2UpgradeHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); - this.name = name; } @Override - @SuppressWarnings("nls") public void onCreate(SQLiteDatabase db) { - // create empty table with nothing in it - String sql = "CREATE TABLE IF NOT EXISTS " + name + " (" + - AbstractModel.ID_PROPERTY + " INTEGER);"; - db.execSQL(sql); + // do nothing } @Override @@ -102,12 +100,14 @@ public final class UpgradeService { private void upgrade2To3() { Context context = ContextManager.getContext(); + database.openForWriting(); + // --- upgrade tasks table HashMap> propertyMap = new HashMap>(); propertyMap.put(AbstractController.KEY_ROWID, Task.ID); 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 propertyMap.put(AbstractTaskModel.IMPORTANCE, Task.IMPORTANCE); propertyMap.put(AbstractTaskModel.ESTIMATED_SECONDS, Task.ESTIMATED_SECONDS); @@ -131,6 +131,7 @@ public final class UpgradeService { // --- upgrade tags tables migrateTagsToMetadata(); + database.close(); } @@ -152,6 +153,7 @@ public final class UpgradeService { public Void visitDouble(Property property, UpgradeVisitorContainer data) { double value = data.cursor.getDouble(data.columnIndex); data.model.setValue(property, value); + Log.d("upgrade", "wrote " + value + " to -> " + property + " of model id " + data.cursor.getLong(1)); return null; } @@ -173,6 +175,7 @@ public final class UpgradeService { value = data.cursor.getInt(data.columnIndex); data.model.setValue(property, value); + Log.d("upgrade", "wrote " + value + " to -> " + property + " of model id " + data.cursor.getLong(1)); return null; } @@ -180,6 +183,7 @@ public final class UpgradeService { public Void visitLong(Property property, UpgradeVisitorContainer data) { long value = data.cursor.getLong(data.columnIndex); data.model.setValue(property, value); + Log.d("upgrade", "wrote " + value + " to -> " + property + " of model id " + data.cursor.getLong(1)); return null; } @@ -187,6 +191,7 @@ public final class UpgradeService { public Void visitString(Property property, UpgradeVisitorContainer data) { String value = data.cursor.getString(data.columnIndex); data.model.setValue(property, value); + Log.d("upgrade", "wrote " + value + " to -> " + property + " of model id " + data.cursor.getLong(1)); return null; } } @@ -206,6 +211,9 @@ public final class UpgradeService { HashMap> propertyMap, TYPE model, GenericDao dao) { + if(!checkIfDatabaseExists(context, legacyTable)) + return; + SQLiteDatabase upgradeDb = new Astrid2UpgradeHelper(context, legacyTable, null, 1).getReadableDatabase(); @@ -226,6 +234,10 @@ public final class UpgradeService { 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 * through both the tags and tagTaskMap databases, reading data from @@ -235,6 +247,11 @@ public final class UpgradeService { @SuppressWarnings("nls") private void migrateTagsToMetadata() { Context context = ContextManager.getContext(); + + if(!checkIfDatabaseExists(context, tagsTable) || + !checkIfDatabaseExists(context, tagTaskTable)) + return; + SQLiteDatabase tagsDb = new Astrid2UpgradeHelper(context, tagsTable, null, 1).getReadableDatabase(); SQLiteDatabase tagTaskDb = new Astrid2UpgradeHelper(context, tagTaskTable, diff --git a/tests/src/com/todoroo/astrid/legacy/data/task/TaskController.java b/tests/src/com/todoroo/astrid/legacy/data/task/TaskController.java index 8105e58bc..6ad360800 100644 --- a/tests/src/com/todoroo/astrid/legacy/data/task/TaskController.java +++ b/tests/src/com/todoroo/astrid/legacy/data/task/TaskController.java @@ -530,6 +530,7 @@ public class TaskController extends AbstractController { */ public TaskController(Context activity) { super(activity); + Log.e("HEY", "task table is " + tasksTable); } /** @@ -546,6 +547,7 @@ public class TaskController extends AbstractController { SQLiteOpenHelper databaseHelper = new TaskModelDatabaseHelper( context, tasksTable, tasksTable); database = databaseHelper.getWritableDatabase(); + Log.e("HEY", "task table is " + tasksTable); } /** Closes database resource */ diff --git a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java index f4570e52d..10cb367b7 100644 --- a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java +++ b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java @@ -1,5 +1,7 @@ package com.todoroo.astrid.test; +import java.io.File; + import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.TestDependencyInjector; import com.todoroo.andlib.test.TodorooTestCase; @@ -44,14 +46,20 @@ public class DatabaseTestCase extends TodorooTestCase { database.openForWriting(); // clear legacy databases - getContext().deleteDatabase(TASKS_TEST); - getContext().deleteDatabase(TAGS_TEST); - getContext().deleteDatabase(TAG_TASK_TEST); - getContext().deleteDatabase(ALERTS_TEST); - getContext().deleteDatabase(SYNC_TEST); + deleteDatabase(TASKS_TEST); + deleteDatabase(TAGS_TEST); + deleteDatabase(TAG_TASK_TEST); + deleteDatabase(ALERTS_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 { database.close(); } diff --git a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java index 764777940..bd311cd99 100644 --- a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java +++ b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java @@ -31,7 +31,8 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { public static void assertDatesEqual(Date old, int newDate) { if(old == null) assertEquals(0, newDate); - assertEquals(old.getTime() / 1000L, newDate); + else + assertEquals(old.getTime() / 1000L, newDate); } public void xtestEmptyUpgrade() { @@ -55,7 +56,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { TaskModelForEdit griffey = new TaskModelForEdit(); griffey.setName("ken griffey jr"); griffey.setDefiniteDueDate(new Date(1234567L)); - griffey.setImportance(Importance.LEVEL_1); + griffey.setImportance(Importance.LEVEL_4); griffey.setEstimatedSeconds(3212); griffey.setNotes("debut game: 1989"); taskController.saveTask(griffey, false); @@ -63,7 +64,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { TaskModelForEdit guti = new com.todoroo.astrid.legacy.data.task.TaskModelForEdit(); guti.setName("franklin gutierrez"); guti.setPreferredDueDate(new Date(System.currentTimeMillis() + 5000000L)); - guti.setImportance(Importance.LEVEL_4); + guti.setImportance(Importance.LEVEL_1); guti.setHiddenUntil(new Date()); guti.setRepeat(new RepeatInfo(RepeatInterval.DAYS, 10)); guti.setElapsedSeconds(500); @@ -77,6 +78,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { upgrade2To3(); // verify that data exists in our new table + database.openForReading(); TodorooCursor tasks = taskDao.query(Query.select(Task.PROPERTIES)); assertEquals(2, tasks.getCount()); @@ -84,7 +86,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { Task task = new Task(tasks); assertEquals(griffey.getName(), task.getValue(Task.TITLE)); 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.getNotes(), task.getValue(Task.NOTES)); assertEquals((Integer)0, task.getValue(Task.LAST_NOTIFIED)); @@ -94,18 +96,18 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { task = new Task(tasks); assertEquals(guti.getName(), task.getValue(Task.TITLE)); 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)); assertEquals((Integer)Task.IMPORTANCE_DO_OR_DIE, task.getValue(Task.IMPORTANCE)); assertEquals(guti.getRepeat().getValue(), task.getRepeatInfo().getValue()); assertEquals(guti.getRepeat().getInterval().ordinal(), task.getRepeatInfo().getInterval().ordinal()); assertEquals(guti.getElapsedSeconds(), task.getValue(Task.ELAPSED_SECONDS)); - assertEquals(createdDate, task.getValue(Task.CREATION_DATE)); - assertEquals(createdDate, task.getValue(Task.MODIFICATION_DATE)); + assertDatesEqual(createdDate, task.getValue(Task.CREATION_DATE)); + assertDatesEqual(createdDate, task.getValue(Task.MODIFICATION_DATE)); } - public void testTagTableUpgrade() { + public void xtestTagTableUpgrade() { TaskController taskController = new TaskController(getContext()); taskController.open(); TagController tagController = new TagController(getContext()); @@ -132,6 +134,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { upgrade2To3(); // verify that data exists in our new table + database.openForReading(); DataService tagService = new DataService(getContext()); Tag[] tags = tagService.getGroupedTags(DataService.GROUPED_TAGS_BY_ALPHA); assertEquals(2, tags.length);