gnome-control-center/tests/datetime/test-timezone.c
Georges Basile Stavracas Neto 0b854910bb tests: Rely only on zone.tab
First of all, this is a complete rewrite of the
timezone tests. Everything was revisited, starting
from code style, to concepts, etc.

The problem  with the previous timezone test was that
is was relying on listing the /usr/share/zoneinfo
directory, and assuming that those entries would be
always present.

Turns out, some of them are extensions, some of them
are undocumented files, etc. A huge mess. I could've
blacklisted the undesired files and folders, but that
would still be insufficient for other OSes like *BSDs
and Sun.

The final solution was pretty straightforward: only
use the information from zone.tab to run the tests.
2018-05-09 15:38:12 -03:00

65 lines
1.7 KiB
C

#include <locale.h>
#include <gtk/gtk.h>
#include "cc-datetime-resources.h"
#include "cc-timezone-map.h"
static void
test_timezone (void)
{
g_autoptr(GHashTable) ht = NULL;
CcTimezoneMap *map;
TzDB *tz_db;
guint i;
ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
map = cc_timezone_map_new ();
tz_db = tz_load_db ();
g_assert_nonnull (tz_db);
g_assert_nonnull (tz_db->locations);
for (i = 0; tz_db->locations && i < tz_db->locations->len; i++)
{
g_autofree gchar *clean_tz = NULL;
TzLocation *location = NULL;
location = g_ptr_array_index (tz_db->locations, i);
clean_tz = tz_info_get_clean_name (tz_db, location->zone);
if (!cc_timezone_map_set_timezone (map, location->zone))
{
if (!g_hash_table_contains (ht, clean_tz))
{
if (g_strcmp0 (clean_tz, location->zone) == 0)
g_printerr ("Failed to locate timezone '%s'\n", location->zone);
else
g_printerr ("Failed to locate timezone '%s' (original name: '%s')\n", clean_tz, location->zone);
g_hash_table_insert (ht, g_strdup (clean_tz), GINT_TO_POINTER (TRUE));
}
/* We don't warn for those, we'll just fallback
* in the panel code */
if (!g_str_equal (clean_tz, "posixrules") && !g_str_equal (clean_tz, "Factory"))
g_test_fail ();
}
}
tz_db_free (tz_db);
}
gint
main (gint argc,
gchar **argv)
{
setlocale (LC_ALL, "");
gtk_init (NULL, NULL);
g_test_init (&argc, &argv, NULL);
g_resources_register (cc_datetime_get_resource ());
g_setenv ("G_DEBUG", "fatal_warnings", FALSE);
g_test_add_func ("/datetime/timezone", test_timezone);
return g_test_run ();
}