1 #include "test.h"
2
3 #include "../src/tlf.h"
4 #include "../src/addmult.h"
5 #include "../src/globalvars.h"
6 #include "../src/bands.h"
7 #include <stdio.h>
8 #include <unistd.h>
9
10 // OBJECT ../src/addmult.o
11 // OBJECT ../src/bands.o
12
13 extern struct mults_t multis[MAX_MULTS];
14 extern int nr_multis;
15
16 extern char multsfile[]; /* name of file with a list of allowed
17 multipliers */
18
19 char *testfile = "mults";
20
21 /* export internal definition */
22 GSList *get_aliases(int n);
23
24 /* helpers for writing a temporary multsfile for testing */
write_testfile(char * name,char * content)25 void write_testfile(char *name, char *content) {
26 FILE *fp;
27 fp = fopen(name, "w");
28 if (fp != NULL) {
29 fputs(content, fp);
30 fclose(fp);
31 }
32 }
33
setup_multis(char * multstring)34 void setup_multis(char *multstring) {
35 write_testfile(testfile, multstring);
36 strcpy(multsfile, testfile);
37 init_and_load_multipliers();
38 }
39
40
setup_default(void ** state)41 int setup_default(void **state) {
42 bandinx = BANDINDEX_80;
43
44 arrlss = 0;
45 shownewmult = -1;
46 wysiwyg_once = 0;
47 wysiwyg_multi = 0;
48 arrlss = 0;
49 serial_section_mult = 0;
50 sectn_mult = 0;
51 serial_grid4_mult = 0;
52 dx_arrlsections = 0;
53 ve_cty = 77; /* random numbers just for test */
54 w_cty = 78;
55
56 strcpy(comment, "");
57 strcpy(section, "");
58
59 strcpy(multsfile, "");
60
61 init_mults();
62
63 unlink(testfile);
64
65 return 0;
66 }
67
68 /* tewst initialization of 'multis' */
test_init_mults(void ** state)69 void test_init_mults(void **state) {
70 nr_multis = 2;
71 strcpy(multis[0].name, "abc");
72 strcpy(multis[1].name, "abd");
73 multis[0].band = inxes[BANDINDEX_160];
74 multis[1].band = inxes[BANDINDEX_80];
75 init_mults();
76 assert_int_equal(nr_multis, 0);
77
78 assert_string_equal(multis[0].name, "");
79 assert_int_equal(multis[0].band, 0);
80 }
81
82
83 /* tests for remember_multi */
test_remember_mult_empty(void ** state)84 void test_remember_mult_empty(void **state) {
85 assert_int_equal(remember_multi("", BANDINDEX_80, 0), -1);
86 }
87
test_remember_mult_one(void ** state)88 void test_remember_mult_one(void **state) {
89 assert_int_equal(remember_multi("abc", BANDINDEX_80, 0), 0);
90 assert_int_equal(nr_multis, 1);
91 assert_string_equal(multis[0].name, "abc");
92 assert_int_equal(multis[0].band, inxes[BANDINDEX_80]);
93 }
94
test_remember_mult_two(void ** state)95 void test_remember_mult_two(void **state) {
96 assert_int_equal(remember_multi("abc", BANDINDEX_80, 0), 0);
97 assert_int_equal(remember_multi("def", BANDINDEX_80, 0), 1);
98 assert_int_equal(nr_multis, 2);
99 assert_string_equal(multis[0].name, "abc");
100 assert_string_equal(multis[1].name, "def");
101 assert_int_equal(multis[0].band, inxes[BANDINDEX_80]);
102 assert_int_equal(multis[1].band, inxes[BANDINDEX_80]);
103 }
104
test_remember_mult_same_2x(void ** state)105 void test_remember_mult_same_2x(void **state) {
106 assert_int_equal(remember_multi("abc", BANDINDEX_80, 0), 0);
107 assert_int_equal(remember_multi("abc", BANDINDEX_160, 0), -1);
108 assert_int_equal(nr_multis, 1);
109 assert_string_equal(multis[0].name, "abc");
110 assert_int_equal(multis[0].band, inxes[BANDINDEX_80] | inxes[BANDINDEX_160]);
111 }
112
test_remember_mult_same_2x_newband(void ** state)113 void test_remember_mult_same_2x_newband(void **state) {
114 assert_int_equal(remember_multi("abc", BANDINDEX_80, 0), 0);
115 assert_int_equal(remember_multi("abc", BANDINDEX_160, 1), 0);
116 assert_int_equal(nr_multis, 1);
117 assert_string_equal(multis[0].name, "abc");
118 assert_int_equal(multis[0].band, inxes[BANDINDEX_80] | inxes[BANDINDEX_160]);
119 }
120
121
122 /* helpers for check of loading of possible mults */
test_write_mult(void ** state)123 void test_write_mult(void **state) {
124 FILE *fp;
125 char buffer[100];
126
127 buffer[0] = '\0';
128 write_testfile(testfile, "Hallo");
129 fp = fopen(testfile, "r");
130 assert_non_null(fp);
131 char *p = fgets(buffer, sizeof(buffer), fp);
132 assert_ptr_equal(p, buffer);
133 assert_string_equal(buffer, "Hallo");
134 }
135
136
137 /* helper for checking content of mults_possible array */
check_multi(int pos,char * str)138 void check_multi(int pos, char * str) {
139 assert_string_equal(get_mult(pos), str);
140 }
141
142 /* tests for load_multipliers */
test_load_multi_no_file(void ** state)143 void test_load_multi_no_file(void **state) {
144 assert_int_equal(init_and_load_multipliers(), 0);
145 assert_int_equal(get_mult_count(), 0);
146 }
147
148 /** \todo better would be to return -1 if multsfile could not be found */
test_load_multi_file_not_found(void ** state)149 void test_load_multi_file_not_found(void **state) {
150 strcpy(multsfile, "nonsense");
151 assert_int_equal(init_and_load_multipliers(), 0);
152 }
153
test_load_multi(void ** state)154 void test_load_multi(void **state) {
155 setup_multis("AB\n#LZ is not active\nKL\n \nZH\n");
156 assert_int_equal(get_mult_count(), 3);
157 check_multi(0, "AB");
158 check_multi(2, "ZH");
159 }
160
test_load_multi_dos(void ** state)161 void test_load_multi_dos(void **state) {
162 setup_multis("AB\r\n#LZ is not active\r\nKL\r\n \r\nZH\r\n");
163 assert_int_equal(get_mult_count(), 3);
164 check_multi(0, "AB");
165 check_multi(2, "ZH");
166 }
167
168 // leading space both on comment and data lines
test_load_multi_leading_space(void ** state)169 void test_load_multi_leading_space(void **state) {
170 setup_multis(" AB\n #LZ is not active\nKL\n \nZH\n");
171 assert_int_equal(get_mult_count(), 3);
172 check_multi(0, "AB");
173 check_multi(2, "ZH");
174 }
175
test_load_multi_sorted(void ** state)176 void test_load_multi_sorted(void **state) {
177 setup_multis("AB\n#LZ is not active\nZH\n \nKL\n");
178 assert_int_equal(get_mult_count(), 3);
179 check_multi(0, "AB");
180 check_multi(2, "ZH");
181 }
182
test_load_multi_redefined(void ** state)183 void test_load_multi_redefined(void **state) {
184 setup_multis("AB\nKL\nZH\nKL\n");
185 assert_int_equal(get_mult_count(), 3);
186 check_multi(0, "AB");
187 check_multi(2, "ZH");
188 }
189
190
test_load_multi_with_emptyalias(void ** state)191 void test_load_multi_with_emptyalias(void **state) {
192 setup_multis("AB\nZH :\nZH\nKL\n");
193 assert_int_equal(get_mult_count(), 3);
194 check_multi(0, "AB");
195 check_multi(2, "ZH");
196 assert_int_equal(g_slist_length(get_aliases(2)), 0);
197 }
198
test_load_multi_with_alias(void ** state)199 void test_load_multi_with_alias(void **state) {
200 setup_multis("AB\nZH: NH, ZD,AA\nZH\nKL\n");
201 assert_int_equal(get_mult_count(), 3);
202 check_multi(0, "AB");
203 check_multi(2, "ZH");
204 assert_int_equal(g_slist_length(get_aliases(2)), 3);
205 }
206
207 /* test matching of mults and aliases */
test_match_length_no_match(void ** state)208 void test_match_length_no_match(void **state) {
209 setup_multis("ZH:NHA,ZDL,AA,AAC\n");
210 assert_int_equal(get_matching_length("ABC",0), 0);
211 }
212
test_match_length_match_mult(void ** state)213 void test_match_length_match_mult(void **state) {
214 setup_multis("ZH:NHA,ZDL,AA,AAC\n");
215 assert_int_equal(get_matching_length("12aZHXc",0), 2);
216 }
217
test_match_length_match_alias(void ** state)218 void test_match_length_match_alias(void **state) {
219 setup_multis("ZH:NHA,ZDL,AA,AAC\n");
220 assert_int_equal(get_matching_length("12aAAX2",0), 2);
221 }
222
test_match_length_match_alias2(void ** state)223 void test_match_length_match_alias2(void **state) {
224 setup_multis("ZH:NHA,ZDL,AA,AAC\n");
225 assert_int_equal(get_matching_length("12aAAC2",0), 3);
226 }
227
228
229 /* addmult tests */
test_wysiwyg_once(void ** state)230 void test_wysiwyg_once(void **state) {
231 wysiwyg_once = 1;
232 strcpy(comment, "WAC ");
233 assert_int_equal(addmult(), 0);
234 assert_string_equal(multis[0].name, "WAC");
235 assert_int_equal(shownewmult, 0);
236 }
237
test_wysiwyg_multi(void ** state)238 void test_wysiwyg_multi(void **state) {
239 wysiwyg_multi = 1;
240 strcpy(comment, "WAC ");
241 assert_int_equal(addmult(), 0);
242 assert_string_equal(multis[0].name, "WAC");
243 assert_int_equal(shownewmult, 0);
244 }
245
test_wysiwyg_multi_empty(void ** state)246 void test_wysiwyg_multi_empty(void **state) {
247 wysiwyg_multi = 1;
248 strcpy(comment, " ");
249 addmult();
250 assert_int_equal(shownewmult, -1);
251 }
252
test_serial_grid4(void ** state)253 void test_serial_grid4(void **state) {
254 serial_grid4_mult = 1;
255 strcpy(section, "JO60LX");
256 assert_int_equal(addmult(), 0);
257 assert_string_equal(multis[0].name, "JO60");
258 assert_int_equal(shownewmult, 0);
259 }
260
261
test_serial_grid4_empty(void ** state)262 void test_serial_grid4_empty(void **state) {
263 serial_grid4_mult = 1;
264 addmult();
265 assert_int_equal(shownewmult, -1);
266 }
267
test_arrlss(void ** state)268 void test_arrlss(void **state) {
269 arrlss = 1;
270 setup_multis("SC\nSCV\n");
271 strcpy(ssexchange, "SCV");
272 addmult();
273 strcpy(ssexchange, "97A23SCV");
274 addmult();
275 strcpy(ssexchange, "KL");
276 addmult();
277 strcpy(ssexchange, "SC");
278 addmult();
279 assert_int_equal(nr_multis, 2);
280 assert_string_equal(multis[0].name, "SCV");
281 assert_string_equal(multis[1].name, "SC");
282 }
283
test_serial_section_mult(void ** state)284 void test_serial_section_mult(void **state) {
285 serial_section_mult = 1;
286 setup_multis("NE\nONE\n");
287 strcpy(ssexchange, "ONE");
288 addmult();
289 strcpy(ssexchange, "023");
290 addmult();
291 strcpy(ssexchange, "NE");
292 addmult();
293 strcpy(ssexchange, "SC");
294 addmult();
295 assert_int_equal(nr_multis, 2);
296 }
297
test_dx_arrlsections(void ** state)298 void test_dx_arrlsections(void **state) {
299 dx_arrlsections = 1;
300 countrynr = w_cty;
301 setup_multis("NE\nONE\n");
302 strcpy(ssexchange, "ONE");
303 addmult();
304 strcpy(ssexchange, "97A23SCV");
305 addmult();
306 strcpy(ssexchange, "NE");
307 addmult();
308 strcpy(ssexchange, "SC");
309 addmult();
310 assert_int_equal(nr_multis, 2);
311 }
312
313
314 /* addmult2 tests */
315 char logline[] =
316 " 20CW 08-Feb-11 17:06 0025 W3ND 599 599 95 A 12 SCV 2 ";
317
318 char logline_2[] =
319 " 20CW 08-Feb-11 17:06 0025 W3ND 599 599 WAC 2 ";
320
test_arrlss_2(void ** state)321 void test_arrlss_2(void **state) {
322 arrlss = 1;
323 setup_multis("SC\nSCV\n");
324 strcpy(lan_logline, logline);
325 addmult2();
326 memcpy(lan_logline + 54, " 97 A 23 SCV", 12);
327 addmult2();
328 memcpy(lan_logline + 63, "KL ", 3);
329 addmult2();
330 memcpy(lan_logline + 63, "SC ", 3);
331 addmult2();
332 assert_int_equal(nr_multis, 2);
333 assert_string_equal(multis[0].name, "SCV");
334 assert_string_equal(multis[1].name, "SC");
335 }
336
test_wysiwyg_once_2(void ** state)337 void test_wysiwyg_once_2(void **state) {
338 wysiwyg_once = 1;
339 strcpy(lan_logline, logline_2);
340 assert_int_equal(addmult2(), 0);
341 assert_string_equal(multis[0].name, "WAC");
342 assert_int_equal(shownewmult, 0);
343 }
344
345
test_wysiwyg_multi_2(void ** state)346 void test_wysiwyg_multi_2(void **state) {
347 wysiwyg_multi = 1;
348 strcpy(lan_logline, logline_2);
349 assert_int_equal(addmult2(), 0);
350 assert_string_equal(multis[0].name, "WAC");
351 assert_int_equal(shownewmult, 0);
352 }
353
354
355