diff options
Diffstat (limited to 'tests/datetime')
-rw-r--r-- | tests/datetime/meson.build | 34 | ||||
-rw-r--r-- | tests/datetime/test-datetime.py | 54 | ||||
-rw-r--r-- | tests/datetime/test-endianess.c | 65 | ||||
-rw-r--r-- | tests/datetime/test-timezone-gfx.c | 75 | ||||
-rw-r--r-- | tests/datetime/test-timezone.c | 65 |
5 files changed, 293 insertions, 0 deletions
diff --git a/tests/datetime/meson.build b/tests/datetime/meson.build new file mode 100644 index 0000000..c9f0787 --- /dev/null +++ b/tests/datetime/meson.build @@ -0,0 +1,34 @@ + +test_units = [ + 'test-timezone', + 'test-timezone-gfx', + 'test-endianess', +] + +env = [ + 'G_MESSAGES_DEBUG=all', + 'BUILDDIR=' + meson.current_build_dir(), + 'TOP_BUILDDIR=' + meson.build_root(), +# Disable ATK, this should not be required but it caused CI failures -- 2018-12-07 + 'NO_AT_BRIDGE=1' +] +cflags = [ + '-DTEST_SRCDIR="@0@"'.format(meson.current_source_dir()), + '-DSRCDIR="@0@"'.format(meson.source_root() + '/panels/datetime') +] + +foreach unit: test_units + exe = executable( + unit, + [unit + '.c'], + dependencies : common_deps + [m_dep, datetime_panel_lib_dep], + c_args : cflags + ) +endforeach + +test( + 'test-datetime', + find_program('test-datetime.py'), + env : env, + timeout : 60 +) diff --git a/tests/datetime/test-datetime.py b/tests/datetime/test-datetime.py new file mode 100644 index 0000000..cc69cae --- /dev/null +++ b/tests/datetime/test-datetime.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +# Copyright © 2018 Red Hat, Inc +# 2018 Endless Mobile, Inc +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see <http://www.gnu.org/licenses/>. +# +# Authors: Benjamin Berg <bberg@redhat.com> +# Georges Basile Stavracas Neto <georges@endlessm.com> + +import os +import sys +import unittest + +try: + import dbusmock +except ImportError: + sys.stderr.write('You need python-dbusmock (http://pypi.python.org/pypi/python-dbusmock) for this test suite.\n') + sys.exit(1) + +# Add the shared directory to the search path +sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'shared')) + +from gtest import GTest +from x11session import X11SessionTestCase + +BUILDDIR = os.environ.get('BUILDDIR', os.path.join(os.path.dirname(__file__))) + + +class EndianessTestCase(X11SessionTestCase, GTest): + g_test_exe = os.path.join(BUILDDIR, 'test-endianess') + + +class TimezoneTestCase(X11SessionTestCase, GTest): + g_test_exe = os.path.join(BUILDDIR, 'test-timezone') + + +class TimezoneGfxTestCase(X11SessionTestCase, GTest): + g_test_exe = os.path.join(BUILDDIR, 'test-timezone-gfx') + + +if __name__ == '__main__': + _test = unittest.TextTestRunner(stream=sys.stdout, verbosity=2) + unittest.main(testRunner=_test) diff --git a/tests/datetime/test-endianess.c b/tests/datetime/test-endianess.c new file mode 100644 index 0000000..9cb9200 --- /dev/null +++ b/tests/datetime/test-endianess.c @@ -0,0 +1,65 @@ +#include <glib.h> +#include <glib/gi18n.h> +#include <locale.h> +#include "date-endian.h" + +static int verbose = 0; + +static void +print_endianess (const char *lang) +{ + DateEndianess endianess; + + if (lang != NULL) { + setlocale (LC_TIME, lang); + endianess = date_endian_get_for_lang (lang, verbose); + } else { + endianess = date_endian_get_default (verbose); + } + if (verbose) + g_print ("\t\t%s\n", date_endian_to_string (endianess)); +} + +static void +test_endianess (void) +{ + g_autoptr(GDir) dir = NULL; + const char *name; + + dir = g_dir_open ("/usr/share/i18n/locales/", 0, NULL); + if (dir == NULL) { + /* Try with /usr/share/locale/ + * https://bugzilla.gnome.org/show_bug.cgi?id=646780 */ + dir = g_dir_open ("/usr/share/locale/", 0, NULL); + if (dir == NULL) { + g_assert_not_reached (); + } + } + + while ((name = g_dir_read_name (dir)) != NULL) + print_endianess (name); +} + +int main (int argc, char **argv) +{ + setlocale (LC_ALL, ""); + bind_textdomain_codeset ("libc", "UTF-8"); + + g_test_init (&argc, &argv, NULL); + + g_setenv ("G_DEBUG", "fatal_warnings", FALSE); + + if (argv[1] != NULL) { + verbose = 1; + + if (g_str_equal (argv[1], "-c")) + print_endianess (NULL); + else + print_endianess (argv[1]); + return 0; + } + + g_test_add_func ("/datetime/endianess", test_endianess); + + return g_test_run (); +} diff --git a/tests/datetime/test-timezone-gfx.c b/tests/datetime/test-timezone-gfx.c new file mode 100644 index 0000000..1c25d48 --- /dev/null +++ b/tests/datetime/test-timezone-gfx.c @@ -0,0 +1,75 @@ +#include <config.h> +#include <locale.h> +#include <gtk/gtk.h> + +#include "cc-datetime-resources.h" +#include "tz.h" + +static void +test_timezone_gfx (gconstpointer data) +{ + g_autoptr(TzDB) db = NULL; + GPtrArray *locs; + const char *pixmap_dir; + guint i; + + pixmap_dir = data; + db = tz_load_db (); + locs = tz_get_locations (db); + + for (i = 0; i < locs->len ; i++) + { + g_autofree gchar *filename = NULL; + g_autofree gchar *path = NULL; + TzLocation *location; + TzInfo *info; + gdouble selected_offset; + gchar buf[16]; + + location = locs->pdata[i]; + info = tz_info_from_location (location); + selected_offset = tz_location_get_utc_offset (location) / (60.0 * 60.0) + (info->daylight ? -1.0 : 0.0); + tz_info_free (info); + + filename = g_strdup_printf ("timezone_%s.png", g_ascii_formatd (buf, sizeof (buf), "%g", selected_offset)); + path = g_build_filename (pixmap_dir, filename, NULL); + + if (!g_file_test (path, G_FILE_TEST_IS_REGULAR)) + { + g_message ("File '%s' missing for zone '%s'", filename, location->zone); + g_test_fail (); + } + } +} + +gint +main (gint argc, + gchar **argv) +{ + gchar *pixmap_dir; + + setlocale (LC_ALL, ""); + g_test_init (&argc, &argv, NULL); + + g_setenv ("G_DEBUG", "fatal_warnings", FALSE); + + g_resources_register (cc_datetime_get_resource ()); + + if (argc == 2) + { + pixmap_dir = g_strdup (argv[1]); + } + else if (argc == 1) + { + pixmap_dir = g_strdup (SRCDIR "/data/"); + } + else + { + g_message ("Usage: %s [PIXMAP DIRECTORY]", argv[0]); + return 1; + } + + g_test_add_data_func ("/datetime/timezone-gfx", pixmap_dir, test_timezone_gfx); + + return g_test_run (); +} diff --git a/tests/datetime/test-timezone.c b/tests/datetime/test-timezone.c new file mode 100644 index 0000000..5962fc4 --- /dev/null +++ b/tests/datetime/test-timezone.c @@ -0,0 +1,65 @@ +#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 (); +} |