comparison tests/test-plugin-hangman.c @ 1011:a35537c50f09

irccd: hide conn implementation
author David Demelier <markand@malikania.fr>
date Wed, 17 Feb 2021 20:05:00 +0100
parents 0d71bfa6c97a
children 8f8ce47aba8a
comparison
equal deleted inserted replaced
1010:d1ec9b99b580 1011:a35537c50f09
20 20
21 #define GREATEST_USE_ABBREVS 0 21 #define GREATEST_USE_ABBREVS 0
22 #include <greatest.h> 22 #include <greatest.h>
23 23
24 #include <irccd/compat.h> 24 #include <irccd/compat.h>
25 #include <irccd/conn.h>
25 #include <irccd/js-plugin.h> 26 #include <irccd/js-plugin.h>
26 #include <irccd/log.h> 27 #include <irccd/log.h>
27 #include <irccd/plugin.h> 28 #include <irccd/plugin.h>
28 #include <irccd/server.h> 29 #include <irccd/server.h>
29 30
30 #define CALL(t, m) do { \ 31 #define CALL(t, m) do { \
31 memset(server->conn.out, 0, sizeof (server->conn.out)); \ 32 memset(server->conn->out, 0, sizeof (server->conn->out)); \
32 irc_plugin_handle(plugin, &(const struct irc_event) { \ 33 irc_plugin_handle(plugin, &(const struct irc_event) { \
33 .type = t, \ 34 .type = t, \
34 .server = server, \ 35 .server = server, \
35 .message = { \ 36 .message = { \
36 .origin = "jean!jean@localhost", \ 37 .origin = "jean!jean@localhost", \
37 .channel = "#hangman", \ 38 .channel = "#hangman", \
38 .message = m \ 39 .message = m \
39 } \ 40 } \
40 }); \ 41 }); \
41 } while (0) 42 } while (0)
42 43
43 #define CALL_EX(t, o, c, m) do { \ 44 #define CALL_EX(t, o, c, m) do { \
44 memset(server->conn.out, 0, sizeof (server->conn.out)); \ 45 memset(server->conn->out, 0, sizeof (server->conn->out)); \
45 irc_plugin_handle(plugin, &(const struct irc_event) { \ 46 irc_plugin_handle(plugin, &(const struct irc_event) { \
46 .type = t, \ 47 .type = t, \
47 .server = server, \ 48 .server = server, \
48 .message = { \ 49 .message = { \
49 .origin = o, \ 50 .origin = o, \
50 .channel = c, \ 51 .channel = c, \
51 .message = m \ 52 .message = m \
52 } \ 53 } \
53 }); \ 54 }); \
54 } while (0) 55 } while (0)
55 56
56 static struct irc_server *server; 57 static struct irc_server *server;
57 static struct irc_plugin *plugin; 58 static struct irc_plugin *plugin;
58 59
97 98
98 GREATEST_TEST 99 GREATEST_TEST
99 basics_asked(void) 100 basics_asked(void)
100 { 101 {
101 CALL(IRC_EVENT_COMMAND, ""); 102 CALL(IRC_EVENT_COMMAND, "");
102 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :start=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:_ _ _\r\n", server->conn.out); 103 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :start=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:_ _ _\r\n", server->conn->out);
103 104
104 CALL(IRC_EVENT_MESSAGE, "s"); 105 CALL(IRC_EVENT_MESSAGE, "s");
105 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s _ _\r\n", server->conn.out); 106 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s _ _\r\n", server->conn->out);
106 107
107 CALL(IRC_EVENT_MESSAGE, "s"); 108 CALL(IRC_EVENT_MESSAGE, "s");
108 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :asked=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s\r\n", server->conn.out); 109 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :asked=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s\r\n", server->conn->out);
109 GREATEST_PASS(); 110 GREATEST_PASS();
110 } 111 }
111 112
112 GREATEST_TEST 113 GREATEST_TEST
113 basics_dead(void) 114 basics_dead(void)
121 CALL(IRC_EVENT_MESSAGE, "f"); 122 CALL(IRC_EVENT_MESSAGE, "f");
122 CALL(IRC_EVENT_MESSAGE, "g"); 123 CALL(IRC_EVENT_MESSAGE, "g");
123 CALL(IRC_EVENT_MESSAGE, "h"); 124 CALL(IRC_EVENT_MESSAGE, "h");
124 CALL(IRC_EVENT_MESSAGE, "i"); 125 CALL(IRC_EVENT_MESSAGE, "i");
125 CALL(IRC_EVENT_MESSAGE, "j"); 126 CALL(IRC_EVENT_MESSAGE, "j");
126 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :dead=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:sky\r\n", server->conn.out); 127 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :dead=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:sky\r\n", server->conn->out);
127 GREATEST_PASS(); 128 GREATEST_PASS();
128 } 129 }
129 130
130 GREATEST_TEST 131 GREATEST_TEST
131 basics_found(void) 132 basics_found(void)
132 { 133 {
133 CALL(IRC_EVENT_COMMAND, ""); 134 CALL(IRC_EVENT_COMMAND, "");
134 CALL(IRC_EVENT_MESSAGE, "s"); 135 CALL(IRC_EVENT_MESSAGE, "s");
135 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s _ _\r\n", server->conn.out); 136 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s _ _\r\n", server->conn->out);
136 GREATEST_PASS(); 137 GREATEST_PASS();
137 } 138 }
138 139
139 GREATEST_TEST 140 GREATEST_TEST
140 basics_start(void) 141 basics_start(void)
141 { 142 {
142 CALL(IRC_EVENT_COMMAND, ""); 143 CALL(IRC_EVENT_COMMAND, "");
143 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :start=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:_ _ _\r\n", server->conn.out); 144 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :start=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:_ _ _\r\n", server->conn->out);
144 GREATEST_PASS(); 145 GREATEST_PASS();
145 } 146 }
146 147
147 GREATEST_TEST 148 GREATEST_TEST
148 basics_win1(void) 149 basics_win1(void)
149 { 150 {
150 CALL(IRC_EVENT_COMMAND, ""); 151 CALL(IRC_EVENT_COMMAND, "");
151 CALL(IRC_EVENT_MESSAGE, "s"); 152 CALL(IRC_EVENT_MESSAGE, "s");
152 CALL(IRC_EVENT_MESSAGE, "k"); 153 CALL(IRC_EVENT_MESSAGE, "k");
153 CALL(IRC_EVENT_MESSAGE, "y"); 154 CALL(IRC_EVENT_MESSAGE, "y");
154 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :win=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:sky\r\n", server->conn.out); 155 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :win=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:sky\r\n", server->conn->out);
155 GREATEST_PASS(); 156 GREATEST_PASS();
156 } 157 }
157 158
158 GREATEST_TEST 159 GREATEST_TEST
159 basics_win2(void) 160 basics_win2(void)
160 { 161 {
161 CALL(IRC_EVENT_COMMAND, ""); 162 CALL(IRC_EVENT_COMMAND, "");
162 CALL(IRC_EVENT_COMMAND, "sky"); 163 CALL(IRC_EVENT_COMMAND, "sky");
163 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :win=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:sky\r\n", server->conn.out); 164 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :win=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:sky\r\n", server->conn->out);
164 GREATEST_PASS(); 165 GREATEST_PASS();
165 } 166 }
166 167
167 GREATEST_TEST 168 GREATEST_TEST
168 basics_wrong_letter(void) 169 basics_wrong_letter(void)
169 { 170 {
170 CALL(IRC_EVENT_COMMAND, ""); 171 CALL(IRC_EVENT_COMMAND, "");
171 CALL(IRC_EVENT_MESSAGE, "x"); 172 CALL(IRC_EVENT_MESSAGE, "x");
172 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :wrong-letter=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:x\r\n", server->conn.out); 173 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :wrong-letter=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:x\r\n", server->conn->out);
173 GREATEST_PASS(); 174 GREATEST_PASS();
174 } 175 }
175 176
176 GREATEST_TEST 177 GREATEST_TEST
177 basics_wrong_word(void) 178 basics_wrong_word(void)
178 { 179 {
179 CALL(IRC_EVENT_COMMAND, ""); 180 CALL(IRC_EVENT_COMMAND, "");
180 CALL(IRC_EVENT_COMMAND, "cheese"); 181 CALL(IRC_EVENT_COMMAND, "cheese");
181 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :wrong-word=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:cheese\r\n", server->conn.out); 182 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :wrong-word=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:cheese\r\n", server->conn->out);
182 GREATEST_PASS(); 183 GREATEST_PASS();
183 } 184 }
184 185
185 GREATEST_TEST 186 GREATEST_TEST
186 basics_collaborative_enabled(void) 187 basics_collaborative_enabled(void)
190 CALL(IRC_EVENT_COMMAND, ""); 191 CALL(IRC_EVENT_COMMAND, "");
191 CALL(IRC_EVENT_MESSAGE, "s"); 192 CALL(IRC_EVENT_MESSAGE, "s");
192 193
193 /* Forbidden to play twice. */ 194 /* Forbidden to play twice. */
194 CALL(IRC_EVENT_MESSAGE, "k"); 195 CALL(IRC_EVENT_MESSAGE, "k");
195 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :wrong-player=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:k\r\n", server->conn.out); 196 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :wrong-player=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:k\r\n", server->conn->out);
196 197
197 /* Use a different nickname now. */ 198 /* Use a different nickname now. */
198 CALL_EX(IRC_EVENT_MESSAGE, "francis!francis@localhost", "#hangman", "k"); 199 CALL_EX(IRC_EVENT_MESSAGE, "francis!francis@localhost", "#hangman", "k");
199 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:francis!francis@localhost:francis:s k _\r\n", server->conn.out); 200 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:francis!francis@localhost:francis:s k _\r\n", server->conn->out);
200 201
201 GREATEST_PASS(); 202 GREATEST_PASS();
202 } 203 }
203 204
204 GREATEST_TEST 205 GREATEST_TEST
205 basics_case_insensitive(void) 206 basics_case_insensitive(void)
206 { 207 {
207 CALL_EX(IRC_EVENT_COMMAND, "jean!jean@localhost", "#hangman", ""); 208 CALL_EX(IRC_EVENT_COMMAND, "jean!jean@localhost", "#hangman", "");
208 209
209 CALL_EX(IRC_EVENT_MESSAGE, "jean!jean@localhost", "#HANGMAN", "s"); 210 CALL_EX(IRC_EVENT_MESSAGE, "jean!jean@localhost", "#HANGMAN", "s");
210 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s _ _\r\n", server->conn.out); 211 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s _ _\r\n", server->conn->out);
211 212
212 CALL_EX(IRC_EVENT_MESSAGE, "jean!jean@localhost", "#HaNGMaN", "k"); 213 CALL_EX(IRC_EVENT_MESSAGE, "jean!jean@localhost", "#HaNGMaN", "k");
213 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s k _\r\n", server->conn.out); 214 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :found=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:s k _\r\n", server->conn->out);
214 215
215 GREATEST_PASS(); 216 GREATEST_PASS();
216 } 217 }
217 218
218 GREATEST_TEST 219 GREATEST_TEST
223 * only one player against the bot. 224 * only one player against the bot.
224 */ 225 */
225 irc_plugin_set_option(plugin, "collaborative", "true"); 226 irc_plugin_set_option(plugin, "collaborative", "true");
226 227
227 CALL_EX(IRC_EVENT_COMMAND, "jean!jean@localhost", "t", ""); 228 CALL_EX(IRC_EVENT_COMMAND, "jean!jean@localhost", "t", "");
228 GREATEST_ASSERT_STR_EQ("PRIVMSG jean!jean@localhost :start=hangman:!hangman:test:jean!jean@localhost:jean!jean@localhost:jean:_ _ _\r\n", server->conn.out); 229 GREATEST_ASSERT_STR_EQ("PRIVMSG jean!jean@localhost :start=hangman:!hangman:test:jean!jean@localhost:jean!jean@localhost:jean:_ _ _\r\n", server->conn->out);
229 230
230 CALL_EX(IRC_EVENT_MESSAGE, "jean!jean@localhost", "t", "s"); 231 CALL_EX(IRC_EVENT_MESSAGE, "jean!jean@localhost", "t", "s");
231 GREATEST_ASSERT_STR_EQ("PRIVMSG jean!jean@localhost :found=hangman:!hangman:test:jean!jean@localhost:jean!jean@localhost:jean:s _ _\r\n", server->conn.out); 232 GREATEST_ASSERT_STR_EQ("PRIVMSG jean!jean@localhost :found=hangman:!hangman:test:jean!jean@localhost:jean!jean@localhost:jean:s _ _\r\n", server->conn->out);
232 233
233 CALL_EX(IRC_EVENT_MESSAGE, "jean!jean@localhost", "t", "k"); 234 CALL_EX(IRC_EVENT_MESSAGE, "jean!jean@localhost", "t", "k");
234 GREATEST_ASSERT_STR_EQ("PRIVMSG jean!jean@localhost :found=hangman:!hangman:test:jean!jean@localhost:jean!jean@localhost:jean:s k _\r\n", server->conn.out); 235 GREATEST_ASSERT_STR_EQ("PRIVMSG jean!jean@localhost :found=hangman:!hangman:test:jean!jean@localhost:jean!jean@localhost:jean:s k _\r\n", server->conn->out);
235 236
236 CALL_EX(IRC_EVENT_COMMAND, "jean!jean@localhost", "t", "sky"); 237 CALL_EX(IRC_EVENT_COMMAND, "jean!jean@localhost", "t", "sky");
237 GREATEST_ASSERT_STR_EQ("PRIVMSG jean!jean@localhost :win=hangman:!hangman:test:jean!jean@localhost:jean!jean@localhost:jean:sky\r\n", server->conn.out); 238 GREATEST_ASSERT_STR_EQ("PRIVMSG jean!jean@localhost :win=hangman:!hangman:test:jean!jean@localhost:jean!jean@localhost:jean:sky\r\n", server->conn->out);
238 239
239 GREATEST_PASS(); 240 GREATEST_PASS();
240 } 241 }
241 242
242 GREATEST_TEST 243 GREATEST_TEST
243 basics_running(void) 244 basics_running(void)
244 { 245 {
245 CALL(IRC_EVENT_COMMAND, ""); 246 CALL(IRC_EVENT_COMMAND, "");
246 CALL(IRC_EVENT_MESSAGE, "y"); 247 CALL(IRC_EVENT_MESSAGE, "y");
247 CALL(IRC_EVENT_COMMAND, ""); 248 CALL(IRC_EVENT_COMMAND, "");
248 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :running=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:_ _ y\r\n", server->conn.out); 249 GREATEST_ASSERT_STR_EQ("PRIVMSG #hangman :running=hangman:!hangman:test:#hangman:jean!jean@localhost:jean:_ _ y\r\n", server->conn->out);
249 GREATEST_PASS(); 250 GREATEST_PASS();
250 } 251 }
251 252
252 GREATEST_SUITE(suite_basics) 253 GREATEST_SUITE(suite_basics)
253 { 254 {