diff options
author | mkersten | 2005-12-02 17:06:32 +0000 |
---|---|---|
committer | mkersten | 2005-12-02 17:06:32 +0000 |
commit | 4d4b6884c53cb8b77f77bccc8b348f084ff4805d (patch) | |
tree | 62790516ec2abd03493640bcad81f40292fc863c /org.eclipse.mylyn.tasks.tests/src | |
parent | f2e05185f259ba6dae9522006f45fbdcaaf4375b (diff) | |
download | org.eclipse.mylyn.tasks-4d4b6884c53cb8b77f77bccc8b348f084ff4805d.tar.gz org.eclipse.mylyn.tasks-4d4b6884c53cb8b77f77bccc8b348f084ff4805d.tar.xz org.eclipse.mylyn.tasks-4d4b6884c53cb8b77f77bccc8b348f084ff4805d.zip |
Progress on: Bug 107457: Make tasklist saves more eager
Diffstat (limited to 'org.eclipse.mylyn.tasks.tests/src')
2 files changed, 119 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/AllTasklistTests.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/AllTasklistTests.java index de3dc3892..96e026f15 100644 --- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/AllTasklistTests.java +++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/AllTasklistTests.java @@ -28,6 +28,7 @@ public class AllTasklistTests { suite.addTestSuite(TaskHistoryTest.class); suite.addTestSuite(TaskDataExportTest.class); suite.addTestSuite(ChangeMainTaskDirTest.class); + suite.addTestSuite(PeriodicSaveTest.class); //$JUnit-END$ return suite; } diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/PeriodicSaveTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/PeriodicSaveTest.java new file mode 100644 index 000000000..f468eeb9d --- /dev/null +++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasklist/tests/PeriodicSaveTest.java @@ -0,0 +1,118 @@ +package org.eclipse.mylar.tasklist.tests; + +import java.io.File; + +import junit.framework.TestCase; + +import org.eclipse.mylar.core.InteractionEvent; +import org.eclipse.mylar.core.MylarPlugin; +import org.eclipse.mylar.core.internal.MylarContext; +import org.eclipse.mylar.core.internal.MylarContextManager; +import org.eclipse.mylar.tasklist.ITask; +import org.eclipse.mylar.tasklist.MylarTasklistPlugin; +import org.eclipse.mylar.tasklist.Task; +import org.eclipse.mylar.tasklist.TaskListManager; +import org.eclipse.mylar.tasklist.internal.SaveTimer; +import org.eclipse.mylar.tasklist.internal.TaskList; +import org.eclipse.mylar.tasklist.ui.actions.TaskActivateAction; + +/** + * Tests the mechanism for saving the task data periodically. + * + * If this test fails unexpectedly, try adjusting the timing. + * + * @author Wesley Coelho + */ +public class PeriodicSaveTest extends TestCase { + + private ITask task1 = null; + + private TaskListManager manager = MylarTasklistPlugin.getTaskListManager(); + + private SaveTimer saveTimer = null; + + private int saveTimerInterval = -1; + + protected void setUp() throws Exception { + super.setUp(); + + // Create a task and context with an interaction event to be saved + task1 = new Task(MylarTasklistPlugin.getTaskListManager().genUniqueTaskId(), "Periodic Save Task", true); + manager.addRootTask(task1); + MylarContext mockContext = MylarPlugin.getContextManager().loadContext(task1.getHandleIdentifier(), + task1.getPath()); + InteractionEvent event = new InteractionEvent(InteractionEvent.Kind.EDIT, "structureKind", "handle", "originId"); + mockContext.parseEvent(event); + MylarPlugin.getContextManager().contextActivated(mockContext); + + // Save the context file and check that it exists + MylarPlugin.getContextManager().saveContext(mockContext.getId(), task1.getPath()); + File taskFile = new File(MylarPlugin.getDefault().getMylarDataDirectory() + File.separator + task1.getPath() + + MylarContextManager.FILE_EXTENSION); + assertTrue(MylarPlugin.getContextManager().hasContext(task1.getPath())); + assertTrue(taskFile.exists()); + + // Make the periodic save run by setting its interval very small and + // waiting + saveTimer = MylarTasklistPlugin.getDefault().getSaveTimer(); + saveTimerInterval = saveTimer.getSaveIntervalMillis(); + } + + public void testPeriodicSave() { + + // Activate the task + (new TaskActivateAction()).run(task1); + + // Get the task from disk and read it's time + ITask diskTask = getTaskFromDisk(task1); + assertTrue(diskTask != null); + + long elapsedTimeBeforeSave = diskTask.getElapsedMillis(); + + saveTimer.setSaveIntervalMillis(500); + + try { + Thread.sleep(900); // Wait long enough that the save request should + // have fired + } catch (InterruptedException e) { + e.printStackTrace(); + } + + saveTimer.setSaveIntervalMillis(600000); // Prevent more save + // requests by setting long + // interval + + try { + Thread.sleep(1000); // Fudge time to allow disk write to finish + } catch (InterruptedException e) { + e.printStackTrace(); + } + + // Read the task from disk and check that it has a greater time + diskTask = getTaskFromDisk(task1); + assertTrue(diskTask.getElapsedMillis() > elapsedTimeBeforeSave); + + } + + public ITask getTaskFromDisk(ITask requestedTask) { + + File taskListFile = new File(MylarPlugin.getDefault().getMylarDataDirectory() + File.separator + + MylarTasklistPlugin.DEFAULT_TASK_LIST_FILE); + + assertTrue(taskListFile.exists()); + + TaskList tasklist = new TaskList(); + MylarTasklistPlugin.getDefault().getTaskListExternalizer().readTaskList(tasklist, taskListFile); + + return tasklist.getTaskForHandle(requestedTask.getHandleIdentifier(), false); + + } + + protected void tearDown() throws Exception { + + saveTimer.setSaveIntervalMillis(saveTimerInterval); + + super.tearDown(); + } + +} |