Skip to content

Commit

Permalink
Merge pull request #5466 from grzesiek2010/fix_timezones
Browse files Browse the repository at this point in the history
Fixed setting timezones
  • Loading branch information
grzesiek2010 committed Feb 28, 2023
2 parents 28c77c6 + d2cef99 commit 39c9686
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.odk.collect.android.application.Collect;
import org.odk.collect.android.logic.DatePickerDetails;
import org.odk.collect.android.widgets.utilities.DateTimeWidgetUtils;
import org.odk.collect.testshared.TimeZoneSetter;

import java.util.Calendar;
import java.util.Date;
Expand Down Expand Up @@ -68,7 +69,7 @@ public void setUp() {
@Test
public void getDateTimeLabelTest() {
Locale.setDefault(Locale.ENGLISH);
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
TimeZoneSetter.setTimezone(TimeZone.getTimeZone("GMT"));

// 20 Oct 1991 14:00 GMT
Calendar calendar = Calendar.getInstance();
Expand Down Expand Up @@ -100,6 +101,6 @@ public void getDateTimeLabelTest() {
@After
public void resetTimeZone() {
Locale.setDefault(defaultLocale);
TimeZone.setDefault(defaultTimezone);
TimeZoneSetter.setTimezone(defaultTimezone);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,16 @@

import org.javarosa.core.model.data.TimeData;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDateTime;
import org.joda.time.chrono.GregorianChronology;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.odk.collect.testshared.TimeZoneSetter;

import static org.junit.Assert.assertEquals;

import java.util.TimeZone;

@RunWith(AndroidJUnit4.class)
public class DateTimeUtilsTest {
private final LocalDateTime date = new LocalDateTime().withDate(2010, 5, 12);
Expand Down Expand Up @@ -81,14 +83,14 @@ public void getDateWithSkippedDaylightSavingGapIfExists_returnsCorrectDateAndTim

@Test
public void skipDaylightSavingGapIfExistsTest() {
DateTimeZone originalDefaultTimeZone = DateTimeZone.getDefault();
DateTimeZone.setDefault(DateTimeZone.forID("Europe/Warsaw"));
TimeZone originalDefaultTimeZone = TimeZone.getDefault();
TimeZoneSetter.setTimezone(TimeZone.getTimeZone("Europe/Warsaw"));

// 29 March 2020 at 02:00:00 clocks were turned forward to 03:00:00
LocalDateTime ldtOriginal = new LocalDateTime().withYear(2020).withMonthOfYear(3).withDayOfMonth(29).withHourOfDay(2).withMinuteOfHour(30).withSecondOfMinute(0).withMillisOfSecond(0);
LocalDateTime ldtExpected = new LocalDateTime().withYear(2020).withMonthOfYear(3).withDayOfMonth(29).withHourOfDay(3).withMinuteOfHour(0).withSecondOfMinute(0).withMillisOfSecond(0);

assertEquals(ldtExpected, DateTimeUtils.skipDaylightSavingGapIfExists(ldtOriginal));
DateTimeZone.setDefault(originalDefaultTimeZone);
TimeZoneSetter.setTimezone(originalDefaultTimeZone);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import org.odk.collect.android.widgets.DateTimeWidget;
import org.odk.collect.android.widgets.DateWidget;
import org.odk.collect.android.widgets.utilities.DateTimeWidgetUtils;
import org.odk.collect.testshared.TimeZoneSetter;

import java.util.TimeZone;

Expand Down Expand Up @@ -69,13 +70,14 @@ public void setUp() {

@After
public void tearDown() {
TimeZone.setDefault(currentTimeZone);
TimeZoneSetter.setTimezone(currentTimeZone);
}

@Test
// 26 Mar 2017 at 02:00:00 clocks were turned forward to 03:00:00.
public void testESTTimeZoneWithDateTimeWidget() {
TimeZone.setDefault(TimeZone.getTimeZone(CET_TIME_ZONE));
TimeZoneSetter.setTimezone(TimeZone.getTimeZone(CET_TIME_ZONE));

DateTimeWidget dateTimeWidget = prepareDateTimeWidget(2017, 3, 26, 2, 30);

/*
Expand All @@ -88,7 +90,8 @@ public void testESTTimeZoneWithDateTimeWidget() {
@Test
// 1 Jan 1960 at 00:00:00 clocks were turned forward to 00:15:00
public void testEATTimezoneWithDateWidget() {
TimeZone.setDefault(TimeZone.getTimeZone(EAT_IME_ZONE));
TimeZoneSetter.setTimezone(TimeZone.getTimeZone(EAT_IME_ZONE));

DateWidget dateWidget = prepareDateWidget(1960, 0, 1);

/*
Expand Down
1 change: 1 addition & 0 deletions testshared/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ dependencies {
implementation Dependencies.junit
implementation Dependencies.androidx_test_espresso_intents
implementation Dependencies.android_material
implementation Dependencies.danlew_android_joda
implementation(Dependencies.androidx_fragment_testing) {
exclude group: 'androidx.test', module: 'monitor' //fixes issue https://github.com/android/android-test/issues/731
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.odk.collect.testshared

import org.joda.time.DateTimeZone
import java.util.TimeZone

object TimeZoneSetter {
/**
* Always update both java.util.TimeZone and org.joda.time.DateTimeZone to avoid weird bugs in
* tests that depend on time zones.
*/
@JvmStatic
fun setTimezone(timezone: TimeZone) {
TimeZone.setDefault(timezone)
DateTimeZone.setDefault(DateTimeZone.forID(timezone.id))
}
}

0 comments on commit 39c9686

Please sign in to comment.