From a22263ccd44cc06594fbf7f0074a8f43c86da3cd Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Tue, 13 Sep 2011 08:50:10 +0000 Subject: [PATCH] Fix whole-day calendar detection test, and expand it to handle a few more cases too git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@30453 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/calendar/CalendarHelpersTest.java | 33 ++++++++++++++++--- .../cmr/calendar/CalendarEntryDTO.java | 2 +- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/source/java/org/alfresco/repo/calendar/CalendarHelpersTest.java b/source/java/org/alfresco/repo/calendar/CalendarHelpersTest.java index 4ebe827449..b5b5926ee2 100644 --- a/source/java/org/alfresco/repo/calendar/CalendarHelpersTest.java +++ b/source/java/org/alfresco/repo/calendar/CalendarHelpersTest.java @@ -29,6 +29,7 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TimeZone; import org.alfresco.service.cmr.calendar.CalendarEntryDTO; import org.alfresco.service.cmr.calendar.CalendarRecurrenceHelper; @@ -48,15 +49,23 @@ public class CalendarHelpersTest @Test public void allDayDetection() { - Calendar c20110719_0000 = Calendar.getInstance(); - Calendar c20110719_1000 = Calendar.getInstance(); - Calendar c20110720_0000 = Calendar.getInstance(); - Calendar c20110721_0000 = Calendar.getInstance(); + TimeZone UTC = TimeZone.getTimeZone("UTC"); + TimeZone NewYork = TimeZone.getTimeZone("America/New_York"); + + Calendar c20110719_0000 = Calendar.getInstance(UTC); + Calendar c20110719_1000 = Calendar.getInstance(UTC); + Calendar c20110720_0000 = Calendar.getInstance(UTC); + Calendar c20110721_0000 = Calendar.getInstance(UTC); c20110719_0000.set(2011, 07, 19, 0, 0, 0); c20110719_1000.set(2011, 07, 19, 1, 0, 0); c20110720_0000.set(2011, 07, 20, 0, 0, 0); c20110721_0000.set(2011, 07, 21, 0, 0, 0); + Calendar c20110721_0000ny = Calendar.getInstance(NewYork); + Calendar c20110721_2000ny = Calendar.getInstance(NewYork); + c20110721_0000ny.set(2011, 07, 21, 0, 0, 0); + c20110721_2000ny.set(2011, 07, 21, 2, 0, 0); + CalendarEntryDTO entry = new CalendarEntryDTO(); // Start and end at the same midnight @@ -87,6 +96,22 @@ public class CalendarHelpersTest entry.setStart(c20110719_1000.getTime()); entry.setEnd( c20110719_1000.getTime()); assertFalse(CalendarEntryDTO.isAllDay(entry)); + + + // In another timezone, local midnight is OK + TimeZone defaultTimezone = TimeZone.getDefault(); + TimeZone.setDefault(NewYork); + + entry.setStart( c20110721_0000ny.getTime()); + entry.setEnd( c20110721_0000ny.getTime()); + assertTrue(CalendarEntryDTO.isAllDay(entry)); + + // But non midnight isn't + entry.setStart( c20110721_2000ny.getTime()); + entry.setEnd( c20110721_2000ny.getTime()); + assertFalse(CalendarEntryDTO.isAllDay(entry)); + + TimeZone.setDefault(defaultTimezone); } @Test public void dailyRecurrenceDates() diff --git a/source/java/org/alfresco/service/cmr/calendar/CalendarEntryDTO.java b/source/java/org/alfresco/service/cmr/calendar/CalendarEntryDTO.java index 88fd549436..2f332ceb80 100644 --- a/source/java/org/alfresco/service/cmr/calendar/CalendarEntryDTO.java +++ b/source/java/org/alfresco/service/cmr/calendar/CalendarEntryDTO.java @@ -303,7 +303,7 @@ public class CalendarEntryDTO implements CalendarEntry, Serializable startLocal.setTime(entry.getStart()); endLocal.setTime(entry.getEnd()); - // Check for midnight, first in UTC then again in Local time + // Check for midnight, first in UTC then again in Server Local Time Calendar[] starts = new Calendar[] { startUTC, startLocal }; Calendar[] ends = new Calendar[] { endUTC, endLocal }; for(int i=0; i