summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <pwithnall@endlessos.org>2020-10-15 10:52:31 +0100
committerPhilip Withnall <pwithnall@endlessos.org>2020-10-15 14:43:46 +0100
commit59add5ecc1e599c4c36bd58d814ea4acf3b451ed (patch)
tree67caebc432b821d6d22d19aed7cacfea8b4e5c4f
parent36e7b48ad519c18ef3b4e1b4825b68088bd99dd9 (diff)
downloadglib-wip/antoniof/fallback-timezone-cache-lookup.tar.gz
tests: Add a basic test for GTimeZone cachingwip/antoniof/fallback-timezone-cache-lookup
This tests the previous few commits. Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
-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 ();
}