From 4183cedbe26ee14e84c4360a341fd518e3a11eb9 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Fri, 9 Feb 2018 14:01:01 +0000 Subject: [PATCH] tests: Use a different time for testing UNIX timestamps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The test_GDateTime_new_from_unix() test creates a UNIX timestamp representing 1990-01-01 00:00:00 in the local timezone, and then turns it into a GDateTime using g_date_time_new_from_unix_local(). This should succeed regardless of the current local timezone (TZ environment variable). However, it was failing for TZ=America/Lima, and *only* for that timezone. As it turns out, Lima used to have a DST leap at exactly 00:00:00 on the 1st of January — but this stopped in 1994, which made investigation a bit harder. See: https://www.timeanddate.com/time/change/peru/lima?year=1990. What was happening is that 1990-01-01 00:00:00 was being converted to the timestamp 631170000, but GDateTime was converting that timestamp to 1990-01-01 01:00:00 when loading it. Both conversions are correct: a DST leap creates an equivalence between an hour’s worth of timestamps. We can somewhat validate this by seeing that timestamp 631169999 maps to 1989-12-31 23:59:59, and timestamp 631170001 maps to 1990-01-01 01:00:01. Fix this by changing the date used by the test to one where no timezone was undergoing a DST leap in 1990. This should never change, as all that data is now historical. Signed-off-by: Philip Withnall https://bugzilla.gnome.org/show_bug.cgi?id=793319 --- glib/tests/gdatetime.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/glib/tests/gdatetime.c b/glib/tests/gdatetime.c index 296a1e905..f22f64654 100644 --- a/glib/tests/gdatetime.c +++ b/glib/tests/gdatetime.c @@ -122,11 +122,14 @@ test_GDateTime_new_from_unix (void) g_assert_cmpint (g_date_time_get_second (dt), ==, tm.tm_sec); g_date_time_unref (dt); + /* Choose 1990-01-01 04:00:00 because no DST leaps happened then. The more + * obvious 1990-01-01 00:00:00 was a DST leap in America/Lima (which has, + * confusingly, since stopped using DST). */ memset (&tm, 0, sizeof (tm)); tm.tm_year = 90; tm.tm_mday = 1; tm.tm_mon = 0; - tm.tm_hour = 0; + tm.tm_hour = 4; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; @@ -136,7 +139,7 @@ test_GDateTime_new_from_unix (void) g_assert_cmpint (g_date_time_get_year (dt), ==, 1990); g_assert_cmpint (g_date_time_get_month (dt), ==, 1); g_assert_cmpint (g_date_time_get_day_of_month (dt), ==, 1); - g_assert_cmpint (g_date_time_get_hour (dt), ==, 0); + g_assert_cmpint (g_date_time_get_hour (dt), ==, 4); g_assert_cmpint (g_date_time_get_minute (dt), ==, 0); g_assert_cmpint (g_date_time_get_second (dt), ==, 0); g_date_time_unref (dt);