summaryrefslogtreecommitdiff
path: root/libgweather
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2021-11-19 16:33:24 +0000
committerEmmanuele Bassi <ebassi@gmail.com>2021-11-19 18:25:44 +0000
commited27ed44c6a3cf7de54160a953a508053eb6da44 (patch)
treefa6784bfe3b02cd65c23f72242f72c2a74a94929 /libgweather
parent6bfad6d01f9ab3216af935faba67fb5003f3ea96 (diff)
downloadlibgweather-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.c83
-rw-r--r--libgweather/tests/gweather-test-utils.c86
-rw-r--r--libgweather/tests/gweather-test-utils.h29
-rw-r--r--libgweather/tests/meson.build2
-rw-r--r--libgweather/tests/test_libgweather.c103
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;
}