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 <https://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"))
174 else if (!strcmp (name, "str1"))
184 recsel_expr_t se = NULL;
186 ADDEXPR ("uid = foo@example.org");
187 if (!recsel_select (se, test_2_getval, NULL))
190 ADDEXPR ("uid = Foo@example.org");
191 if (!recsel_select (se, test_2_getval, NULL))
194 ADDEXPR ("-c uid = Foo@example.org");
195 if (recsel_select (se, test_2_getval, NULL))
199 ADDEXPR ("uid =~ foo@example.org");
200 if (!recsel_select (se, test_2_getval, NULL))
203 ADDEXPR ("uid =~ Foo@example.org");
204 if (!recsel_select (se, test_2_getval, NULL))
207 ADDEXPR ("-c uid =~ Foo@example.org");
208 if (recsel_select (se, test_2_getval, NULL))
212 ADDEXPR ("uid !~ foo@example.org");
213 if (recsel_select (se, test_2_getval, NULL))
216 ADDEXPR ("uid !~ Foo@example.org");
217 if (recsel_select (se, test_2_getval, NULL))
220 ADDEXPR ("-c uid !~ Foo@example.org");
221 if (!recsel_select (se, test_2_getval, NULL))
225 ADDEXPR ("uid =~ @");
226 if (!recsel_select (se, test_2_getval, NULL))
229 ADDEXPR ("uid =~ @");
230 if (!recsel_select (se, test_2_getval, NULL))
234 ADDEXPR ("keyid == 0x12345678");
235 if (!recsel_select (se, test_2_getval, NULL))
238 ADDEXPR ("keyid != 0x12345678");
239 if (recsel_select (se, test_2_getval, NULL))
242 ADDEXPR ("keyid >= 0x12345678");
243 if (!recsel_select (se, test_2_getval, NULL))
246 ADDEXPR ("keyid <= 0x12345678");
247 if (!recsel_select (se, test_2_getval, NULL))
250 ADDEXPR ("keyid > 0x12345677");
251 if (!recsel_select (se, test_2_getval, NULL))
254 ADDEXPR ("keyid < 0x12345679");
255 if (!recsel_select (se, test_2_getval, NULL))
259 ADDEXPR ("keyid > 0x12345678");
260 if (recsel_select (se, test_2_getval, NULL))
263 ADDEXPR ("keyid < 0x12345678");
264 if (recsel_select (se, test_2_getval, NULL))
269 ADDEXPR ("str1 -gt aa");
270 if (!recsel_select (se, test_2_getval, NULL))
273 ADDEXPR ("str1 -gt aaa");
274 if (recsel_select (se, test_2_getval, NULL))
277 ADDEXPR ("str1 -ge aaa");
278 if (!recsel_select (se, test_2_getval, NULL))
281 ADDEXPR ("str1 -lt aab");
282 if (!recsel_select (se, test_2_getval, NULL))
285 ADDEXPR ("str1 -le aaa");
286 if (!recsel_select (se, test_2_getval, NULL))
290 ADDEXPR ("-c str1 -lt AAB");
291 if (recsel_select (se, test_2_getval, NULL))
294 ADDEXPR ("str1 -lt AAB");
295 if (!recsel_select (se, test_2_getval, NULL))
301 if (!recsel_select (se, test_2_getval, NULL))
305 if (recsel_select (se, test_2_getval, NULL))
309 ADDEXPR ("nothing -z");
310 if (!recsel_select (se, test_2_getval, NULL))
313 ADDEXPR ("nothing -n");
314 if (recsel_select (se, test_2_getval, NULL))
318 ADDEXPR ("blanks -n");
319 if (!recsel_select (se, test_2_getval, NULL))
322 ADDEXPR ("blanks -z");
323 if (recsel_select (se, test_2_getval, NULL))
327 ADDEXPR ("letters -n");
328 if (!recsel_select (se, test_2_getval, NULL))
331 ADDEXPR ("letters -z");
332 if (recsel_select (se, test_2_getval, NULL))
337 ADDEXPR ("nothing -f");
338 if (!recsel_select (se, test_2_getval, NULL))
341 ADDEXPR ("nothing -t");
342 if (recsel_select (se, test_2_getval, NULL))
347 if (!recsel_select (se, test_2_getval, NULL))
351 if (recsel_select (se, test_2_getval, NULL))
356 if (!recsel_select (se, test_2_getval, NULL))
360 if (recsel_select (se, test_2_getval, NULL))
364 ADDEXPR ("blanks -f");
365 if (!recsel_select (se, test_2_getval, NULL))
368 ADDEXPR ("blanks -t");
369 if (recsel_select (se, test_2_getval, NULL))
373 ADDEXPR ("letter -f");
374 if (!recsel_select (se, test_2_getval, NULL))
377 ADDEXPR ("letters -t");
378 if (recsel_select (se, test_2_getval, NULL))
388 main (int argc, char **argv)
392 log_set_prefix (PGM, GPGRT_LOG_WITH_PREFIX);
393 init_common_subsystems (&argc, &argv);
397 while (argc && last_argc != argc )
400 if (!strcmp (*argv, "--"))
405 else if (!strcmp (*argv, "--help"))
407 fputs ("usage: " PGM " [options]\n"
409 " --verbose print timings etc.\n"
410 " --debug flyswatter\n",
414 else if (!strcmp (*argv, "--verbose"))
419 else if (!strcmp (*argv, "--debug"))
425 else if (!strncmp (*argv, "--", 2))
427 log_error ("unknown option '%s'\n", *argv);
435 /* Fixme: We should add test for complex conditions. */