1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00
profanity/tests/unittests/helpers.c

150 lines
3.0 KiB
C
Raw Normal View History

2014-01-19 11:32:31 -05:00
#include <setjmp.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdlib.h>
#include <cmocka.h>
2014-01-20 13:40:48 -05:00
#include <glib.h>
#include <stdio.h>
#include <unistd.h>
2014-01-19 11:32:31 -05:00
#include "common.h"
2014-02-01 16:18:15 -05:00
#include "helpers.h"
2014-01-20 13:40:48 -05:00
#include "config/preferences.h"
2015-01-06 16:22:09 -05:00
#include "chat_session.h"
2014-01-19 11:32:31 -05:00
void create_config_dir(void **state)
2014-01-19 11:32:31 -05:00
{
setenv("XDG_CONFIG_HOME", "./tests/files/xdg_config_home", 1);
gchar *xdg_config = xdg_get_config_home();
GString *profanity_dir = g_string_new(xdg_config);
g_string_append(profanity_dir, "/profanity");
if (!mkdir_recursive(profanity_dir->str)) {
assert_true(FALSE);
}
g_free(xdg_config);
g_string_free(profanity_dir, TRUE);
}
void remove_config_dir(void **state)
{
rmdir("./tests/files/xdg_config_home/profanity");
rmdir("./tests/files/xdg_config_home");
}
void create_data_dir(void **state)
{
setenv("XDG_DATA_HOME", "./tests/files/xdg_data_home", 1);
gchar *xdg_data = xdg_get_data_home();
GString *profanity_dir = g_string_new(xdg_data);
g_string_append(profanity_dir, "/profanity");
if (!mkdir_recursive(profanity_dir->str)) {
assert_true(FALSE);
}
g_free(xdg_data);
2014-01-19 11:32:31 -05:00
g_string_free(profanity_dir, TRUE);
}
2014-01-19 11:32:31 -05:00
void remove_data_dir(void **state)
{
rmdir("./tests/files/xdg_data_home/profanity");
rmdir("./tests/files/xdg_data_home");
}
void load_preferences(void **state)
{
create_config_dir(state);
2014-01-24 19:50:07 -05:00
FILE *f = fopen("./tests/files/xdg_config_home/profanity/profrc", "ab+");
if (f) {
prefs_load();
}
fclose(f);
2014-01-19 11:32:31 -05:00
}
void close_preferences(void **state)
2014-01-19 11:32:31 -05:00
{
2014-01-20 13:40:48 -05:00
prefs_close();
remove("./tests/files/xdg_config_home/profanity/profrc");
remove_config_dir(state);
2014-01-20 13:40:48 -05:00
rmdir("./tests/files");
2014-01-19 11:32:31 -05:00
}
2014-02-01 16:18:15 -05:00
2015-01-06 16:22:09 -05:00
void init_chat_sessions(void **state)
{
2015-01-06 16:56:14 -05:00
load_preferences(NULL);
2015-01-06 16:22:09 -05:00
chat_sessions_init();
}
void close_chat_sessions(void **state)
{
chat_sessions_clear();
2015-01-06 16:56:14 -05:00
close_preferences(NULL);
2015-01-06 16:22:09 -05:00
}
2015-01-27 17:13:09 -05:00
int
utf8_pos_to_col(char *str, int utf8_pos)
{
int col = 0;
int i = 0;
for (i = 0; i<utf8_pos; i++) {
col++;
gchar *ch = g_utf8_offset_to_pointer(str, i);
gunichar uni = g_utf8_get_char(ch);
if (g_unichar_iswide(uni)) {
col++;
}
}
return col;
}
2014-02-01 16:18:15 -05:00
static GCompareFunc cmp_func;
void
glist_set_cmp(GCompareFunc func)
{
cmp_func = func;
}
int
glist_contents_equal(const void *actual, const void *expected)
{
GList *ac = (GList *)actual;
GList *ex = (GList *)expected;
GList *p = ex;
printf("\nExpected\n");
while(ex) {
printf("\n\n%s\n", (char*)p->data);
ex = g_list_next(ex);
}
printf("\n\n");
p = ac;
printf("\nActual\n");
while(ac) {
printf("\n\n%s\n", (char *)p->data);
ac = g_list_next(ac);
}
printf("\n\n");
if (g_list_length(ex) != g_list_length(ac)) {
return 0;
}
GList *ex_curr = ex;
while (ex_curr != NULL) {
if (g_list_find_custom(ac, ex_curr->data, cmp_func) == NULL) {
return 0;
}
ex_curr = g_list_next(ex_curr);
}
return 1;
}