[evolution-data-server/openismus-phonenumber-work: 9/14] Prototype a D-Bus unit test harness.
- From: Mathias Hasselmann <hasselmm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/openismus-phonenumber-work: 9/14] Prototype a D-Bus unit test harness.
- Date: Thu, 6 Dec 2012 23:03:07 +0000 (UTC)
commit 89bf19705bfa6b0810b5f376501bc15ad69f6278
Author: Matthew Barnes <mbarnes redhat com>
Date: Fri Oct 26 16:30:20 2012 -0400
Prototype a D-Bus unit test harness.
Add functions for programmatically overriding XDG base directories
and launching a private D-Bus session bus using GTestDBus.
This requires Evolution-Data-Server to be installed, since the test
harness references D-Bus service files by the installation prefix.
tests/libedataserver/e-test-dbus-utils.c | 175 ++++++++++++++++++++++++++++++
tests/libedataserver/e-test-dbus-utils.h | 33 ++++++
2 files changed, 208 insertions(+), 0 deletions(-)
---
diff --git a/tests/libedataserver/e-test-dbus-utils.c b/tests/libedataserver/e-test-dbus-utils.c
new file mode 100644
index 0000000..605dd9c
--- /dev/null
+++ b/tests/libedataserver/e-test-dbus-utils.c
@@ -0,0 +1,175 @@
+/*
+ * e-test-dbus-utils.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "e-test-dbus-utils.h"
+
+#include <libedataserver/libedataserver.h>
+
+static GOnce base_directories_once = G_ONCE_INIT;
+
+static void
+test_setup_xdg_data_home (const gchar *base_directory)
+{
+ gchar *filename;
+
+ g_assert (base_directory != NULL);
+
+ filename = g_build_filename (base_directory, "share", NULL);
+
+ g_print ("XDG_DATA_HOME=%s\n", filename);
+ g_assert (g_setenv ("XDG_DATA_HOME", filename, TRUE));
+ g_assert_cmpstr (g_get_user_data_dir (), ==, filename);
+
+ g_free (filename);
+}
+
+static void
+test_setup_xdg_cache_home (const gchar *base_directory)
+{
+ gchar *filename;
+
+ g_assert (base_directory != NULL);
+
+ filename = g_build_filename (base_directory, "cache", NULL);
+
+ g_print ("XDG_CACHE_HOME=%s\n", filename);
+ g_assert (g_setenv ("XDG_CACHE_HOME", filename, TRUE));
+ g_assert_cmpstr (g_get_user_cache_dir (), ==, filename);
+
+ g_free (filename);
+}
+
+static void
+test_setup_xdg_config_home (const gchar *base_directory)
+{
+ gchar *filename;
+
+ g_assert (base_directory != NULL);
+
+ filename = g_build_filename (base_directory, "config", NULL);
+
+ g_print ("XDG_CONFIG_HOME=%s\n", filename);
+ g_assert (g_setenv ("XDG_CONFIG_HOME", filename, TRUE));
+ g_assert_cmpstr (g_get_user_config_dir (), ==, filename);
+
+ g_free (filename);
+}
+
+static gpointer
+test_setup_base_directories_once (gpointer unused)
+{
+ gchar *base_directory;
+
+ /* Do not invoke g_get_user_cache_dir() here because that will
+ * permanently set the cache directory result and we won't be
+ * able to override it with an environment variable. */
+ base_directory = g_build_filename (
+ g_get_home_dir (),
+ ".cache", "evolution",
+ "tmp", "test-home-XXXXXX", NULL);
+
+ mkdtemp (base_directory);
+
+ test_setup_xdg_data_home (base_directory);
+ test_setup_xdg_cache_home (base_directory);
+ test_setup_xdg_config_home (base_directory);
+
+ return base_directory;
+}
+
+const gchar *
+e_test_setup_base_directories (void)
+{
+ g_once (
+ &base_directories_once,
+ test_setup_base_directories_once, NULL);
+
+ return base_directories_once.retval;
+}
+
+gboolean
+e_test_clean_base_directories (GError **error)
+{
+ GFile *file;
+ gboolean success = TRUE;
+ const gchar *user_data_dir;
+ const gchar *user_cache_dir;
+ const gchar *user_config_dir;
+
+ e_test_setup_base_directories ();
+
+ user_data_dir = g_get_user_data_dir ();
+ g_assert (strstr (user_data_dir, "test-home") != NULL);
+
+ user_cache_dir = g_get_user_cache_dir ();
+ g_assert (strstr (user_cache_dir, "test-home") != NULL);
+
+ user_config_dir = g_get_user_config_dir ();
+ g_assert (strstr (user_config_dir, "test-home") != NULL);
+
+ if (success) {
+ file = g_file_new_for_path (user_data_dir);
+ success = e_file_recursive_delete_sync (file, NULL, error);
+ g_object_unref (file);
+ }
+
+ if (success) {
+ file = g_file_new_for_path (user_cache_dir);
+ success = e_file_recursive_delete_sync (file, NULL, error);
+ g_object_unref (file);
+ }
+
+ if (success) {
+ file = g_file_new_for_path (user_config_dir);
+ success = e_file_recursive_delete_sync (file, NULL, error);
+ g_object_unref (file);
+ }
+
+ return success;
+}
+
+GTestDBus *
+e_test_setup_dbus_session (void)
+{
+ GTestDBus *test_dbus;
+ const gchar * const *system_data_dirs;
+ gint ii;
+
+ e_test_setup_base_directories ();
+
+ system_data_dirs = g_get_system_data_dirs ();
+ g_assert (system_data_dirs != NULL);
+
+ test_dbus = g_test_dbus_new (G_TEST_DBUS_NONE);
+
+ for (ii = 0; system_data_dirs[ii] != NULL; ii++) {
+ gchar *service_dir;
+
+ service_dir = g_build_filename (
+ system_data_dirs[ii], "dbus-1", "services", NULL);
+ g_print ("Adding service dir: %s\n", service_dir);
+ g_test_dbus_add_service_dir (test_dbus, service_dir);
+ g_free (service_dir);
+ }
+
+ return test_dbus;
+}
diff --git a/tests/libedataserver/e-test-dbus-utils.h b/tests/libedataserver/e-test-dbus-utils.h
new file mode 100644
index 0000000..8518ffc
--- /dev/null
+++ b/tests/libedataserver/e-test-dbus-utils.h
@@ -0,0 +1,33 @@
+/*
+ * e-test-dbus-utils.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#ifndef E_TEST_DBUS_UTILS_H
+#define E_TEST_DBUS_UTILS_H
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+const gchar * e_test_setup_base_directories (void);
+gboolean e_test_clean_base_directories (GError **error);
+
+GTestDBus * e_test_setup_dbus_session (void);
+
+G_END_DECLS
+
+#endif /* E_TEST_DBUS_UTILS_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]