about summary refs log tree commit diff stats
path: root/stabbertests/proftest.c
diff options
context:
space:
mode:
Diffstat (limited to 'stabbertests/proftest.c')
-rw-r--r--stabbertests/proftest.c186
1 files changed, 186 insertions, 0 deletions
diff --git a/stabbertests/proftest.c b/stabbertests/proftest.c
new file mode 100644
index 00000000..d15b9cbf
--- /dev/null
+++ b/stabbertests/proftest.c
@@ -0,0 +1,186 @@
+#include <sys/stat.h>
+#include <glib.h>
+
+#include <setjmp.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <cmocka.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "config.h"
+
+#include "config/preferences.h"
+#include "log.h"
+#include "xmpp/xmpp.h"
+#include "command/command.h"
+#include "roster_list.h"
+
+#ifdef HAVE_GIT_VERSION
+#include "gitversion.h"
+#endif
+
+#ifdef HAVE_LIBOTR
+#include "otr/otr.h"
+#endif
+
+
+#define XDG_CONFIG_HOME "./stabbertests/files/xdg_config_home"
+#define XDG_DATA_HOME   "./stabbertests/files/xdg_data_home"
+
+gboolean
+_create_dir(char *name)
+{
+    struct stat sb;
+
+    if (stat(name, &sb) != 0) {
+        if (errno != ENOENT || mkdir(name, S_IRWXU) != 0) {
+            return FALSE;
+        }
+    } else {
+        if ((sb.st_mode & S_IFDIR) != S_IFDIR) {
+            return FALSE;
+        }
+    }
+
+    return TRUE;
+}
+
+gboolean
+_mkdir_recursive(const char *dir)
+{
+    int i;
+    gboolean result = TRUE;
+
+    for (i = 1; i <= strlen(dir); i++) {
+        if (dir[i] == '/' || dir[i] == '\0') {
+            gchar *next_dir = g_strndup(dir, i);
+            result = create_dir(next_dir);
+            g_free(next_dir);
+            if (!result) {
+                break;
+            }
+        }
+    }
+
+    return result;
+}
+
+void
+_create_config_dir(void)
+{
+    GString *profanity_dir = g_string_new(XDG_CONFIG_HOME);
+    g_string_append(profanity_dir, "/profanity");
+
+    if (!_mkdir_recursive(profanity_dir->str)) {
+        assert_true(FALSE);
+    }
+
+    g_string_free(profanity_dir, TRUE);
+}
+
+void
+_create_data_dir(void)
+{
+    GString *profanity_dir = g_string_new(XDG_DATA_HOME);
+    g_string_append(profanity_dir, "/profanity");
+
+    if (!_mkdir_recursive(profanity_dir->str)) {
+        assert_true(FALSE);
+    }
+
+    g_string_free(profanity_dir, TRUE);
+}
+
+void
+_create_chatlogs_dir(void)
+{
+    GString *chatlogs_dir = g_string_new(XDG_DATA_HOME);
+    g_string_append(chatlogs_dir, "/profanity/chatlogs");
+
+    if (!_mkdir_recursive(chatlogs_dir->str)) {
+        assert_true(FALSE);
+    }
+
+    g_string_free(chatlogs_dir, TRUE);
+}
+
+void
+_create_logs_dir(void)
+{
+    GString *logs_dir = g_string_new(XDG_DATA_HOME);
+    g_string_append(logs_dir, "/profanity/logs");
+
+    if (!_mkdir_recursive(logs_dir->str)) {
+        assert_true(FALSE);
+    }
+
+    g_string_free(logs_dir, TRUE);
+}
+
+void
+_cleanup_dirs(void)
+{
+    system("rm -rf ./stabbertests/files");
+}
+
+void
+init_prof_test(void **state)
+{
+    setenv("XDG_CONFIG_HOME", XDG_CONFIG_HOME, 1);
+    setenv("XDG_DATA_HOME", XDG_DATA_HOME, 1);
+
+    _create_config_dir();
+    _create_data_dir();
+    _create_chatlogs_dir();
+    _create_logs_dir();
+
+    log_level_t prof_log_level = log_level_from_string("DEBUG");
+    prefs_load();
+    log_init(prof_log_level);
+    if (strcmp(PACKAGE_STATUS, "development") == 0) {
+#ifdef HAVE_GIT_VERSION
+            log_info("Starting Profanity (%sdev.%s.%s)...", PACKAGE_VERSION, PROF_GIT_BRANCH, PROF_GIT_REVISION);
+#else
+            log_info("Starting Profanity (%sdev)...", PACKAGE_VERSION);
+#endif
+    } else {
+        log_info("Starting Profanity (%s)...", PACKAGE_VERSION);
+    }
+    chat_log_init();
+    groupchat_log_init();
+    accounts_load();
+    char *theme = prefs_get_string(PREF_THEME);
+    theme_init(theme);
+    prefs_free_string(theme);
+    jabber_init(FALSE);
+    cmd_init();
+    log_info("Initialising contact list");
+    roster_init();
+    muc_init();
+#ifdef HAVE_LIBOTR
+    otr_init();
+#endif
+}
+
+void
+close_prof_test(void **state)
+{
+    jabber_disconnect();
+    jabber_shutdown();
+    roster_free();
+    muc_close();
+    caps_close();
+#ifdef HAVE_LIBOTR
+    otr_shutdown();
+#endif
+    chat_log_close();
+    prefs_close();
+    theme_close();
+    accounts_close();
+    cmd_uninit();
+    log_close();
+
+    _cleanup_dirs();
+}