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.
65 lines
1.7 KiB
C
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 ();
|
|
}
|