Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Davis2012-06-04 22:15:28 +0000
committerGerrit Code Review @ Eclipse.org2013-05-08 07:29:28 +0000
commita3474b6cc09d546b76aee19a21b003d54f8dd782 (patch)
treebc9142276bee75ec4fa7e99556fea57cca3fbb40 /org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests
parente83de18edfd3c3538882d1296b7f365cbc3d80ca (diff)
downloadorg.eclipse.mylyn.tasks-a3474b6cc09d546b76aee19a21b003d54f8dd782.tar.gz
org.eclipse.mylyn.tasks-a3474b6cc09d546b76aee19a21b003d54f8dd782.tar.xz
org.eclipse.mylyn.tasks-a3474b6cc09d546b76aee19a21b003d54f8dd782.zip
NEW - bug 250865: scheduling information incorrect when local time zone
changes https://bugs.eclipse.org/bugs/show_bug.cgi?id=250865 Change-Id: I0ae81f95cb228c7966037e9aa89ff5aa23a520f1
Diffstat (limited to 'org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests')
-rw-r--r--org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java2
-rw-r--r--org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/ScheduledTaskContainerTest.java325
2 files changed, 327 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java
index d1ffa1e9e..96a6a9b91 100644
--- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/AllTasksTests.java
@@ -29,6 +29,7 @@ import org.eclipse.mylyn.tasks.tests.data.TaskDataExternalizerTest;
import org.eclipse.mylyn.tasks.tests.data.Xml11InputStreamTest;
import org.eclipse.mylyn.tasks.tests.ui.AbstractRepositoryConnectorUiTest;
import org.eclipse.mylyn.tasks.tests.ui.MultipleTaskHyperlinkDetectorTest;
+import org.eclipse.mylyn.tasks.tests.ui.ScheduledTaskContainerTest;
import org.eclipse.mylyn.tasks.tests.ui.TaskAttachmentPropertyTesterTest;
import org.eclipse.mylyn.tasks.tests.ui.TaskHyperlinkDetectorTest;
import org.eclipse.mylyn.tasks.tests.ui.TaskListSynchronizationSchedulerTest;
@@ -137,6 +138,7 @@ public class AllTasksTests {
suite.addTestSuite(AbstractRepositoryConnectorUiTest.class);
suite.addTestSuite(SynchronizeTasksJobTest.class);
suite.addTestSuite(TaskAttributeTest.class);
+ suite.addTestSuite(ScheduledTaskContainerTest.class);
return suite;
}
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/ScheduledTaskContainerTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/ScheduledTaskContainerTest.java
new file mode 100644
index 000000000..916ffa156
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/ui/ScheduledTaskContainerTest.java
@@ -0,0 +1,325 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2010 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.tasks.tests.ui;
+
+import java.util.Calendar;
+import java.util.TimeZone;
+
+import junit.framework.TestCase;
+
+import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
+import org.eclipse.mylyn.internal.tasks.core.DateRange;
+import org.eclipse.mylyn.internal.tasks.core.DayDateRange;
+import org.eclipse.mylyn.internal.tasks.core.LocalTask;
+import org.eclipse.mylyn.internal.tasks.core.ScheduledTaskContainer;
+import org.eclipse.mylyn.internal.tasks.core.TaskActivityManager;
+import org.eclipse.mylyn.internal.tasks.core.TaskActivityUtil;
+import org.eclipse.mylyn.internal.tasks.core.WeekDateRange;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.tasks.core.ITask;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.tests.TaskTestUtil;
+import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector;
+
+/**
+ * @author Sam Davis
+ */
+public class ScheduledTaskContainerTest extends TestCase {
+ private TaskActivityManager taskActivityManager;
+
+ private long taskID;
+
+ private TaskRepository repository;
+
+ private final long instant = 1334355143000L;// arbitrary fixed point in time
+
+ @Override
+ protected void setUp() throws Exception {
+ taskActivityManager = TasksUiPlugin.getTaskActivityManager();
+ TaskTestUtil.resetTaskListAndRepositories();
+ repository = new TaskRepository(MockRepositoryConnector.CONNECTOR_KIND, MockRepositoryConnector.REPOSITORY_URL);
+ TasksUiPlugin.getRepositoryManager().addRepository(repository);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ taskActivityManager.clear();
+ }
+
+ public void testUSHawaiiDay() {
+ runDayTest("US/Hawaii");
+ }
+
+ public void testCanadaPacificDay() {
+ runDayTest("Canada/Pacific");
+ }
+
+ public void testBrazilWestDay() {
+ runDayTest("Brazil/West");
+ }
+
+ public void testEuropeDublinDay() {
+ runDayTest("Europe/Dublin");
+ }
+
+ public void testGreenwichDay() {
+ runDayTest("Greenwich");
+ }
+
+ public void testPortugalDay() {
+ runDayTest("Portugal");
+ }
+
+ public void testUniversalDay() {
+ runDayTest("Universal");
+ }
+
+ public void testEuropeViennaDay() {
+ runDayTest("Europe/Vienna");
+ }
+
+ public void testAsiaIstanbulDay() {
+ runDayTest("Asia/Istanbul");
+ }
+
+ public void testAsiaDubaiDay() {
+ runDayTest("Asia/Dubai");
+ }
+
+ public void testIndianComoroDay() {
+ runDayTest("Indian/Comoro");
+ }
+
+ public void testAsiaMacauDay() {
+ runDayTest("Asia/Macau");
+ }
+
+ public void testAustraliaSouthDay() {
+ runDayTest("Australia/South");
+ }
+
+ public void testAsiaTokyoDay() {
+ runDayTest("Asia/Tokyo");
+ }
+
+// public void testPacificFijiDay() {
+// // Fails because we cannot distinguish UTC+12 to UTC+14 from UTC-12 to -10
+// runDayTest("Pacific/Fiji");
+// }
+
+ public void testUSHawaiiWeek() {
+ runWeekTest("US/Hawaii");
+ }
+
+ public void testCanadaPacificWeek() {
+ runWeekTest("Canada/Pacific");
+ }
+
+ public void testBrazilWestWeek() {
+ runWeekTest("Brazil/West");
+ }
+
+ public void testEuropeDublinWeek() {
+ runWeekTest("Europe/Dublin");
+ }
+
+ public void testGreenwichWeek() {
+ runWeekTest("Greenwich");
+ }
+
+ public void testPortugalWeek() {
+ runWeekTest("Portugal");
+ }
+
+ public void testUniversalWeek() {
+ runWeekTest("Universal");
+ }
+
+ public void testEuropeViennaWeek() {
+ runWeekTest("Europe/Vienna");
+ }
+
+ public void testAsiaIstanbulWeek() {
+ runWeekTest("Asia/Istanbul");
+ }
+
+ public void testAsiaDubaiWeek() {
+ runWeekTest("Asia/Dubai");
+ }
+
+ public void testIndianComoroWeek() {
+ runWeekTest("Indian/Comoro");
+ }
+
+ public void testAsiaMacauWeek() {
+ runWeekTest("Asia/Macau");
+ }
+
+ public void testAustraliaSouthWeek() {
+ runWeekTest("Australia/South");
+ }
+
+ public void testAsiaTokyoWeek() {
+ runWeekTest("Asia/Tokyo");
+ }
+
+// public void testPacificFijiWeek() {
+// // Fails because we cannot distinguish UTC+12 to UTC+14 from UTC-12 to -10
+// runWeekTest("Pacific/Fiji");
+// }
+
+ /**
+ * Test day bins
+ */
+ protected void runDayTest(String localTimezone) {
+ // create scheduled tasks
+ ITask taskUSHawaii = createTaskScheduledForDay(instant, "US/Hawaii");
+ ITask taskCanadaPacific = createTaskScheduledForDay(instant, "Canada/Pacific");
+ ITask taskCanadaEastern = createTaskScheduledForDay(instant, "Canada/Eastern");
+ ITask taskEuropeWarsaw = createTaskScheduledForDay(instant, "Europe/Warsaw");
+ ITask taskIndianComoro = createTaskScheduledForDay(instant, "Indian/Comoro");
+ ITask taskAsiaTokyo = createTaskScheduledForDay(instant, "Asia/Tokyo");
+ ITask taskAustraliaSydney = createTaskScheduledForDay(instant, "Australia/Sydney");
+ // create due tasks
+ ITask taskUSHawaiiDue = createTaskDueForDay(instant, "US/Hawaii");
+ ITask taskCanadaPacificDue = createTaskDueForDay(instant, "Canada/Pacific");
+ ITask taskCanadaEasternDue = createTaskDueForDay(instant, "Canada/Eastern");
+ ITask taskEuropeWarsawDue = createTaskDueForDay(instant, "Europe/Warsaw");
+ ITask taskIndianComoroDue = createTaskDueForDay(instant, "Indian/Comoro");
+ ITask taskAsiaTokyoDue = createTaskDueForDay(instant, "Asia/Tokyo");
+ ITask taskAustraliaSydneyDue = createTaskDueForDay(instant, "Australia/Sydney");
+ ScheduledTaskContainer dayContainer = new ScheduledTaskContainer(taskActivityManager, getDayOf(instant,
+ localTimezone));
+ // check scheduled tasks are contained
+ assertTrue(dayContainer.getChildren().contains(taskUSHawaii));
+ assertTrue(dayContainer.getChildren().contains(taskCanadaPacific));
+ assertTrue(dayContainer.getChildren().contains(taskCanadaEastern));
+ assertTrue(dayContainer.getChildren().contains(taskEuropeWarsaw));
+ assertTrue(dayContainer.getChildren().contains(taskIndianComoro));
+ assertTrue(dayContainer.getChildren().contains(taskAsiaTokyo));
+ assertTrue(dayContainer.getChildren().contains(taskAustraliaSydney));
+ // check due tasks are contained
+ assertTrue(dayContainer.getChildren().contains(taskUSHawaiiDue));
+ assertTrue(dayContainer.getChildren().contains(taskCanadaPacificDue));
+ assertTrue(dayContainer.getChildren().contains(taskCanadaEasternDue));
+ assertTrue(dayContainer.getChildren().contains(taskEuropeWarsawDue));
+ assertTrue(dayContainer.getChildren().contains(taskIndianComoroDue));
+ assertTrue(dayContainer.getChildren().contains(taskAsiaTokyoDue));
+ assertTrue(dayContainer.getChildren().contains(taskAustraliaSydneyDue));
+ // surrounding days should be empty
+ DayDateRange previousDay = getDayOf(instant, localTimezone);
+ snapForwardNumDays(previousDay, -1);
+ ScheduledTaskContainer previousDayContainer = new ScheduledTaskContainer(taskActivityManager, previousDay);
+ assertTrue(previousDayContainer.getChildren().isEmpty());
+ DayDateRange nextDay = getDayOf(instant, localTimezone);
+ snapForwardNumDays(nextDay, 1);
+ ScheduledTaskContainer nextDayContainer = new ScheduledTaskContainer(taskActivityManager, nextDay);
+ assertTrue(nextDayContainer.getChildren().isEmpty());
+ }
+
+ /**
+ * test week bins
+ */
+ protected void runWeekTest(String localTimezone) {
+ ITask taskUSHawaii = createTaskScheduledForWeek(instant, "US/Hawaii");
+ ITask taskCanadaPacific = createTaskScheduledForWeek(instant, "Canada/Pacific");
+ ITask taskCanadaEastern = createTaskScheduledForWeek(instant, "Canada/Eastern");
+ ITask taskEuropeWarsaw = createTaskScheduledForWeek(instant, "Europe/Warsaw");
+ ITask taskIndianComoro = createTaskScheduledForWeek(instant, "Indian/Comoro");
+ ITask taskAsiaTokyo = createTaskScheduledForWeek(instant, "Asia/Tokyo");
+ ITask taskAustraliaSydney = createTaskScheduledForWeek(instant, "Australia/Sydney");
+ ScheduledTaskContainer weekContainer = new ScheduledTaskContainer(taskActivityManager, getWeekOf(instant,
+ localTimezone));
+ assertTrue(weekContainer.getChildren().contains(taskUSHawaii));
+ assertTrue(weekContainer.getChildren().contains(taskCanadaPacific));
+ assertTrue(weekContainer.getChildren().contains(taskCanadaEastern));
+ assertTrue(weekContainer.getChildren().contains(taskEuropeWarsaw));
+ assertTrue(weekContainer.getChildren().contains(taskIndianComoro));
+ assertTrue(weekContainer.getChildren().contains(taskAsiaTokyo));
+ assertTrue(weekContainer.getChildren().contains(taskAustraliaSydney));
+ // surrounding days should be empty
+ DayDateRange previousDay = TaskActivityUtil.getDayOf(weekContainer.getDateRange().getStartDate().getTime());
+ snapForwardNumDays(previousDay, -1);
+ ScheduledTaskContainer previousDayContainer = new ScheduledTaskContainer(taskActivityManager, previousDay);
+ assertTrue(previousDayContainer.getChildren().isEmpty());
+ DayDateRange nextDay = TaskActivityUtil.getDayOf(weekContainer.getDateRange().getEndDate().getTime());
+ snapForwardNumDays(nextDay, 1);
+ ScheduledTaskContainer nextDayContainer = new ScheduledTaskContainer(taskActivityManager, nextDay);
+ assertTrue(nextDayContainer.getChildren().isEmpty());
+ // surrounding weeks should be empty
+ WeekDateRange previousWeek = TaskActivityUtil.getWeekOf(previousDay.getStartDate().getTime());
+ ScheduledTaskContainer previousWeekContainer = new ScheduledTaskContainer(taskActivityManager, previousWeek);
+ assertTrue(previousWeekContainer.getChildren().isEmpty());
+ WeekDateRange nextWeek = TaskActivityUtil.getWeekOf(nextDay.getStartDate().getTime());
+ ScheduledTaskContainer nextWeekContainer = new ScheduledTaskContainer(taskActivityManager, nextWeek);
+ assertTrue(nextWeekContainer.getChildren().isEmpty());
+ }
+
+ protected void snapForwardNumDays(DayDateRange previousDay, int num) {
+ previousDay.getStartDate().add(Calendar.DAY_OF_MONTH, num);
+ previousDay.getEndDate().add(Calendar.DAY_OF_MONTH, num);
+ }
+
+ protected AbstractTask createTaskScheduledForDay(long date, String timezone) {
+ AbstractTask task = new LocalTask(taskID++ + "", "task " + taskID);
+ taskActivityManager.setScheduledFor(task, getDayOf(date, timezone));
+ return task;
+ }
+
+ protected AbstractTask createTaskDueForDay(long date, String timezone) {
+ AbstractTask task = new LocalTask(taskID++ + "", "task " + taskID);
+ taskActivityManager.setDueDate(task, getDayOf(date, timezone).getStartDate().getTime());
+ return task;
+ }
+
+ protected AbstractTask createTaskScheduledForWeek(long date, String timezone) {
+ AbstractTask task = new LocalTask(taskID++ + "", "task " + taskID);
+ taskActivityManager.setScheduledFor(task, getWeekOf(date, timezone));
+ return task;
+ }
+
+ protected DateRange getWeekOf(long date, String timezoneString) {
+ TimeZone timeZone = TimeZone.getTimeZone(timezoneString);
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeInMillis(date);
+ Calendar start = getSameDayInTimeZone(cal, timeZone);
+ TaskActivityUtil.snapStartOfWorkWeek(start);
+ Calendar end = getSameDayInTimeZone(cal, timeZone);
+ TaskActivityUtil.snapEndOfWeek(end);
+ WeekDateRange weekInTimezone = new WeekDateRange(start, end);
+ return weekInTimezone;
+ }
+
+ protected DayDateRange getDayOf(long date, String timezoneString) {
+ TimeZone timeZone = TimeZone.getTimeZone(timezoneString);
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeInMillis(date);
+ Calendar start = getSameDayInTimeZone(cal, timeZone);
+ Calendar end = getSameDayInTimeZone(cal, timeZone);
+ TaskActivityUtil.snapEndOfDay(end);
+ DayDateRange dayInTimezone = new DayDateRange(start, end);
+ return dayInTimezone;
+ }
+
+ /**
+ * use the same y/m/d values but ignore the time
+ */
+ protected Calendar getSameDayInTimeZone(Calendar cal, TimeZone timeZone) {
+ Calendar day = Calendar.getInstance(timeZone);
+ day.set(Calendar.YEAR, cal.get(Calendar.YEAR));
+ day.set(Calendar.MONTH, cal.get(Calendar.MONTH));
+ day.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
+ TaskActivityUtil.snapStartOfDay(day);
+ return day;
+ }
+
+} \ No newline at end of file

Back to the top