diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2021-11-19 16:33:24 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gmail.com> | 2021-11-19 18:25:44 +0000 |
commit | ed27ed44c6a3cf7de54160a953a508053eb6da44 (patch) | |
tree | fa6784bfe3b02cd65c23f72242f72c2a74a94929 /libgweather | |
parent | 6bfad6d01f9ab3216af935faba67fb5003f3ea96 (diff) | |
download | libgweather-ed27ed44c6a3cf7de54160a953a508053eb6da44.tar.gz |
tests: Move shared API into a separate file
This way we don't have to copy stuff around.
Diffstat (limited to 'libgweather')
-rw-r--r-- | libgweather/tests/duplicates.c | 83 | ||||
-rw-r--r-- | libgweather/tests/gweather-test-utils.c | 86 | ||||
-rw-r--r-- | libgweather/tests/gweather-test-utils.h | 29 | ||||
-rw-r--r-- | libgweather/tests/meson.build | 2 | ||||
-rw-r--r-- | libgweather/tests/test_libgweather.c | 103 |
5 files changed, 140 insertions, 163 deletions
diff --git a/libgweather/tests/duplicates.c b/libgweather/tests/duplicates.c index 40204de..f85753c 100644 --- a/libgweather/tests/duplicates.c +++ b/libgweather/tests/duplicates.c @@ -13,78 +13,7 @@ #include <locale.h> #include <string.h> -#include <libgweather/gweather-version.h> - -/* We use internal API */ -#include "gweather-private.h" - -extern void -_gweather_location_reset_world (void); - -/* Set up the temporary directory with the GSettings schemas */ -static char * -setup_gsettings (void) -{ - char *tmpdir, *schema_text, *dest, *cmdline; - int result; - - /* Create the installed schemas directory */ - GError *error = NULL; - tmpdir = g_dir_make_tmp ("libgweather-test-XXXXXX", &error); - g_assert_no_error (error); - - g_test_message ("Using temporary directory: %s", tmpdir); - - /* Copy the schemas files */ - g_assert_true (g_file_get_contents (SCHEMAS_BUILDDIR "/org.gnome.GWeather4.enums.xml", &schema_text, NULL, NULL)); - dest = g_build_filename (tmpdir, "org.gnome.GWeather4.enums.xml", NULL); - g_assert_true (g_file_set_contents (dest, schema_text, -1, NULL)); - g_free (dest); - g_free (schema_text); - - g_assert_true (g_file_get_contents (SCHEMASDIR "/org.gnome.GWeather4.gschema.xml", &schema_text, NULL, NULL)); - dest = g_build_filename (tmpdir, "org.gnome.GWeather4.gschema.xml", NULL); - g_assert_true (g_file_set_contents (dest, schema_text, -1, NULL)); - g_free (dest); - g_free (schema_text); - - /* Compile the schemas */ - cmdline = g_strdup_printf ("glib-compile-schemas --targetdir=%s " - "--schema-file=%s/org.gnome.GWeather4.enums.xml " - "--schema-file=%s/org.gnome.GWeather4.gschema.xml", - tmpdir, - SCHEMAS_BUILDDIR, - SCHEMASDIR); - g_assert_true (g_spawn_command_line_sync (cmdline, NULL, NULL, &result, NULL)); - g_assert_cmpint (result, ==, 0); - g_free (cmdline); - - /* Set envvar */ - g_setenv ("GSETTINGS_SCHEMA_DIR", tmpdir, TRUE); - - return tmpdir; -} - -/* Tear down the temporary directory with the GSettings schemas */ -static void -teardown_gsettings (const char *schemas_dir) -{ - char *dest = NULL; - - dest = g_build_filename (schemas_dir, "org.gnome.GWeather4.enums.xml", NULL); - g_assert_no_errno (g_unlink (dest)); - g_free (dest); - - dest = g_build_filename (schemas_dir, "org.gnome.GWeather4.gschema.xml", NULL); - g_assert_no_errno (g_unlink (dest)); - g_free (dest); - - dest = g_build_filename (schemas_dir, "gschemas.compiled", NULL); - g_assert_no_errno (g_unlink (dest)); - g_free (dest); - - g_assert_no_errno (g_rmdir (schemas_dir)); -} +#include "gweather-test-utils.h" static void check_bad_duplicate_weather_stations (gpointer key, @@ -163,7 +92,7 @@ test_bad_duplicate_weather_stations (void) g_hash_table_unref (stations_ht); g_clear_object (&world); - _gweather_location_reset_world (); + gweather_test_reset_world (); } static void @@ -214,7 +143,7 @@ test_duplicate_weather_stations (void) test_duplicate_weather_stations_children (world); g_clear_object (&world); - _gweather_location_reset_world (); + gweather_test_reset_world (); } int @@ -226,7 +155,7 @@ main (int argc, g_test_init (&argc, &argv, NULL); g_test_bug_base ("http://gitlab.gnome.org/GNOME/libgweather/issues/"); - char *schemas_dir = setup_gsettings (); + g_autofree char *schemas_dir = gweather_test_setup_gsettings (); /* Modifies environment, so needs to run last */ g_test_add_func ("/weather/bad_duplicate_weather_stations", test_bad_duplicate_weather_stations); @@ -234,9 +163,7 @@ main (int argc, int res = g_test_run (); - teardown_gsettings (schemas_dir); - - g_free (schemas_dir); + gweather_test_teardown_gsettings (schemas_dir); return res; } diff --git a/libgweather/tests/gweather-test-utils.c b/libgweather/tests/gweather-test-utils.c new file mode 100644 index 0000000..7f92b52 --- /dev/null +++ b/libgweather/tests/gweather-test-utils.c @@ -0,0 +1,86 @@ +/* gweather-test-utils.c: Utility API for GWeather tests + * + * SPDX-FileCopyrightText: 2021 Emmanuele Bassi + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include "config.h" + +#include "gweather-test-utils.h" + +/* We use internal API */ +#include "gweather-private.h" + +extern void +_gweather_location_reset_world (void); + +void +gweather_test_reset_world (void) +{ + _gweather_location_reset_world (); +} + +/* Set up the temporary directory with the GSettings schemas */ +char * +gweather_test_setup_gsettings (void) +{ + char *tmpdir, *schema_text, *dest, *cmdline; + int result; + + /* Create the installed schemas directory */ + GError *error = NULL; + tmpdir = g_dir_make_tmp ("libgweather-test-XXXXXX", &error); + g_assert_no_error (error); + + g_test_message ("Using temporary directory: %s", tmpdir); + + /* Copy the schemas files */ + g_assert_true (g_file_get_contents (SCHEMAS_BUILDDIR "/org.gnome.GWeather4.enums.xml", &schema_text, NULL, NULL)); + dest = g_build_filename (tmpdir, "org.gnome.GWeather4.enums.xml", NULL); + g_assert_true (g_file_set_contents (dest, schema_text, -1, NULL)); + g_free (dest); + g_free (schema_text); + + g_assert_true (g_file_get_contents (SCHEMASDIR "/org.gnome.GWeather4.gschema.xml", &schema_text, NULL, NULL)); + dest = g_build_filename (tmpdir, "org.gnome.GWeather4.gschema.xml", NULL); + g_assert_true (g_file_set_contents (dest, schema_text, -1, NULL)); + g_free (dest); + g_free (schema_text); + + /* Compile the schemas */ + cmdline = g_strdup_printf ("glib-compile-schemas --targetdir=%s " + "--schema-file=%s/org.gnome.GWeather4.enums.xml " + "--schema-file=%s/org.gnome.GWeather4.gschema.xml", + tmpdir, + SCHEMAS_BUILDDIR, + SCHEMASDIR); + g_assert_true (g_spawn_command_line_sync (cmdline, NULL, NULL, &result, NULL)); + g_assert_cmpint (result, ==, 0); + g_free (cmdline); + + /* Set envvar */ + g_setenv ("GSETTINGS_SCHEMA_DIR", tmpdir, TRUE); + + return tmpdir; +} + +/* Tear down the temporary directory with the GSettings schemas */ +void +gweather_test_teardown_gsettings (const char *schemas_dir) +{ + char *dest = NULL; + + dest = g_build_filename (schemas_dir, "org.gnome.GWeather4.enums.xml", NULL); + g_assert_no_errno (g_unlink (dest)); + g_free (dest); + + dest = g_build_filename (schemas_dir, "org.gnome.GWeather4.gschema.xml", NULL); + g_assert_no_errno (g_unlink (dest)); + g_free (dest); + + dest = g_build_filename (schemas_dir, "gschemas.compiled", NULL); + g_assert_no_errno (g_unlink (dest)); + g_free (dest); + + g_assert_no_errno (g_rmdir (schemas_dir)); +} diff --git a/libgweather/tests/gweather-test-utils.h b/libgweather/tests/gweather-test-utils.h new file mode 100644 index 0000000..c899e9b --- /dev/null +++ b/libgweather/tests/gweather-test-utils.h @@ -0,0 +1,29 @@ +/* gweather-test-utils.h: Utility API for GWeather tests + * + * SPDX-FileCopyrightText: 2021 Emmanuele Bassi + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#pragma once + +#include <glib.h> +#include <glib/gstdio.h> +#include <libsoup/soup.h> +#include <locale.h> +#include <string.h> + +#include <libgweather/gweather.h> + +G_BEGIN_DECLS + +void +gweather_test_reset_world (void); + +/* Set up the temporary directory with the GSettings schemas */ +char * +gweather_test_setup_gsettings (void); + +void +gweather_test_teardown_gsettings (const char *schemas_dir); + +G_END_DECLS diff --git a/libgweather/tests/meson.build b/libgweather/tests/meson.build index 4ed6a3d..8f564a0 100644 --- a/libgweather/tests/meson.build +++ b/libgweather/tests/meson.build @@ -24,7 +24,7 @@ gweather_tests = [ foreach t: gweather_tests test_name = t['name'] - test_sources = [test_name + '.c'] + t.get('sources', []) + test_sources = [test_name + '.c', 'gweather-test-utils.c'] + t.get('sources', []) test_c_args = gweather_test_cargs + t.get('c_args', []) test_env = gweather_test_env diff --git a/libgweather/tests/test_libgweather.c b/libgweather/tests/test_libgweather.c index 7fa4408..dd07fe3 100644 --- a/libgweather/tests/test_libgweather.c +++ b/libgweather/tests/test_libgweather.c @@ -12,13 +12,11 @@ #include <locale.h> #include <string.h> -#include <libgweather/gweather-version.h> +#include <libgweather/gweather.h> -/* We use internal API */ -#include "gweather-private.h" +#include "gweather-test-utils.h" -extern void -_gweather_location_reset_world (void); +#include "gweather-private.h" /* For test_metar_weather_stations */ #define METAR_SOURCES "https://www.aviationweather.gov/docs/metar/stations.txt" @@ -51,7 +49,7 @@ test_named_timezones (void) } g_clear_object (&world); - _gweather_location_reset_world (); + gweather_test_reset_world (); } static GList * @@ -184,7 +182,8 @@ test_no_code_serialize (void) g_clear_object (&world); g_clear_object (&loc); g_clear_pointer (&new_loc, g_object_unref); - _gweather_location_reset_world (); + + gweather_test_reset_world (); } static void @@ -243,7 +242,8 @@ test_timezones (void) test_timezones_children (world); g_clear_object (&world); - _gweather_location_reset_world (); + + gweather_test_reset_world (); } static void @@ -294,7 +294,8 @@ test_airport_distance_sanity (void) g_warning ("Maximum city to airport distance is %.1f km", max_distance); g_clear_object (&world); - _gweather_location_reset_world (); + + gweather_test_reset_world (); } static GHashTable * @@ -451,72 +452,8 @@ test_metar_weather_stations (void) g_hash_table_unref (stations_ht); g_clear_object (&world); - _gweather_location_reset_world (); -} -/* Set up the temporary directory with the GSettings schemas */ -static char * -setup_gsettings (void) -{ - char *tmpdir, *schema_text, *dest, *cmdline; - int result; - - /* Create the installed schemas directory */ - GError *error = NULL; - tmpdir = g_dir_make_tmp ("libgweather-test-XXXXXX", &error); - g_assert_no_error (error); - - g_test_message ("Using temporary directory: %s", tmpdir); - - /* Copy the schemas files */ - g_assert_true (g_file_get_contents (SCHEMAS_BUILDDIR "/org.gnome.GWeather4.enums.xml", &schema_text, NULL, NULL)); - dest = g_build_filename (tmpdir, "org.gnome.GWeather4.enums.xml", NULL); - g_assert_true (g_file_set_contents (dest, schema_text, -1, NULL)); - g_free (dest); - g_free (schema_text); - - g_assert_true (g_file_get_contents (SCHEMASDIR "/org.gnome.GWeather4.gschema.xml", &schema_text, NULL, NULL)); - dest = g_build_filename (tmpdir, "org.gnome.GWeather4.gschema.xml", NULL); - g_assert_true (g_file_set_contents (dest, schema_text, -1, NULL)); - g_free (dest); - g_free (schema_text); - - /* Compile the schemas */ - cmdline = g_strdup_printf ("glib-compile-schemas --targetdir=%s " - "--schema-file=%s/org.gnome.GWeather4.enums.xml " - "--schema-file=%s/org.gnome.GWeather4.gschema.xml", - tmpdir, - SCHEMAS_BUILDDIR, - SCHEMASDIR); - g_assert_true (g_spawn_command_line_sync (cmdline, NULL, NULL, &result, NULL)); - g_assert_cmpint (result, ==, 0); - g_free (cmdline); - - /* Set envvar */ - g_setenv ("GSETTINGS_SCHEMA_DIR", tmpdir, TRUE); - - return tmpdir; -} - -/* Tear down the temporary directory with the GSettings schemas */ -static void -teardown_gsettings (const char *schemas_dir) -{ - char *dest = NULL; - - dest = g_build_filename (schemas_dir, "org.gnome.GWeather4.enums.xml", NULL); - g_assert_no_errno (g_unlink (dest)); - g_free (dest); - - dest = g_build_filename (schemas_dir, "org.gnome.GWeather4.gschema.xml", NULL); - g_assert_no_errno (g_unlink (dest)); - g_free (dest); - - dest = g_build_filename (schemas_dir, "gschemas.compiled", NULL); - g_assert_no_errno (g_unlink (dest)); - g_free (dest); - - g_assert_no_errno (g_rmdir (schemas_dir)); + gweather_test_reset_world (); } static void @@ -550,7 +487,8 @@ test_utc_sunset (void) g_clear_object (&world); g_clear_object (&utc); - _gweather_location_reset_world (); + + gweather_test_reset_world (); } static void @@ -577,7 +515,7 @@ test_location_names (void) g_clear_object (&world); g_clear_object (&brussels); - _gweather_location_reset_world (); + gweather_test_reset_world (); world = gweather_location_get_world (); g_assert_nonnull (world); @@ -592,7 +530,7 @@ test_location_names (void) g_clear_object (&world); setlocale (LC_ALL, old_locale); - _gweather_location_reset_world (); + gweather_test_reset_world (); } static gboolean @@ -732,7 +670,7 @@ test_walk_world (void) g_clear_object (&cur); /* noop, but asserts we did not leak */ - _gweather_location_reset_world (); + gweather_test_reset_world (); } static void @@ -757,26 +695,23 @@ main (int argc, char *argv[]) g_test_init (&argc, &argv, NULL); g_test_bug_base ("http://gitlab.gnome.org/GNOME/libgweather/issues/"); - char *schemas_dir = setup_gsettings (); + g_autofree char *schemas_dir = gweather_test_setup_gsettings (); g_test_add_func ("/weather/radians-to-degrees_str", test_radians_to_degrees_str); g_test_add_func ("/weather/named-timezones", test_named_timezones); g_test_add_func ("/weather/named-timezones-deserialized", test_named_timezones_deserialized); - g_test_add_func ("/weather/no-code-serialize", test_no_code_serialize); g_test_add_func ("/weather/timezones", test_timezones); + g_test_add_func ("/weather/no-code-serialize", test_no_code_serialize); g_test_add_func ("/weather/airport_distance_sanity", test_airport_distance_sanity); g_test_add_func ("/weather/metar_weather_stations", test_metar_weather_stations); g_test_add_func ("/weather/utc_sunset", test_utc_sunset); g_test_add_func ("/weather/weather-loop-use-after-free", test_weather_loop_use_after_free); - /* Modifies environment, so needs to run last */ g_test_add_func ("/weather/location-names", test_location_names); g_test_add_func ("/weather/walk_world", test_walk_world); int res = g_test_run (); - teardown_gsettings (schemas_dir); - - g_free (schemas_dir); + gweather_test_teardown_gsettings (schemas_dir); return res; } |