r22599 - gnucash/trunk/src/libqof/qof/test - Multi-platform fixes to test-gnc-date.c

John Ralls jralls at code.gnucash.org
Sat Dec 1 17:41:16 EST 2012


Author: jralls
Date: 2012-12-01 17:41:16 -0500 (Sat, 01 Dec 2012)
New Revision: 22599
Trac: http://svn.gnucash.org/trac/changeset/22599

Modified:
   gnucash/trunk/src/libqof/qof/test/test-gnc-date.c
   gnucash/trunk/src/libqof/qof/test/test-qof.c
Log:
Multi-platform fixes to test-gnc-date.c

Modified: gnucash/trunk/src/libqof/qof/test/test-gnc-date.c
===================================================================
--- gnucash/trunk/src/libqof/qof/test/test-gnc-date.c	2012-11-25 21:25:28 UTC (rev 22598)
+++ gnucash/trunk/src/libqof/qof/test/test-gnc-date.c	2012-12-01 22:41:16 UTC (rev 22599)
@@ -120,6 +120,32 @@
     g_assert (gnc_date_string_to_monthformat ("foo", &fmt));
     g_assert_cmpint (fmt, ==, 123);
 }
+
+/* There are some differences between distros in the way they name
+ * locales, and this can cause trouble with the locale-based
+ * formatting. If you get the assert in this function, run locale -a
+ * and make sure that en_US, en_GB, and fr_FR are installed and that
+ * if a suffix is needed it's in the suffixes array.
+ */
+static void
+test_gnc_setlocale (int category, gchar *locale)
+{
+    gchar *suffixes[] = {"utf8", "UTF-8"};
+    guint i;
+
+    if (setlocale (category, locale) != NULL)
+        return;
+
+    for (i = 0; i < G_N_ELEMENTS (suffixes); i++)
+    {
+        gchar * modlocale = g_strdup_printf ("%s.%s", locale, suffixes[i]);
+        gchar *localeval = setlocale (category, modlocale);
+        g_free (modlocale);
+        if (localeval != NULL)
+            return;
+    }
+    g_assert_not_reached ();
+}
 /* timespec_normalize
 static void
 timespec_normalize(Timespec *t)// Local: 2:0:0
@@ -215,7 +241,7 @@
     g_assert_cmpint (timespec_cmp (&tf, &tb), ==, 0);
     g_assert_cmpint (timespec_cmp (&ta, &tb), ==, 1);
     g_assert_cmpint (timespec_cmp (&te, &ta), ==, 1);
-    g_assert_cmpint (timespec_cmp (&td, &ta), ==, -1);
+    g_assert_cmpint (timespec_cmp (&td, &ta), ==, 1);
     g_assert_cmpint (timespec_cmp (&ta, &te), ==, -1);
     g_assert_cmpint (timespec_cmp (&ta, &tg), ==, 1);
     g_assert_cmpint (timespec_cmp (&th, &ta), ==, -1);
@@ -269,11 +295,11 @@
     else
     {
 	g_assert_cmpint (tt.tv_sec, ==, secs2 - secs1 - 3);
-	g_assert_cmpint (tt.tv_nsec, ==, 2 * nsec3 + 2 * NANOS_PER_SECOND); /* Overflow nanosecs */
+	g_assert_cmpint (tt.tv_nsec, <, 0); /* Overflow nanosecs */
     }
     tt = timespec_diff (&tg, &td);
-    g_assert_cmpint (tt.tv_sec, ==, -secs2 - secs3);
-    g_assert_cmpint (tt.tv_nsec, ==, nsec2 - nsec1);
+    g_assert_cmpint (tt.tv_sec, ==, -secs2 - secs3 + 1);
+    g_assert_cmpint (tt.tv_nsec, ==, nsec2 - nsec1 - NANOS_PER_SECOND);
 
 }
 /* timespec_abs
@@ -362,9 +388,9 @@
     g_assert_cmpint (na.tv_sec, ==, ra.tv_sec);
     g_assert_cmpint (nb.tv_sec, ==, rb.tv_sec);
     if (sizeof (time_t) > 4)
-	g_assert_cmpint (nc.tv_sec, ==, rc.tv_sec);
+	g_assert_cmpint (nc.tv_sec, ==, rc.tv_sec + 3600);
     else
-	g_assert_cmpint (nc.tv_sec, !=, rc.tv_sec);
+	g_assert_cmpint (nc.tv_sec, <, 0);
  }
 /* gnc_date_my_last_mday
 int gnc_date_my_last_mday (int month, int year)// C: 1  Local: 1:0:0
@@ -466,7 +492,7 @@
 
 static void tm_set_dmy (struct tm *tm, gint year, gint month, gint mday)
 {
-    tm->tm_year = year;
+    tm->tm_year = year - 1900;
     tm->tm_mon = month;
     tm->tm_mday = mday;
 }
@@ -529,19 +555,21 @@
     g_assert_cmpstr (buff, ==, "2045-06-16");
 
     qof_date_format_set (QOF_DATE_FORMAT_LOCALE);
-    setlocale (LC_TIME, "en_US");
+    test_gnc_setlocale (LC_TIME, "en_US");
     tm_set_dmy (&tm, 1974, 11, 23);
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
     g_assert_cmpstr (buff, ==, t_buff);
+
+
     tm_set_dmy (&tm, 1961, 2, 2);
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
     g_assert_cmpstr (buff, ==, t_buff);
     memset ((gpointer)buff, 0, sizeof (buff));
@@ -549,22 +577,25 @@
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
-    g_assert_cmpstr (buff, ==, t_buff);
-    setlocale (LC_TIME, "en_GB");
+    if (sizeof (time_t) > 4)
+	g_assert_cmpstr (buff, ==, t_buff);
+    else
+	g_assert_cmpstr (buff, !=, t_buff);
+    test_gnc_setlocale (LC_TIME, "en_GB");
     tm_set_dmy (&tm, 1974, 11, 23);
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
     g_assert_cmpstr (buff, ==, t_buff);
     tm_set_dmy (&tm, 1961, 2, 2);
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
     g_assert_cmpstr (buff, ==, t_buff);
     memset ((gpointer)buff, 0, sizeof (buff));
@@ -572,23 +603,26 @@
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
-    g_assert_cmpstr (buff, ==, t_buff);
+    if (sizeof (time_t) > 4)
+	g_assert_cmpstr (buff, ==, t_buff);
+    else
+	g_assert_cmpstr (buff, !=, t_buff);
 
-    setlocale (LC_TIME, "fr_FR");
+    test_gnc_setlocale (LC_TIME, "fr_FR");
     tm_set_dmy (&tm, 1974, 11, 23);
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
     g_assert_cmpstr (buff, ==, t_buff);
     tm_set_dmy (&tm, 1961, 2, 2);
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
     g_assert_cmpstr (buff, ==, t_buff);
     memset ((gpointer)buff, 0, sizeof (buff));
@@ -596,13 +630,36 @@
     strftime(t_buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_dmy_buff (buff, sizeof (buff), tm.tm_mday,
-					      tm.tm_mon + 1, tm.tm_year),
+					      tm.tm_mon + 1, tm.tm_year + 1900),
 		     ==, strlen (buff));
-    g_assert_cmpstr (buff, ==, t_buff);
+    if (sizeof (time_t) > 4)
+	g_assert_cmpstr (buff, ==, t_buff);
+    else
+	g_assert_cmpstr (buff, !=, t_buff);
 
     setlocale (LC_TIME, locale);
     g_free (locale);
 }
+
+/* Different distros/OSes define localization date formats. Apple, for
+ * example, uses %d.%m.%Y for fr_FR and %d/%m/%Y for en_GB, while
+ * Debian uses %d/%m/%Y and %d/%m/%y respectively. So to get a test
+ * that works on all of them, we need to check the localized
+ * strftime().
+ *
+ * This is a macro so that the line number in the assert message will
+ * be right.
+ */
+
+#define test_assert_localized_timestring(time, datestr)                 \
+    {                                                                   \
+        gchar t_buff[MAX_DATE_LENGTH];                                  \
+        struct tm *ltime = localtime ((time_t*)(&time));                \
+        strftime (t_buff, sizeof (t_buff), GNC_D_FMT, ltime);           \
+        g_assert_cmpstr (datestr, ==, t_buff);                          \
+    }
+
+
 /* qof_print_date_buff
 size_t
 qof_print_date_buff (char * buff, size_t len, time_t t)// C: 3 in 1  Local: 2:0:0
@@ -635,7 +692,7 @@
     if (sizeof (time_t) > 4)
 	g_assert_cmpstr (buff, ==, "16/06/2045");
     else
-	g_assert_cmpstr (buff, ==, "24/11/1909");
+	g_assert_cmpstr (buff, ==, "10/05/1909");
 
     qof_date_format_set (QOF_DATE_FORMAT_CE);
     memset ((gpointer)buff, 0, sizeof (buff));
@@ -652,7 +709,7 @@
     if (sizeof (time_t) > 4)
 	g_assert_cmpstr (buff, ==, "16.06.2045");
     else
-	g_assert_cmpstr (buff, ==, "24.11.1909");
+	g_assert_cmpstr (buff, ==, "10.05.1909");
 
 
     qof_date_format_set (QOF_DATE_FORMAT_US);
@@ -670,7 +727,7 @@
     if (sizeof (time_t) > 4)
 	g_assert_cmpstr (buff, ==, "06/16/2045");
     else
-	g_assert_cmpstr (buff, ==, "11/24/1909");
+	g_assert_cmpstr (buff, ==, "05/10/1909");
 
 
     qof_date_format_set (QOF_DATE_FORMAT_ISO);
@@ -688,11 +745,11 @@
     if (sizeof (time_t) > 4)
 	g_assert_cmpstr (buff, ==, "2045-06-16");
     else
-	g_assert_cmpstr (buff, ==, "1909-11-24");
+	g_assert_cmpstr (buff, ==, "1909-05-10");
 
 
     qof_date_format_set (QOF_DATE_FORMAT_LOCALE);
-    setlocale (LC_TIME, "en_US");
+    test_gnc_setlocale (LC_TIME, "en_US");
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_buff (buff, sizeof (buff), (time_t)tm1),
 		     ==, strlen (buff));
@@ -707,9 +764,9 @@
     if (sizeof (time_t) > 4)
 	g_assert_cmpstr (buff, ==, g_date_time_format (gd3, GNC_D_FMT));
     else
-	g_assert_cmpstr (buff, ==, "11/24/1909");
+        test_assert_localized_timestring (tm3, buff)
 
-    setlocale (LC_TIME, "en_GB");
+    test_gnc_setlocale (LC_TIME, "en_GB");
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_buff (buff, sizeof (buff), (time_t)tm1),
 		     ==, strlen (buff));
@@ -724,9 +781,9 @@
     if (sizeof (time_t) > 4)
 	g_assert_cmpstr (buff, ==, g_date_time_format (gd3, GNC_D_FMT));
     else
-	g_assert_cmpstr (buff, ==, "24/11/1909");
+        test_assert_localized_timestring (tm3, buff)
 
-    setlocale (LC_TIME, "fr_FR");
+    test_gnc_setlocale (LC_TIME, "fr_FR");
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_date_buff (buff, sizeof (buff), (time_t)tm1),
 		     ==, strlen (buff));
@@ -741,7 +798,7 @@
     if (sizeof (time_t) > 4)
 	g_assert_cmpstr (buff, ==, g_date_time_format (gd3, GNC_D_FMT));
     else
-	g_assert_cmpstr (buff, ==, "24.11.1909");
+        test_assert_localized_timestring (tm3, buff)
 
     setlocale (LC_TIME, locale);
     g_free (locale);
@@ -822,7 +879,7 @@
 
 
     qof_date_format_set (QOF_DATE_FORMAT_LOCALE);
-    setlocale (LC_TIME, "en_US");
+    test_gnc_setlocale (LC_TIME, "en_US");
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_gdate (buff, sizeof (buff), gd1),
 		     ==, strlen (buff));
@@ -842,9 +899,15 @@
 	g_assert_cmpstr (buff, ==, t_buff);
     }
     else
-	g_assert_cmpstr (buff, ==, "12/31/1969");
+    {
+        struct tm tm;
+        time_t time;
+        g_date_to_struct_tm (gd3, &tm);
+        time = mktime (&tm);
+        test_assert_localized_timestring (time, buff);
+    }
 
-    setlocale (LC_TIME, "en_GB");
+    test_gnc_setlocale (LC_TIME, "en_GB");
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_gdate (buff, sizeof (buff), gd1),
 		     ==, strlen (buff));
@@ -864,9 +927,15 @@
 	g_assert_cmpstr (buff, ==, t_buff);
     }
     else
-	g_assert_cmpstr (buff, ==, "31/12/1969");
+    {
+        struct tm tm;
+        time_t time;
+        g_date_to_struct_tm (gd3, &tm);
+        time = mktime (&tm);
+        test_assert_localized_timestring (time, buff);
+    }
 
-    setlocale (LC_TIME, "fr_FR");
+    test_gnc_setlocale (LC_TIME, "fr_FR");
     memset ((gpointer)buff, 0, sizeof (buff));
     g_assert_cmpint (qof_print_gdate (buff, sizeof (buff), gd1),
 		     ==, strlen (buff));
@@ -886,15 +955,35 @@
 	g_assert_cmpstr (buff, ==, t_buff);
     }
     else
-	g_assert_cmpstr (buff, ==, "31.12.1969");
+    {
+        struct tm tm;
+        time_t time;
+        g_date_to_struct_tm (gd3, &tm);
+        time = mktime (&tm);
+        test_assert_localized_timestring (time, buff);
+    }
 
-
     setlocale (LC_TIME, locale);
     g_free (locale);
     g_date_free (gd1);
     g_date_free (gd2);
     g_date_free (gd3);
 }
+
+#define test_assert_qof_print_date(time, datestr)  \
+    {                                              \
+        gchar *buf = qof_print_date (time);        \
+        g_assert_cmpstr (buf, ==, datestr);        \
+        g_free (buf);                              \
+    }
+
+#define test_assert_localized_qof_print_date(time)           \
+    {                                                        \
+        gchar *buf = qof_print_date (time);                  \
+        test_assert_localized_timestring (time, buf);   \
+        g_free (buf);                                        \
+    }
+
 /* qof_print_date
 char *
 qof_print_date (time_t t)// C: 29 in 13  Local: 0:0:0
@@ -903,6 +992,7 @@
 test_qof_print_date (void)
 {
     gchar *locale = g_strdup (setlocale (LC_TIME, NULL));
+    gchar *buff;
     GDateTime *gd1 = g_date_time_new_local (1974, 11, 23, 0, 0, 0.0);
     GDateTime *gd2 = g_date_time_new_local (1961, 2, 2, 0, 0, 0.0);
     GDateTime *gd3 = g_date_time_new_local (2045, 6, 16, 0, 0, 0.0);
@@ -910,75 +1000,89 @@
     gint64 tm1 = g_date_time_to_unix (gd1);
     gint64 tm2 = g_date_time_to_unix (gd2);
     gint64 tm3 = g_date_time_to_unix (gd3);
- 
+
     qof_date_format_set (QOF_DATE_FORMAT_UK);
-    g_assert_cmpstr (qof_print_date ((time_t)tm1), ==, "23/11/1974");
-    g_assert_cmpstr (qof_print_date ((time_t)tm2), ==, "02/02/1961");
+    test_assert_qof_print_date ((time_t)tm1, "23/11/1974");
+    test_assert_qof_print_date ((time_t)tm2, "02/02/1961");
     if (sizeof (time_t) > 4)
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "16/06/2045");
+    {
+	test_assert_qof_print_date ((time_t)tm3, "16/06/2045");
+    }
     else
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "24/11/1909");
+	test_assert_qof_print_date ((time_t)tm3, "10/05/1909");
 
     qof_date_format_set (QOF_DATE_FORMAT_CE);
-    g_assert_cmpstr (qof_print_date ((time_t)tm1), ==, "23.11.1974");
-    g_assert_cmpstr (qof_print_date ((time_t)tm2), ==, "02.02.1961");
+    test_assert_qof_print_date ((time_t)tm1, "23.11.1974");
+    test_assert_qof_print_date ((time_t)tm2, "02.02.1961");
     if (sizeof (time_t) > 4)
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "16.06.2045");
+    {
+	test_assert_qof_print_date ((time_t)tm3, "16.06.2045");
+    }
     else
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "24.11.1909");
+	test_assert_qof_print_date ((time_t)tm3, "10.05.1909");
 
 
     qof_date_format_set (QOF_DATE_FORMAT_US);
-    g_assert_cmpstr (qof_print_date ((time_t)tm1), ==, "11/23/1974");
-    g_assert_cmpstr (qof_print_date ((time_t)tm2), ==, "02/02/1961");
+    test_assert_qof_print_date ((time_t)tm1, "11/23/1974");
+    test_assert_qof_print_date ((time_t)tm2, "02/02/1961");
     if (sizeof (time_t) > 4)
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "06/16/2045");
+    {
+	test_assert_qof_print_date ((time_t)tm3, "06/16/2045");
+    }
     else
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "11/24/1909");
+	test_assert_qof_print_date ((time_t)tm3, "05/10/1909");
 
 
     qof_date_format_set (QOF_DATE_FORMAT_ISO);
-    g_assert_cmpstr (qof_print_date ((time_t)tm1), ==, "1974-11-23");
-    g_assert_cmpstr (qof_print_date ((time_t)tm2), ==, "1961-02-02");
+    test_assert_qof_print_date ((time_t)tm1, "1974-11-23");
+    test_assert_qof_print_date ((time_t)tm2, "1961-02-02");
     if (sizeof (time_t) > 4)
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "2045-06-16");
+    {
+	test_assert_qof_print_date ((time_t)tm3, "2045-06-16");
+    }
     else
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "1909-11-24");
+	test_assert_qof_print_date ((time_t)tm3, "1909-05-10");
 
 
     qof_date_format_set (QOF_DATE_FORMAT_LOCALE);
-    setlocale (LC_TIME, "en_US");
-    g_assert_cmpstr (qof_print_date ((time_t)tm1),
-		     ==, g_date_time_format (gd1, GNC_D_FMT));
-    g_assert_cmpstr (qof_print_date ((time_t)tm2),
-		     ==, g_date_time_format (gd2, GNC_D_FMT));
+    test_gnc_setlocale (LC_TIME, "en_US");
+    test_assert_qof_print_date ((time_t)tm1,
+                                g_date_time_format (gd1, GNC_D_FMT));
+    test_assert_qof_print_date ((time_t)tm2,
+                                g_date_time_format (gd2, GNC_D_FMT));
     if (sizeof (time_t) > 4)
-	g_assert_cmpstr (qof_print_date ((time_t)tm3),
-			 ==, g_date_time_format (gd3, GNC_D_FMT));
+    {
+	test_assert_qof_print_date ((time_t)tm3,
+                                    g_date_time_format (gd3, GNC_D_FMT));
+    }
     else
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "11/24/1909");
+        test_assert_localized_qof_print_date (tm3);
 
-    setlocale (LC_TIME, "en_GB");
-    g_assert_cmpstr (qof_print_date ((time_t)tm1),
-		     ==, g_date_time_format (gd1, GNC_D_FMT));
-    g_assert_cmpstr (qof_print_date ((time_t)tm2),
-		     ==, g_date_time_format (gd2, GNC_D_FMT));
+    test_gnc_setlocale (LC_TIME, "en_GB");
+    test_assert_qof_print_date ((time_t)tm1,
+                                g_date_time_format (gd1, GNC_D_FMT));
+    test_assert_qof_print_date ((time_t)tm2,
+                                g_date_time_format (gd2, GNC_D_FMT));
     if (sizeof (time_t) > 4)
-	g_assert_cmpstr (qof_print_date ((time_t)tm3),
-			 ==, g_date_time_format (gd3, GNC_D_FMT));
+    {
+	test_assert_qof_print_date ((time_t)tm3,
+                                    g_date_time_format (gd3, GNC_D_FMT));
+    }
     else
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "24/11/1909");
+        test_assert_localized_qof_print_date (tm3);
 
-    setlocale (LC_TIME, "fr_FR");
-    g_assert_cmpstr (qof_print_date ((time_t)tm1),
-		     ==, g_date_time_format (gd1, GNC_D_FMT));
-    g_assert_cmpstr (qof_print_date ((time_t)tm2),
-		     ==, g_date_time_format (gd2, GNC_D_FMT));
+    test_gnc_setlocale (LC_TIME, "fr_FR");
+    test_assert_qof_print_date ((time_t)tm1,
+                                g_date_time_format (gd1, GNC_D_FMT));
+    test_assert_qof_print_date ((time_t)tm2,
+                                g_date_time_format (gd2, GNC_D_FMT));
     if (sizeof (time_t) > 4)
-	g_assert_cmpstr (qof_print_date ((time_t)tm3),
-			 ==, g_date_time_format (gd3, GNC_D_FMT));
+    {
+	test_assert_qof_print_date ((time_t)tm3,
+                                    g_date_time_format (gd3, GNC_D_FMT));
+    }
     else
-	g_assert_cmpstr (qof_print_date ((time_t)tm3), ==, "24.11.1909");
+        test_assert_localized_qof_print_date (tm3);
 
     setlocale (LC_TIME, locale);
     g_free (locale);
@@ -1039,7 +1143,7 @@
 
 
     qof_date_format_set (QOF_DATE_FORMAT_LOCALE);
-    setlocale (LC_TIME, "en_US");
+    test_gnc_setlocale (LC_TIME, "en_US");
     g_date_strftime (t_buff, MAX_DATE_LENGTH, GNC_D_FMT, gd1);
     g_assert_cmpstr (gnc_print_date (tm1), ==, t_buff);
     g_date_strftime (t_buff, MAX_DATE_LENGTH, GNC_D_FMT, gd2);
@@ -1050,9 +1154,9 @@
 	g_assert_cmpstr (gnc_print_date (tm3), ==, t_buff);
     }
     else
-	g_assert_cmpstr (gnc_print_date (tm3), ==, "05/10/1909");
+        test_assert_localized_timestring (tm3, gnc_print_date (tm3))
 
-    setlocale (LC_TIME, "en_GB");
+    test_gnc_setlocale (LC_TIME, "en_GB");
     g_date_strftime (t_buff, MAX_DATE_LENGTH, GNC_D_FMT, gd1);
     g_assert_cmpstr (gnc_print_date (tm1), ==, t_buff);
     g_date_strftime (t_buff, MAX_DATE_LENGTH, GNC_D_FMT, gd2);
@@ -1063,9 +1167,9 @@
 	g_assert_cmpstr (gnc_print_date (tm3), ==, t_buff);
     }
     else
-	g_assert_cmpstr (gnc_print_date (tm3), ==, "10/05/1909");
+        test_assert_localized_timestring (tm3, gnc_print_date (tm3))
 
-    setlocale (LC_TIME, "fr_FR");
+    test_gnc_setlocale (LC_TIME, "fr_FR");
     g_date_strftime (t_buff, MAX_DATE_LENGTH, GNC_D_FMT, gd1);
     g_assert_cmpstr (gnc_print_date (tm1), ==, t_buff);
     g_date_strftime (t_buff, MAX_DATE_LENGTH, GNC_D_FMT, gd2);
@@ -1076,7 +1180,7 @@
 	g_assert_cmpstr (gnc_print_date (tm3), ==, t_buff);
     }
     else
-	g_assert_cmpstr (gnc_print_date (tm3), ==, "10.05.1909");
+        test_assert_localized_timestring (tm3, gnc_print_date (tm3))
 
     setlocale (LC_TIME, locale);
     g_free (locale);
@@ -1208,13 +1312,13 @@
     g_assert_cmpint (yr, ==, 2045);
 
     qof_date_format_set (QOF_DATE_FORMAT_LOCALE);
-    setlocale (LC_TIME, "en_GB");
+    test_gnc_setlocale (LC_TIME, "en_GB");
     tm_set_dmy (&tm, 1974, 11, 23);
     strftime (buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
     g_assert (qof_scan_date (buff, &day, &mo, &yr));
     g_assert_cmpint (day, ==, tm.tm_mday);
     g_assert_cmpint (mo, ==, tm.tm_mon + 1);
-    g_assert_cmpint (yr, ==, tm.tm_year);
+    g_assert_cmpint (yr, ==, tm.tm_year + 1900);
 
     tm_set_dmy (&tm, 1961,2, 2);
     strftime (buff, MAX_DATE_LENGTH, GNC_D_FMT, &tm);
@@ -1231,7 +1335,7 @@
     g_assert (qof_scan_date (buff, &day, &mo, &yr));
     g_assert_cmpint (day, ==, tm.tm_mday);
     g_assert_cmpint (mo, ==, tm.tm_mon + 1);
-    g_assert_cmpint (yr, ==, tm.tm_year);
+    g_assert_cmpint (yr, ==, tm.tm_year + 1900);
 
     setlocale (LC_TIME, locale);
     g_free (locale);
@@ -1305,9 +1409,7 @@
 static gint
 get_nanoseconds (GDateTime *gdt)
 {
-    double secs = g_date_time_get_seconds (gdt);
-    gint frac = (gint)(secs * 1E6);
-    return (frac % 1000000) * 1000;
+    return g_date_time_get_microsecond (gdt) * 1000;
 }
 
 static void
@@ -1651,7 +1753,11 @@
 	g_assert_cmpint (r_t.tv_sec, ==, t.tv_sec);
     else
 /* Fails before 1 April 1918 */
+#ifdef GDK_QUARTZ
 	g_assert_cmpint (r_t.tv_sec, !=, t.tv_sec);
+#else
+	g_assert_cmpint (r_t.tv_sec, ==, t.tv_sec);
+#endif
     g_assert_cmpint (r_t.tv_nsec, ==, t.tv_nsec);
 
     t = g_date_time_to_timespec (gdt3);
@@ -1703,7 +1809,11 @@
 	g_assert_cmpint (r_t.tv_sec, ==, t.tv_sec);
     else
 /* Fails before 31 March 1918 */
+#ifdef GDK_QUARTZ
 	g_assert_cmpint (r_t.tv_sec, !=, t.tv_sec);
+#else
+	g_assert_cmpint (r_t.tv_sec, ==, t.tv_sec);
+#endif
     g_assert_cmpint (r_t.tv_nsec, ==, t.tv_nsec);
 
     t = g_date_time_to_timespec (gdt3);
@@ -1873,7 +1983,11 @@
 	g_assert_cmpint (r_t.tv_sec, ==, t.tv_sec);
     else
 /* Fails before 1 April 1918 */
+#ifdef GDK_QUARTZ
 	g_assert_cmpint (r_t.tv_sec, !=, t.tv_sec);
+#else
+	g_assert_cmpint (r_t.tv_sec, ==, t.tv_sec);
+#endif
     g_assert_cmpint (r_t.tv_nsec, ==, t.tv_nsec);
 
     t = g_date_time_to_timespec (gdt3);

Modified: gnucash/trunk/src/libqof/qof/test/test-qof.c
===================================================================
--- gnucash/trunk/src/libqof/qof/test/test-qof.c	2012-11-25 21:25:28 UTC (rev 22598)
+++ gnucash/trunk/src/libqof/qof/test/test-qof.c	2012-12-01 22:41:16 UTC (rev 22599)
@@ -30,7 +30,7 @@
 extern void test_suite_kvp_frame();
 extern void test_suite_qofobject();
 extern void test_suite_qofsession();
-//extern void test_suite_gnc_date();
+extern void test_suite_gnc_date();
 extern void test_suite_qof_string_cache();
 
 int
@@ -47,7 +47,7 @@
     test_suite_kvp_frame();
     test_suite_qofobject();
     test_suite_qofsession();
-//    test_suite_gnc_date();
+    test_suite_gnc_date();
     test_suite_qof_string_cache();
 
     return g_test_run( );



More information about the gnucash-changes mailing list