[glib: 1/2] Improve coverage of two digit years in gdate tests
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib: 1/2] Improve coverage of two digit years in gdate tests
- Date: Wed, 9 Feb 2022 11:40:53 +0000 (UTC)
commit d2e86d806c012e21b8addfb5fe713884e2a00b82
Author: Emmanuel Fleury <emmanuel fleury gmail com>
Date: Tue Feb 8 14:45:17 2022 +0100
Improve coverage of two digit years in gdate tests
glib/tests/date.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 76 insertions(+), 9 deletions(-)
---
diff --git a/glib/tests/date.c b/glib/tests/date.c
index 94b9f0bbe..1eceec91b 100644
--- a/glib/tests/date.c
+++ b/glib/tests/date.c
@@ -511,6 +511,13 @@ test_dates (void)
g_assert_cmpint (g_date_is_first_of_month (d), ==, 1);
g_date_free (d);
+ d = g_date_new_dmy (31, 3, 8);
+ g_date_subtract_months (d, 1);
+ g_assert_cmpint (g_date_get_month (d), ==, 2);
+ g_assert_cmpint (g_date_get_day (d), ==, 29);
+ g_assert_cmpint (g_date_get_year (d), ==, 8);
+ g_date_free (d);
+
d = g_date_new_julian (375);
g_date_add_months (d, 1);
g_assert_cmpint (g_date_get_month (d), ==, 2);
@@ -539,6 +546,13 @@ test_dates (void)
g_assert_cmpint (g_date_get_year (d), ==, 1);
g_date_free (d);
+ d = g_date_new_dmy (28, 2, 7);
+ g_date_subtract_years (d, 1);
+ g_assert_cmpint (g_date_get_month (d), ==, 2);
+ g_assert_cmpint (g_date_get_day (d), ==, 28);
+ g_assert_cmpint (g_date_get_year (d), ==, 6);
+ g_date_free (d);
+
d = g_date_new_dmy (29, 2, 8);
g_date_subtract_years (d, 1);
g_assert_cmpint (g_date_get_month (d), ==, 2);
@@ -759,7 +773,7 @@ test_strftime (void)
{
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
"*assertion *failed*");
- g_date_strftime (buf, 100, "%x", d);
+ g_date_strftime (buf, sizeof (buf), "%x", d);
g_test_assert_expected_messages ();
}
@@ -769,13 +783,13 @@ test_strftime (void)
{
g_date_set_dmy (d, 10, 1, 2000);
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "*Error*");
- g_date_strftime (buf, 100, invalid, d);
+ g_date_strftime (buf, sizeof (buf), invalid, d);
g_test_assert_expected_messages ();
g_assert_cmpstr (buf, ==, "");
}
#else
g_date_set_dmy (d, 10, 1, 2000);
- g_date_strftime (buf, 100, invalid, d);
+ g_date_strftime (buf, sizeof (buf), invalid, d);
g_assert_cmpstr (buf, ==, "");
#endif
@@ -784,7 +798,7 @@ test_strftime (void)
for (i = 0; i < G_N_ELEMENTS (strftime_checks); i++)
{
- g_date_strftime (buf, 100, strftime_checks[i].format, d);
+ g_date_strftime (buf, sizeof (buf), strftime_checks[i].format, d);
g_assert_cmpstr (buf, ==, strftime_checks[i].expect);
}
@@ -797,6 +811,58 @@ test_strftime (void)
#endif
}
+static void
+test_two_digit_years (void)
+{
+ GDate *d;
+ gchar buf[101];
+ gchar *old_locale;
+#ifdef G_OS_WIN32
+ LCID old_lcid;
+#endif
+
+ old_locale = g_strdup (setlocale (LC_ALL, NULL));
+#ifdef G_OS_WIN32
+ old_lcid = GetThreadLocale ();
+#endif
+
+ /* Make sure that nothing has been changed in the original locales. */
+ setlocale (LC_ALL, "C");
+#ifdef G_OS_WIN32
+ SetThreadLocale (MAKELCID (MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), SORT_DEFAULT));
+#endif
+
+ d = g_date_new ();
+
+ /* Check two digit years */
+ g_date_set_dmy (d, 10, 10, 1976);
+ g_date_strftime (buf, sizeof (buf), "%D", d);
+ g_assert_cmpstr (buf, ==, "10/10/76");
+ g_date_set_parse (d, buf);
+ g_assert_cmpint (g_date_get_month (d), ==, 10);
+ g_assert_cmpint (g_date_get_day (d), ==, 10);
+ g_assert_true ((g_date_get_year (d) == 1976) ||
+ (g_date_get_year (d) == 76));
+
+ /* Check two digit years below 100 */
+ g_date_set_dmy (d, 10, 10, 29);
+ g_date_strftime (buf, sizeof (buf), "%D", d);
+ g_assert_cmpstr (buf, ==, "10/10/29");
+ g_date_set_parse (d, buf);
+ g_assert_cmpint (g_date_get_month (d), ==, 10);
+ g_assert_cmpint (g_date_get_day (d), ==, 10);
+ g_assert_true ((g_date_get_year (d) == 2029) ||
+ (g_date_get_year (d) == 29));
+
+ g_date_free (d);
+
+ setlocale (LC_ALL, old_locale);
+ g_free (old_locale);
+#ifdef G_OS_WIN32
+ SetThreadLocale (old_lcid);
+#endif
+}
+
static void
test_parse (void)
{
@@ -815,7 +881,7 @@ test_parse (void)
g_date_set_time (d, 1);
g_assert_true (g_date_valid (d));
- g_date_strftime (buf, 100, "Today is a %A, in the month of %B, %x", d);
+ g_date_strftime (buf, sizeof (buf), "Today is a %A, in the month of %B, %x", d);
g_date_set_parse (d, buf);
if (g_test_undefined ())
@@ -833,7 +899,7 @@ test_parse (void)
g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
"*assertion *failed*");
- g_date_strftime (buf, 100, NULL, d);
+ g_date_strftime (buf, sizeof (buf), NULL, d);
g_test_assert_expected_messages ();
}
@@ -842,13 +908,13 @@ test_parse (void)
#ifndef G_OS_WIN32
/* Windows FILETIME does not support dates before Jan 1 1601,
so we can't strftime() the beginning of the "Julian" epoch. */
- g_date_strftime (buf, 100, "Today is a %A, in the month of %B, %x", d);
+ g_date_strftime (buf, sizeof (buf), "Today is a %A, in the month of %B, %x", d);
g_date_set_parse (d, buf);
#endif
g_date_set_dmy (d, 10, 1, 2000);
g_assert_true (g_date_valid (d));
- g_date_strftime (buf, 100, "%x", d);
+ g_date_strftime (buf, sizeof (buf), "%x", d);
g_date_set_parse (d, buf);
g_assert_cmpint (g_date_get_month (d), ==, 1);
g_assert_cmpint (g_date_get_day (d), ==, 10);
@@ -1077,7 +1143,7 @@ test_month_names (void)
{ \
gchar *o_casefold, *buf_casefold; \
g_date_set_dmy (gdate, d, m, y); \
- g_date_strftime (buf, 100, f, gdate); \
+ g_date_strftime (buf, sizeof (buf), f, gdate); \
buf_casefold = g_utf8_casefold (buf, -1); \
o_casefold = g_utf8_casefold ((o), -1); \
g_assert_cmpstr (buf_casefold, ==, o_casefold); \
@@ -1663,6 +1729,7 @@ main (int argc, char** argv)
g_test_add_func ("/date/compare", test_date_compare);
g_test_add_func ("/date/dates", test_dates);
g_test_add_func ("/date/strftime", test_strftime);
+ g_test_add_func ("/date/two-digit-years", test_two_digit_years);
g_test_add_func ("/date/parse", test_parse);
g_test_add_func ("/date/parse/invalid", test_parse_invalid);
g_test_add_func ("/date/parse_locale_change", test_parse_locale_change);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]