summaryrefslogtreecommitdiff
path: root/glib/tests/gdatetime.c
diff options
context:
space:
mode:
Diffstat (limited to 'glib/tests/gdatetime.c')
-rw-r--r--glib/tests/gdatetime.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/glib/tests/gdatetime.c b/glib/tests/gdatetime.c
index 3e75f4ed2..10ec9403b 100644
--- a/glib/tests/gdatetime.c
+++ b/glib/tests/gdatetime.c
@@ -2733,6 +2733,57 @@ test_time_zone_parse_rfc8536 (void)
}
}
+/* Check GTimeZone instances are cached. */
+static void
+test_time_zone_caching (void)
+{
+ GTimeZone *tz1 = NULL, *tz2 = NULL;
+
+ g_test_summary ("GTimeZone instances are cached");
+
+ /* Check a specific (arbitrary) timezone. These are only cached while third
+ * party code holds a ref to at least one instance. */
+#ifdef G_OS_UNIX
+ tz1 = g_time_zone_new ("Europe/London");
+ tz2 = g_time_zone_new ("Europe/London");
+ g_time_zone_unref (tz1);
+ g_time_zone_unref (tz2);
+#elif defined G_OS_WIN32
+ tz1 = g_time_zone_new ("GMT Standard Time");
+ tz2 = g_time_zone_new ("GMT Standard Time");
+ g_time_zone_unref (tz1);
+ g_time_zone_unref (tz2);
+#endif
+
+ /* Only compare pointers */
+ g_assert_true (tz1 == tz2);
+
+ /* Check the default timezone, local and UTC. These are cached internally in
+ * GLib, so should persist even after the last third party reference is
+ * dropped. */
+ tz1 = g_time_zone_new (NULL);
+ g_time_zone_unref (tz1);
+ tz2 = g_time_zone_new (NULL);
+ g_time_zone_unref (tz2);
+
+ g_assert_true (tz1 == tz2);
+
+ tz1 = g_time_zone_new_utc ();
+ g_time_zone_unref (tz1);
+ tz2 = g_time_zone_new_utc ();
+ g_time_zone_unref (tz2);
+
+ g_assert_true (tz1 == tz2);
+
+ tz1 = g_time_zone_new_local ();
+ g_time_zone_unref (tz1);
+ tz2 = g_time_zone_new_local ();
+ g_time_zone_unref (tz2);
+
+ g_assert_true (tz1 == tz2);
+}
+
+
gint
main (gint argc,
gchar *argv[])
@@ -2803,6 +2854,7 @@ main (gint argc,
g_test_add_func ("/GTimeZone/identifier", test_identifier);
g_test_add_func ("/GTimeZone/new-offset", test_new_offset);
g_test_add_func ("/GTimeZone/parse-rfc8536", test_time_zone_parse_rfc8536);
+ g_test_add_func ("/GTimeZone/caching", test_time_zone_caching);
return g_test_run ();
}