From deab128d6102e5a68392abc498e15626b7ecd26c Mon Sep 17 00:00:00 2001 From: Tim Su Date: Sat, 22 May 2010 13:38:28 -0700 Subject: [PATCH] Attempt to fix unit test dependency injection in static context --- .../com/todoroo/astrid/alarms/Alarm.java | 106 ++++++++++++++++++ .../todoroo/astrid/alarms/AlarmService.java | 34 ++++++ .../todoroo/astrid/alarms/AlarmsDatabase.java | 82 ++++++++++++++ .../service/AstridDependencyInjector.java | 1 + .../todoroo/astrid/test/DatabaseTestCase.java | 14 +-- .../upgrade/Astrid2To3UpgradeTests.java | 4 +- 6 files changed, 232 insertions(+), 9 deletions(-) create mode 100644 plugin-src/com/todoroo/astrid/alarms/Alarm.java create mode 100644 plugin-src/com/todoroo/astrid/alarms/AlarmService.java create mode 100644 plugin-src/com/todoroo/astrid/alarms/AlarmsDatabase.java diff --git a/plugin-src/com/todoroo/astrid/alarms/Alarm.java b/plugin-src/com/todoroo/astrid/alarms/Alarm.java new file mode 100644 index 000000000..7b6cd7de7 --- /dev/null +++ b/plugin-src/com/todoroo/astrid/alarms/Alarm.java @@ -0,0 +1,106 @@ +/** + * See the file "LICENSE" for the full license governing this code. + */ +package com.todoroo.astrid.alarms; + + +import android.content.ContentValues; + +import com.todoroo.andlib.data.AbstractModel; +import com.todoroo.andlib.data.Property; +import com.todoroo.andlib.data.Table; +import com.todoroo.andlib.data.TodorooCursor; +import com.todoroo.andlib.data.Property.IntegerProperty; +import com.todoroo.andlib.data.Property.LongProperty; +import com.todoroo.astrid.model.Metadata; +import com.todoroo.astrid.model.Task; + +/** + * Data Model which represents an alarm + * + * @author Tim Su + * + */ +@SuppressWarnings("nls") +public class Alarm extends AbstractModel { + + // --- table + + public static final Table TABLE = new Table("alarm", Alarm.class); + + // --- properties + + /** ID */ + public static final LongProperty ID = new LongProperty( + TABLE, ID_PROPERTY_NAME); + + /** Associated Task */ + public static final LongProperty TASK = new LongProperty( + TABLE, "task"); + + /** Associated Task */ + public static final IntegerProperty TIME = new IntegerProperty( + TABLE, "time"); + + /** Associated Task */ + public static final IntegerProperty TYPE = new IntegerProperty( + TABLE, "type"); + + /** List of all properties for this model */ + public static final Property[] PROPERTIES = generateProperties(Alarm.class); + + // --- constants + + /** this alarm was already triggered */ + public static final int TYPE_TRIGGERED = 0; + + /** this alarm is single-shot */ + public static final int TYPE_SINGLE = 1; + + /** this alarm repeats itself until turned off */ + public static final int TYPE_REPEATING = 2; + + // --- defaults + + /** Default values container */ + private static final ContentValues defaultValues = new ContentValues(); + + static { + defaultValues.put(TYPE.name, TYPE_SINGLE); + } + + @Override + public ContentValues getDefaultValues() { + return defaultValues; + } + + // --- data access boilerplate + + public Alarm() { + super(); + } + + public Alarm(TodorooCursor cursor) { + this(); + readPropertiesFromCursor(cursor); + } + + public void readFromCursor(TodorooCursor cursor) { + super.readPropertiesFromCursor(cursor); + } + + @Override + public long getId() { + return getIdHelper(ID); + }; + + // --- parcelable helpers + + private static final Creator CREATOR = new ModelCreator(Task.class); + + @Override + protected Creator getCreator() { + return CREATOR; + } + +} diff --git a/plugin-src/com/todoroo/astrid/alarms/AlarmService.java b/plugin-src/com/todoroo/astrid/alarms/AlarmService.java new file mode 100644 index 000000000..94cd5fdc3 --- /dev/null +++ b/plugin-src/com/todoroo/astrid/alarms/AlarmService.java @@ -0,0 +1,34 @@ +package com.todoroo.astrid.alarms; + +import android.content.Context; + +import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.DependencyInjectionService; +import com.todoroo.astrid.dao.MetadataDao; +import com.todoroo.astrid.service.MetadataService; + +/** + * Provides operations for working with alerts + * + * @author Tim Su + * + */ +@SuppressWarnings("nls") +public class AlarmService { + + /** + * Metadata key for # of alarms + */ + public static final String ALARM_COUNT = "alarms-count"; + + @Autowired + private MetadataDao metadataDao; + + @Autowired + private MetadataService metadataService; + + public AlarmService(@SuppressWarnings("unused") Context context) { + DependencyInjectionService.getInstance().inject(this); + } + +} diff --git a/plugin-src/com/todoroo/astrid/alarms/AlarmsDatabase.java b/plugin-src/com/todoroo/astrid/alarms/AlarmsDatabase.java new file mode 100644 index 000000000..ea0306d04 --- /dev/null +++ b/plugin-src/com/todoroo/astrid/alarms/AlarmsDatabase.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2009, Todoroo Inc + * All Rights Reserved + * http://www.todoroo.com + */ +package com.todoroo.astrid.alarms; + +import com.todoroo.andlib.data.AbstractDatabase; +import com.todoroo.andlib.data.Table; + +/** + * Database wrapper + * + * @author Tim Su + * + */ +@SuppressWarnings("nls") +public class AlarmsDatabase extends AbstractDatabase { + + // --- constants + + /** + * Database version number. This variable must be updated when database + * tables are updated, as it determines whether a database needs updating. + */ + public static final int VERSION = 1; + + /** + * Database name (must be unique) + */ + private static final String NAME = "alarms"; + + /** + * List of table/ If you're adding a new table, add it to this list and + * also make sure that our SQLite helper does the right thing. + */ + public static final Table[] TABLES = new Table[] { + Alarm.TABLE + }; + + // --- implementation + + @Override + protected String getName() { + return NAME; + } + + @Override + protected int getVersion() { + return VERSION; + } + + @Override + public Table[] getTables() { + return TABLES; + } + + @Override + protected void onCreateTables() { + StringBuilder sql = new StringBuilder(); + sql.append("CREATE INDEX IF NOT EXISTS a_task ON "). + append(Alarm.TABLE).append('('). + append(Alarm.TASK.name). + append(')'); + database.execSQL(sql.toString()); + + sql.setLength(0); + sql.append("CREATE INDEX IF NOT EXISTS a_timetype ON "). + append(Alarm.TABLE).append('('). + append(Alarm.TIME.name).append(','). + append(Alarm.TYPE.name). + append(')'); + database.execSQL(sql.toString()); + } + + @Override + protected boolean onUpgrade(int oldVersion, int newVersion) { + return false; + } + +} + diff --git a/src/com/todoroo/astrid/service/AstridDependencyInjector.java b/src/com/todoroo/astrid/service/AstridDependencyInjector.java index e9b19beac..bc1694729 100644 --- a/src/com/todoroo/astrid/service/AstridDependencyInjector.java +++ b/src/com/todoroo/astrid/service/AstridDependencyInjector.java @@ -152,4 +152,5 @@ public class AstridDependencyInjector implements AbstractDependencyInjector { AstridDependencyInjector() { // prevent instantiation } + } diff --git a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java index 10cb367b7..f108f73a9 100644 --- a/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java +++ b/tests/src/com/todoroo/astrid/test/DatabaseTestCase.java @@ -3,10 +3,10 @@ package com.todoroo.astrid.test; import java.io.File; import com.todoroo.andlib.service.Autowired; +import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.TestDependencyInjector; import com.todoroo.andlib.test.TodorooTestCase; import com.todoroo.astrid.dao.Database; -import com.todoroo.astrid.service.AstridDependencyInjector; /** * Test case that automatically sets up and tears down a test database @@ -26,8 +26,7 @@ public class DatabaseTestCase extends TodorooTestCase { public Database database; static { - AstridDependencyInjector.initialize(); - + // initialize test dependency injector TestDependencyInjector injector = TestDependencyInjector.initialize("db"); injector.addInjectable("tasksTable", TASKS_TEST); injector.addInjectable("tagsTable", TAGS_TEST); @@ -41,16 +40,17 @@ public class DatabaseTestCase extends TodorooTestCase { protected void setUp() throws Exception { super.setUp(); - // create new test database - database.clear(); - database.openForWriting(); + DependencyInjectionService.getInstance().inject(this); - // clear legacy databases + // empty out test databases + database.clear(); deleteDatabase(TASKS_TEST); deleteDatabase(TAGS_TEST); deleteDatabase(TAG_TASK_TEST); deleteDatabase(ALERTS_TEST); deleteDatabase(SYNC_TEST); + + database.openForWriting(); } private void deleteDatabase(String database) { diff --git a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java index bd311cd99..d024319a5 100644 --- a/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java +++ b/tests/src/com/todoroo/astrid/upgrade/Astrid2To3UpgradeTests.java @@ -35,7 +35,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { assertEquals(old.getTime() / 1000L, newDate); } - public void xtestEmptyUpgrade() { + public void testEmptyUpgrade() { TaskController taskController = new TaskController(getContext()); taskController.open(); assertEquals(0, taskController.getAllTaskIdentifiers().size()); @@ -107,7 +107,7 @@ public class Astrid2To3UpgradeTests extends DatabaseTestCase { } - public void xtestTagTableUpgrade() { + public void testTagTableUpgrade() { TaskController taskController = new TaskController(getContext()); taskController.open(); TagController tagController = new TagController(getContext());