about summary refs log tree commit diff stats
path: root/tests/unittests/test_cmd_presence.c
blob: 74d4a132ee4f743efca60d87fd4ba84c921262b1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>

#include "config/preferences.h"

#include "ui/ui.h"
#include "ui/stub_ui.h"

#include "command/cmd_funcs.h"

#define CMD_PRESENCE "/presence"

void cmd_presence_shows_usage_when_bad_subcmd(void **state)
{
    gchar *args[] = { "badcmd", NULL };

    expect_string(cons_bad_cmd_usage, cmd, CMD_PRESENCE);

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);
    assert_true(result);
}

void cmd_presence_shows_usage_when_bad_console_setting(void **state)
{
    gchar *args[] = { "console", "badsetting", NULL };

    expect_string(cons_bad_cmd_usage, cmd, CMD_PRESENCE);

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);
    assert_true(result);
}

void cmd_presence_shows_usage_when_bad_chat_setting(void **state)
{
    gchar *args[] = { "chat", "badsetting", NULL };

    expect_string(cons_bad_cmd_usage, cmd, CMD_PRESENCE);

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);
    assert_true(result);
}

void cmd_presence_shows_usage_when_bad_muc_setting(void **state)
{
    gchar *args[] = { "muc", "badsetting", NULL };

    expect_string(cons_bad_cmd_usage, cmd, CMD_PRESENCE);

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);
    assert_true(result);
}

void cmd_presence_console_sets_all(void **state)
{
    gchar *args[] = { "console", "all", NULL };

    expect_cons_show("All presence updates will appear in the console.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_CONSOLE);
    assert_non_null(setting);
    assert_string_equal("all", setting);
    assert_true(result);
}

void cmd_presence_console_sets_online(void **state)
{
    gchar *args[] = { "console", "online", NULL };

    expect_cons_show("Only online/offline presence updates will appear in the console.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_CONSOLE);
    assert_non_null(setting);
    assert_string_equal("online", setting);
    assert_true(result);
}

void cmd_presence_console_sets_none(void **state)
{
    gchar *args[] = { "console", "none", NULL };

    expect_cons_show("Presence updates will not appear in the console.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_CONSOLE);
    assert_non_null(setting);
    assert_string_equal("none", setting);
    assert_true(result);
}

void cmd_presence_chat_sets_all(void **state)
{
    gchar *args[] = { "chat", "all", NULL };

    expect_cons_show("All presence updates will appear in chat windows.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_CHAT);
    assert_non_null(setting);
    assert_string_equal("all", setting);
    assert_true(result);
}

void cmd_presence_chat_sets_online(void **state)
{
    gchar *args[] = { "chat", "online", NULL };

    expect_cons_show("Only online/offline presence updates will appear in chat windows.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_CHAT);
    assert_non_null(setting);
    assert_string_equal("online", setting);
    assert_true(result);
}

void cmd_presence_chat_sets_none(void **state)
{
    gchar *args[] = { "chat", "none", NULL };

    expect_cons_show("Presence updates will not appear in chat windows.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_CHAT);
    assert_non_null(setting);
    assert_string_equal("none", setting);
    assert_true(result);
}

void cmd_presence_room_sets_all(void **state)
{
    gchar *args[] = { "room", "all", NULL };

    expect_cons_show("All presence updates will appear in chat room windows.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_MUC);
    assert_non_null(setting);
    assert_string_equal("all", setting);
    assert_true(result);
}

void cmd_presence_room_sets_online(void **state)
{
    gchar *args[] = { "room", "online", NULL };

    expect_cons_show("Only join/leave presence updates will appear in chat room windows.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_MUC);
    assert_non_null(setting);
    assert_string_equal("online", setting);
    assert_true(result);
}

void cmd_presence_room_sets_none(void **state)
{
    gchar *args[] = { "room", "none", NULL };

    expect_cons_show("Presence updates will not appear in chat room windows.");

    gboolean result = cmd_presence(NULL, CMD_PRESENCE, args);

    char *setting = prefs_get_string(PREF_STATUSES_MUC);
    assert_non_null(setting);
    assert_string_equal("none", setting);
    assert_true(result);
}
/span> curses.ACS_VLINE, y - 1) win.addch(0, x, curses.ACS_TTEE, 0) win.addch(y, x, curses.ACS_BTEE, 0) except: # in case it's off the boundaries pass self.addch(0, left_start, curses.ACS_ULCORNER) self.addch(self.hei - 1, left_start, curses.ACS_LLCORNER) self.addch(0, right_end, curses.ACS_URCORNER) self.addch(self.hei - 1, right_end, curses.ACS_LRCORNER) def _draw_bookmarks(self): self.fm.bookmarks.update_if_outdated() self.color_reset() self.need_clear = True sorted_bookmarks = sorted((item for item in self.fm.bookmarks \ if self.fm.settings.show_hidden_bookmarks or \ '/.' not in item[1].path), key=lambda t: t[0].lower()) hei = min(self.hei - 1, len(sorted_bookmarks)) ystart = self.hei - hei maxlen = self.wid self.addnstr(ystart - 1, 0, "mark path".ljust(self.wid), self.wid) whitespace = " " * maxlen for line, items in zip(range(self.hei-1), sorted_bookmarks): key, mark = items string = " " + key + " " + mark.path self.addstr(ystart + line, 0, whitespace) self.addnstr(ystart + line, 0, string, self.wid) self.win.chgat(ystart - 1, 0, curses.A_UNDERLINE) def _draw_info(self, lines): self.need_clear = True hei = min(self.hei - 1, len(lines)) ystart = self.hei - hei i = ystart whitespace = " " * self.wid for line in lines: if i >= self.hei: break self.addstr(i, 0, whitespace) self.addnstr(i, 0, line, self.wid) i += 1 def _draw_hints(self): self.need_clear = True hints = [] for k, v in self.fm.ui.keybuffer.pointer.items(): k = key_to_string(k) if isinstance(v, dict): text = '...' else: text = v if text.startswith('hint') or text.startswith('chain hint'): continue hints.append((k, text)) hints.sort(key=lambda t: t[1]) hei = min(self.hei - 1, len(hints)) ystart = self.hei - hei self.addnstr(ystart - 1, 0, "key command".ljust(self.wid), self.wid) try: self.win.chgat(ystart - 1, 0, curses.A_UNDERLINE) except: pass whitespace = " " * self.wid i = ystart for key, cmd in hints: string = " " + key.ljust(11) + " " + cmd self.addstr(i, 0, whitespace) self.addnstr(i, 0, string, self.wid) i += 1 def _collapse(self): # Should the last column be cut off? (Because there is no preview) if not self.settings.collapse_preview or not self.preview \ or not self.stretch_ratios: return False result = not self.columns[-1].has_preview() target = self.columns[-1].target if not result and target and target.is_file and \ self.fm.settings.preview_script and \ self.fm.settings.use_preview_script: try: result = not self.fm.previews[target.realpath]['foundpreview'] except: return self.old_collapse self.old_collapse = result return result def resize(self, y, x, hei, wid): """Resize all the columns according to the given ratio""" DisplayableContainer.resize(self, y, x, hei, wid) borders = self.settings.draw_borders pad = 1 if borders else 0 left = pad self.is_collapsed = self._collapse() if self.is_collapsed: generator = enumerate(self.stretch_ratios) else: generator = enumerate(self.ratios) last_i = len(self.ratios) - 1 for i, ratio in generator: wid = int(ratio * self.wid) cut_off = self.is_collapsed and not self.settings.padding_right if i == last_i: if not cut_off: wid = int(self.wid - left + 1 - pad) else: self.columns[i].resize(pad, left - 1, hei - pad * 2, 1) self.columns[i].visible = False continue if i == last_i - 1: self.pager.resize(pad, left, hei - pad * 2, \ max(1, self.wid - left - pad)) if cut_off: self.columns[i].resize(pad, left, hei - pad * 2, \ max(1, self.wid - left - pad)) continue try: self.columns[i].resize(pad, left, hei - pad * 2, \ max(1, wid - 1)) except KeyError: pass left += wid def click(self, event): if DisplayableContainer.click(self, event): return True direction = event.mouse_wheel_direction() if direction: self.main_column.scroll(direction) return False def open_pager(self): self.pager.visible = True self.pager.focused = True self.need_clear = True self.pager.open() try: self.columns[-1].visible = False self.columns[-2].visible = False except IndexError: pass def close_pager(self): self.pager.visible = False self.pager.focused = False self.need_clear = True self.pager.close() try: self.columns[-1].visible = True self.columns[-2].visible = True except IndexError: pass def poke(self): DisplayableContainer.poke(self) # Show the preview column when it has a preview but has # been hidden (e.g. because of padding_right = False) if not self.pager.visible and not self.columns[-1].visible and \ self.columns[-1].target and self.columns[-1].target.is_directory \ or self.columns[-1].has_preview() and not self.pager.visible: self.columns[-1].visible = True if self.preview and self.is_collapsed != self._collapse(): self.resize(self.y, self.x, self.hei, self.wid)