Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed setting timezones #5466

Merged
merged 2 commits into from
Feb 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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))
}
}