c{0: 0 (((1 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((t literal))) -- nil c{0: 1 (((2 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((nil literal))) -- nil c{0: 2 (((3 boolean)) <- ((test1)) ((1 tagged-value-address)) ((2 tagged-value-address))) -- nil c{1: 0 ✓ (((1 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((t literal))) c{1: 1 ✓ (((2 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((nil literal))) c{1: 2 ✓ (((3 boolean)) <- ((test1)) ((1 tagged-value-address)) ((2 tagged-value-address))) c{0: 0 (((default-space space-address)) <- ((new)) ((space literal)) ((20 literal))) -- nil c{0: 1 (((first-arg-box tagged-value-address)) <- ((next-input))) -- nil c{0: 2 (((first-arg integer)) ((match? boolean)) <- ((maybe-coerce)) ((first-arg-box tagged-value-address) (deref)) ((integer literal))) -- ((open 2)) c{0: 3 (((break-unless)) ((match? boolean))) -- ((open 2)) c{0: 4 (((second-arg-box tagged-value-address)) <- ((next-input))) -- ((open 2)) c{0: 5 (((second-arg integer)) <- ((maybe-coerce)) ((second-arg-box tagged-value-address) (deref)) ((integer literal))) -- ((open 2)) c{0: 6 (((result integer)) <- ((add)) ((first-arg integer)) ((second-arg integer))) -- ((open 2)) c{0: 7 (((reply)) ((result integer))) -- ((open 2)) c{0: 8 (((first-arg boolean)) ((match? boolean)) <- ((maybe-coerce)) ((first-arg-box tagged-value-address) (deref)) ((boolean literal))) -- ((open 8) (close 8) (open 2)) c{0: 9 (((break-unless)) ((match? boolean))) -- ((open 8) (close 8) (open 2)) c{0: 10 (((second-arg-box tagged-value-address)) <- ((next-input))) -- ((open 8) (close 8) (open 2)) c{0: 11 (((second-arg boolean)) <- ((maybe-coerce)) ((second-arg-box tagged-value-address) (deref)) ((boolean literal))) -- ((open 8) (close 8) (open 2)) c{0: 12 (((result boolean)) <- ((or)) ((first-arg boolean)) ((second-arg boolean))) -- ((open 8) (close 8) (open 2)) c{0: 13 (((reply)) ((result integer))) -- ((open 8) (close 8) (open 2)) c{0: 14 (((reply)) ((nil literal))) -- ((close 14) (open 8) (close 8) (open 2)) c{1: 0 ✓ (((default-space space-address)) <- ((new)) ((space literal)) ((20 literal))) c{1: 1 ✓ (((first-arg-box tagged-value-address)) <- ((next-input))) c{1: 2 ✓ (((first-arg integer)) ((match? boolean)) <- ((maybe-coerce)) ((first-arg-box tagged-value-address) (deref)) ((integer literal))) c{1: 3 X (((break-unless)) ((match? boolean))) => (((jump-unless)) ((match? boolean)) ((4 offset))) c{1: 4 ✓ (((second-arg-box tagged-value-address)) <- ((next-input))) c{1: 5 ✓ (((second-arg integer)) <- ((maybe-coerce)) ((second-arg-box tagged-value-address) (deref)) ((integer literal))) c{1: 6 ✓ (((result integer)) <- ((add)) ((first-arg integer)) ((second-arg integer))) c{1: 7 ✓ (((reply)) ((result integer))) c{1: 8 ✓ (((first-arg boolean)) ((match? boolean)) <- ((maybe-coerce)) ((first-arg-box tagged-value-address) (deref)) ((boolean literal))) c{1: 9 X (((break-unless)) ((match? boolean))) => (((jump-unless)) ((match? boolean)) ((4 offset))) c{1: 10 ✓ (((second-arg-box tagged-value-address)) <- ((next-input))) c{1: 11 ✓ (((second-arg boolean)) <- ((maybe-coerce)) ((second-arg-box tagged-value-address) (deref)) ((boolean literal))) c{1: 12 ✓ (((result boolean)) <- ((or)) ((first-arg boolean)) ((second-arg boolean))) c{1: 13 ✓ (((reply)) ((result integer))) c{1: 14 ✓ (((reply)) ((nil literal))) cn0: convert-names in main cn0: (((1 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((t literal))) nil nil cn0: checking arg ((boolean literal)) cn0: checking arg ((t literal)) cn0: checking oarg ((1 tagged-value-address)) maybe-add: ((1 tagged-value-address)) cn0: (((2 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((nil literal))) nil nil cn0: checking arg ((boolean literal)) cn0: checking arg ((nil literal)) cn0: checking oarg ((2 tagged-value-address)) maybe-add: ((2 tagged-value-address)) cn0: (((3 boolean)) <- ((test1)) ((1 tagged-value-address)) ((2 tagged-value-address))) nil nil cn0: checking arg ((1 tagged-value-address)) maybe-add: ((1 tagged-value-address)) cn0: checking arg ((2 tagged-value-address)) maybe-add: ((2 tagged-value-address)) cn0: checking oarg ((3 boolean)) maybe-add: ((3 boolean)) cn0: convert-names in test1 cn0: (((default-space space-address)) <- ((new)) ((space literal)) ((20 literal))) nil nil cn0: checking arg ((space literal)) cn0: checking arg ((20 literal)) cn0: checking oarg ((default-space space-address)) maybe-add: ((default-space space-address)) cn0: (((first-arg-box tagged-value-address)) <- ((next-input))) nil nil cn0: checking oarg ((first-arg-box tagged-value-address)) maybe-add: ((first-arg-box tagged-value-address)) cn0: location for oarg ((first-arg-box tagged-value-address)): 1 cn0: (((first-arg integer)) ((match? boolean)) <- ((maybe-coerce)) ((first-arg-box tagged-value-address) (deref)) ((integer literal))) ((first-arg-box 1)) nil cn0: checking arg ((first-arg-box tagged-value-address) (deref)) maybe-add: ((first-arg-box tagged-value-address) (deref)) cn0: checking arg ((integer literal)) cn0: checking oarg ((first-arg integer)) maybe-add: ((first-arg integer)) cn0: location for oarg ((first-arg integer)): 2 cn0: checking oarg ((match? boolean)) maybe-add: ((match? boolean)) cn0: location for oarg ((match? boolean)): 3 cn0: (((jump-unless)) ((match? boolean)) ((4 offset))) ((first-arg 2) (first-arg-box 1) (match? 3)) nil cn0: checking arg ((match? boolean)) maybe-add: ((match? boolean)) cn0: checking arg ((4 offset)) cn0: (((second-arg-box tagged-value-address)) <- ((next-input))) ((first-arg 2) (first-arg-box 1) (match? 3)) nil cn0: checking oarg ((second-arg-box tagged-value-address)) maybe-add: ((second-arg-box tagged-value-address)) cn0: location for oarg ((second-arg-box tagged-value-address)): 4 cn0: (((second-arg integer)) <- ((maybe-coerce)) ((second-arg-box tagged-value-address) (deref)) ((integer literal))) ((first-arg 2) (first-arg-box 1) (match? 3) (second-arg-box 4)) nil cn0: checking arg ((second-arg-box tagged-value-address) (deref)) maybe-add: ((second-arg-box tagged-value-address) (deref)) cn0: checking arg ((integer literal)) cn0: checking oarg ((second-arg integer)) maybe-add: ((second-arg integer)) cn0: location for oarg ((second-arg integer)): 5 cn0: (((result integer)) <- ((add)) ((first-arg integer)) ((second-arg integer))) ((first-arg 2) (first-arg-box 1) (match? 3) (second-arg 5) (second-arg-box 4)) nil cn0: checking arg ((first-arg integer)) maybe-add: ((first-arg integer)) cn0: checking arg ((second-arg integer)) maybe-add: ((second-arg integer)) cn0: checking oarg ((result integer)) maybe-add: ((result integer)) cn0: location for oarg ((result integer)): 6 cn0: (((reply)) ((result integer))) ((first-arg 2) (first-arg-box 1) (match? 3) (result 6) (second-arg 5) (second-arg-box 4)) nil cn0: checking arg ((result integer)) maybe-add: ((result integer)) cn0: (((first-arg boolean)) ((match? boolean)) <- ((maybe-coerce)) ((first-arg-box tagged-value-address) (deref)) ((boolean literal))) ((first-arg 2) (first-arg-box 1) (match? 3) (result 6) (second-arg 5) (second-arg-box 4)) nil cn0: checking arg ((first-arg-box tagged-value-address) (deref)) maybe-add: ((first-arg-box tagged-value-address) (deref)) cn0: checking arg ((boolean literal)) cn0: checking oarg ((first-arg boolean)) maybe-add: ((first-arg boolean)) cn0: checking oarg ((match? boolean)) maybe-add: ((match? boolean)) cn0: (((jump-unless)) ((match? boolean)) ((4 offset))) ((first-arg 2) (first-arg-box 1) (match? 3) (result 6) (second-arg 5) (second-arg-box 4)) nil cn0: checking arg ((match? boolean)) maybe-add: ((match? boolean)) cn0: checking arg ((4 offset)) cn0: (((second-arg-box tagged-value-address)) <- ((next-input))) ((first-arg 2) (first-arg-box 1) (match? 3) (result 6) (second-arg 5) (second-arg-box 4)) nil cn0: checking oarg ((second-arg-box tagged-value-address)) maybe-add: ((second-arg-box tagged-value-address)) cn0: (((second-arg boolean)) <- ((maybe-coerce)) ((second-arg-box tagged-value-address) (deref)) ((boolean literal))) ((first-arg 2) (first-arg-box 1) (match? 3) (result 6) (second-arg 5) (second-arg-box 4)) nil cn0: checking arg ((second-arg-box tagged-value-address) (deref)) maybe-add: ((second-arg-box tagged-value-address) (deref)) cn0: checking arg ((boolean literal)) cn0: checking oarg ((second-arg boolean)) maybe-add: ((second-arg boolean)) cn0: (((result boolean)) <- ((or)) ((first-arg boolean)) ((second-arg boolean))) ((first-arg 2) (first-arg-box 1) (match? 3) (result 6) (second-arg 5) (second-arg-box 4)) nil cn0: checking arg ((first-arg boolean)) maybe-add: ((first-arg boolean)) cn0: checking arg ((second-arg boolean)) maybe-add: ((second-arg boolean)) cn0: checking oarg ((result boolean)) maybe-add: ((result boolean)) cn0: (((reply)) ((result integer))) ((first-arg 2) (first-arg-box 1) (match? 3) (result 6) (second-arg 5) (second-arg-box 4)) nil cn0: checking arg ((result integer)) maybe-add: ((result integer)) cn0: (((reply)) ((nil literal))) ((first-arg 2) (first-arg-box 1) (match? 3) (result 6) (second-arg 5) (second-arg-box 4)) nil cn0: checking arg ((nil literal)) cn1: (((1 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((t literal))) cn1: (((2 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((nil literal))) cn1: (((3 boolean)) <- ((test1)) ((1 tagged-value-address)) ((2 tagged-value-address))) cn1: (((default-space space-address)) <- ((new)) ((space literal)) ((20 literal))) cn1: (((1 tagged-value-address)) <- ((next-input))) cn1: (((2 integer)) ((3 boolean)) <- ((maybe-coerce)) ((1 tagged-value-address) (deref)) ((integer literal))) cn1: (((jump-unless)) ((3 boolean)) ((4 offset))) cn1: (((4 tagged-value-address)) <- ((next-input))) cn1: (((5 integer)) <- ((maybe-coerce)) ((4 tagged-value-address) (deref)) ((integer literal))) cn1: (((6 integer)) <- ((add)) ((2 integer)) ((5 integer))) cn1: (((reply)) ((6 integer))) cn1: (((2 boolean)) ((3 boolean)) <- ((maybe-coerce)) ((1 tagged-value-address) (deref)) ((boolean literal))) cn1: (((jump-unless)) ((3 boolean)) ((4 offset))) cn1: (((4 tagged-value-address)) <- ((next-input))) cn1: (((5 boolean)) <- ((maybe-coerce)) ((4 tagged-value-address) (deref)) ((boolean literal))) cn1: (((6 boolean)) <- ((or)) ((2 boolean)) ((5 boolean))) cn1: (((reply)) ((6 integer))) cn1: (((reply)) ((nil literal))) schedule: main run: main 0: (((1 tagged-value-address)) <- ((init-tagged-value)) ((boolean literal)) ((t literal))) run: init-tagged-value/main 0: (((default-space space-address)) <- ((new)) ((space literal)) ((30 literal))) run: init-tagged-value/main 0: 1000 => ((default-space space-address)) run: init-tagged-value/main 1: (((1 type)) <- ((next-input))) arg: nil 0 (boolean t) run: init-tagged-value/main 1: boolean => ((1 type)) mem: ((1 type)): 1002 <= boolean run: init-tagged-value/main 2: (((2 integer)) <- ((sizeof)) ((1 type))) mem: ((1 type)) => boolean run: init-tagged-value/main 2: 1 => ((2 integer)) mem: ((2 integer)): 1003 <= 1 run: init-tagged-value/main 3: (((3 boolean)) <- ((equal)) ((2 integer)) ((1 literal))) mem: ((2 integer)) => 1 run: init-tagged-value/main 3: t => ((3 boolean)) mem: ((3 boolean)): 1004 <= t run: init-tagged-value/main 4: (((assert)) ((3 boolean))) mem: ((3 boolean)) => t run: init-tagged-value/main 5: (((4 tagged-value-address)) <- ((new)) ((tagged-value literal))) run: init-tagged-value/main 5: 1031 => ((4 tagged-value-address)) mem: ((4 tagged-value-address)): 1005 <= 1031 run: init-tagged-value/main 6: (((5 location)) <- ((get-address)) ((4 tagged-value-address) (deref)) ((0 offset))) run: init-tagged-value/main 6: 1031 => ((5 location)) mem: ((5 location)): 1006 <= 1031 run: init-tagged-value/main 7: (((5 location) (deref)) <- ((copy)) ((1 type))) mem: ((1 type)) => boolean run: init-tagged-value/main 7: boolean => ((5 locng.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#include <setjmp.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdlib.h>
#include <cmocka.h>
#include <glib.h>
#include <stdio.h>
#include <unistd.h>

#include "common.h"
#include "helpers.h"
#include "config/preferences.h"
#include "xmpp/chat_session.h"

void
create_config_dir(void** state)
{
    setenv("XDG_CONFIG_HOME", "./tests/files/xdg_config_home", 1);
    if (!mkdir_recursive("./tests/files/xdg_config_home/profanity")) {
        assert_true(FALSE);
    }
}

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);
    if (!mkdir_recursive("./tests/files/xdg_data_home/profanity")) {
        assert_true(FALSE);
    }
}

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);
    FILE* f = fopen("./tests/files/xdg_config_home/profanity/profrc", "ab+");
    if (f) {
        prefs_load(NULL);
    }
    fclose(f);
}

void
close_preferences(void** state)
{
    prefs_close();
    remove("./tests/files/xdg_config_home/profanity/profrc");
    remove_config_dir(state);
    rmdir("./tests/files");
}

void
init_chat_sessions(void** state)
{
    load_preferences(NULL);
    chat_sessions_init();
}

void
close_chat_sessions(void** state)
{
    chat_sessions_clear();
    close_preferences(NULL);
}

int
utf8_pos_to_col(char* str, int utf8_pos)
{
    int col = 0;

    int i = 0;
    for (i = 0; i <