1 /* t-recsel.c - Module test for recsel.c
2 * Copyright (C) 2016 Werner Koch
4 * This file is part of GnuPG.
6 * GnuPG is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * GnuPG is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
29 #define PGM "t-recsel"
31 #define pass() do { ; } while(0)
32 #define fail(a,e) do { log_error ("line %d: test %d failed: %s\n", \
33 __LINE__, (a), gpg_strerror ((e))); \
41 #define FREEEXPR() do { recsel_release (se); se = NULL; } while (0)
42 #define ADDEXPR(a) do { \
43 err = recsel_parse_expr (&se, (a)); \
50 test_1_getval (void *cookie, const char *name)
52 if (strcmp (name, "uid"))
60 static const char *expr[] = {
67 recsel_expr_t se = NULL;
70 for (i=0; i < DIM (expr); i++)
72 err = recsel_parse_expr (&se, expr[i]);
80 /* The example from recsel.c in several variants. */
81 if (!recsel_select (se, test_1_getval, "Alfa"))
83 if (!recsel_select (se, test_1_getval, "Alpha"))
85 if (recsel_select (se, test_1_getval, "Alfa Test"))
87 if (recsel_select (se, test_1_getval, "Alpha Test"))
90 /* Some modified versions from above. */
91 if (!recsel_select (se, test_1_getval, " AlfA Tes"))
93 if (!recsel_select (se, test_1_getval, " AlfA Tes "))
95 if (!recsel_select (se, test_1_getval, " Tes AlfA"))
97 if (!recsel_select (se, test_1_getval, "TesAlfA"))
101 if (recsel_select (se, NULL, NULL))
103 if (recsel_select (se, test_1_getval, NULL))
105 if (recsel_select (se, test_1_getval, ""))
112 /* Same as test1 but using a combined expression.. */
117 recsel_expr_t se = NULL;
119 err = recsel_parse_expr
120 (&se, "uid =~ Alfa && uid !~ Test || uid =~ Alpha && uid !~ Test" );
127 /* The example from recsel.c in several variants. */
128 if (!recsel_select (se, test_1_getval, "Alfa"))
130 if (!recsel_select (se, test_1_getval, "Alpha"))
132 if (recsel_select (se, test_1_getval, "Alfa Test"))
134 if (recsel_select (se, test_1_getval, "Alpha Test"))
137 /* Some modified versions from above. */
138 if (!recsel_select (se, test_1_getval, " AlfA Tes"))
140 if (!recsel_select (se, test_1_getval, " AlfA Tes "))
142 if (!recsel_select (se, test_1_getval, " Tes AlfA"))
144 if (!recsel_select (se, test_1_getval, "TesAlfA"))
148 if (recsel_select (se, NULL, NULL))
150 if (recsel_select (se, test_1_getval, NULL))
152 if (recsel_select (se, test_1_getval, ""))
160 test_2_getval (void *cookie, const char *name)
162 if (!strcmp (name, "uid"))
163 return "foo@example.org";
164 else if (!strcmp (name, "keyid"))
166 else if (!strcmp (name, "zero"))
168 else if (!strcmp (name, "one"))
170 else if (!strcmp (name, "blanks"))
172 else if (!strcmp (name, "letters"))
182 recsel_expr_t se = NULL;
184 ADDEXPR ("uid = foo@example.org");
185 if (!recsel_select (se, test_2_getval, NULL))
188 ADDEXPR ("uid = Foo@example.org");
189 if (!recsel_select (se, test_2_getval, NULL))
192 ADDEXPR ("-c uid = Foo@example.org");
193 if (recsel_select (se, test_2_getval, NULL))
197 ADDEXPR ("uid =~ foo@example.org");
198 if (!recsel_select (se, test_2_getval, NULL))
201 ADDEXPR ("uid =~ Foo@example.org");
202 if (!recsel_select (se, test_2_getval, NULL))
205 ADDEXPR ("-c uid =~ Foo@example.org");
206 if (recsel_select (se, test_2_getval, NULL))
210 ADDEXPR ("uid !~ foo@example.org");
211 if (recsel_select (se, test_2_getval, NULL))
214 ADDEXPR ("uid !~ Foo@example.org");
215 if (recsel_select (se, test_2_getval, NULL))
218 ADDEXPR ("-c uid !~ Foo@example.org");
219 if (!recsel_select (se, test_2_getval, NULL))
223 ADDEXPR ("uid =~ @");
224 if (!recsel_select (se, test_2_getval, NULL))
227 ADDEXPR ("uid =~ @");
228 if (!recsel_select (se, test_2_getval, NULL))
232 ADDEXPR ("keyid == 0x12345678");
233 if (!recsel_select (se, test_2_getval, NULL))
236 ADDEXPR ("keyid != 0x12345678");
237 if (recsel_select (se, test_2_getval, NULL))
240 ADDEXPR ("keyid >= 0x12345678");
241 if (!recsel_select (se, test_2_getval, NULL))
244 ADDEXPR ("keyid <= 0x12345678");
245 if (!recsel_select (se, test_2_getval, NULL))
248 ADDEXPR ("keyid > 0x12345677");
249 if (!recsel_select (se, test_2_getval, NULL))
252 ADDEXPR ("keyid < 0x12345679");
253 if (!recsel_select (se, test_2_getval, NULL))
257 ADDEXPR ("keyid > 0x12345678");
258 if (recsel_select (se, test_2_getval, NULL))
261 ADDEXPR ("keyid < 0x12345678");
262 if (recsel_select (se, test_2_getval, NULL))
268 if (!recsel_select (se, test_2_getval, NULL))
272 if (recsel_select (se, test_2_getval, NULL))
276 ADDEXPR ("nothing -z");
277 if (!recsel_select (se, test_2_getval, NULL))
280 ADDEXPR ("nothing -n");
281 if (recsel_select (se, test_2_getval, NULL))
285 ADDEXPR ("blanks -n");
286 if (!recsel_select (se, test_2_getval, NULL))
289 ADDEXPR ("blanks -z");
290 if (recsel_select (se, test_2_getval, NULL))
294 ADDEXPR ("letters -n");
295 if (!recsel_select (se, test_2_getval, NULL))
298 ADDEXPR ("letters -z");
299 if (recsel_select (se, test_2_getval, NULL))
304 ADDEXPR ("nothing -f");
305 if (!recsel_select (se, test_2_getval, NULL))
308 ADDEXPR ("nothing -t");
309 if (recsel_select (se, test_2_getval, NULL))
314 if (!recsel_select (se, test_2_getval, NULL))
318 if (recsel_select (se, test_2_getval, NULL))
323 if (!recsel_select (se, test_2_getval, NULL))
327 if (recsel_select (se, test_2_getval, NULL))
331 ADDEXPR ("blanks -f");
332 if (!recsel_select (se, test_2_getval, NULL))
335 ADDEXPR ("blanks -t");
336 if (recsel_select (se, test_2_getval, NULL))
340 ADDEXPR ("letter -f");
341 if (!recsel_select (se, test_2_getval, NULL))
344 ADDEXPR ("letters -t");
345 if (recsel_select (se, test_2_getval, NULL))
355 main (int argc, char **argv)
359 log_set_prefix (PGM, GPGRT_LOG_WITH_PREFIX);
360 init_common_subsystems (&argc, &argv);
364 while (argc && last_argc != argc )
367 if (!strcmp (*argv, "--"))
372 else if (!strcmp (*argv, "--help"))
374 fputs ("usage: " PGM " [options]\n"
376 " --verbose print timings etc.\n"
377 " --debug flyswatter\n",
381 else if (!strcmp (*argv, "--verbose"))
386 else if (!strcmp (*argv, "--debug"))
392 else if (!strncmp (*argv, "--", 2))
394 log_error ("unknown option '%s'\n", *argv);
402 /* Fixme: We should add test for complex conditions. */