diff options
author | Werner Koch <wk@gnupg.org> | 2016-06-11 12:09:48 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2016-06-11 12:09:48 +0200 |
commit | 5ba99d9302cd86aee99958b71075d5288bb430aa (patch) | |
tree | 6f89e234b72937ffddcde93772f71b30036c2012 /common/t-stringhelp.c | |
parent | g10: Export cleartext keys as cleartext (diff) | |
download | gnupg2-5ba99d9302cd86aee99958b71075d5288bb430aa.tar.xz gnupg2-5ba99d9302cd86aee99958b71075d5288bb430aa.zip |
common: New function split_fields.
* common/stringhelp.c (split_fields): New.
* common/t-stringhelp.c: Include assert.h.
(test_split_fields): New.
(main): Call test.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'common/t-stringhelp.c')
-rw-r--r-- | common/t-stringhelp.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/common/t-stringhelp.c b/common/t-stringhelp.c index b4a41ac39..db0e811d7 100644 --- a/common/t-stringhelp.c +++ b/common/t-stringhelp.c @@ -34,6 +34,7 @@ #include <stdlib.h> #include <string.h> #include <errno.h> +#include <assert.h> #ifdef HAVE_PWD_H # include <pwd.h> #endif @@ -676,6 +677,82 @@ test_strtokenize (void) } } + +static void +test_split_fields (void) +{ + struct { + const char *s; + int nfields; + const char *fields_expected[10]; + } tv[] = { + { + "a bc cde fghi jklmn foo ", 6, + { "a", "bc", "cde", "fghi", "jklmn", "foo", NULL } + }, + { + " a bc def ", 2, + { "a", "bc", "def", NULL } + }, + { + " a bc def ", 3, + { "a", "bc", "def", NULL } + }, + { + " a bc def ", 4, + { "a", "bc", "def", NULL } + }, + { + "", 0, + { NULL } + } + }; + + int tidx; + char *fields[10]; + int field_count_expected, nfields, field_count, i; + char *s2; + + for (tidx = 0; tidx < DIM(tv); tidx++) + { + nfields = tv[tidx].nfields; + assert (nfields <= DIM (fields)); + + /* Count the fields. */ + for (field_count_expected = 0; + tv[tidx].fields_expected[field_count_expected]; + field_count_expected ++) + ; + if (field_count_expected > nfields) + field_count_expected = nfields; + + /* We need to copy s since split_fields modifies in place. */ + s2 = xstrdup (tv[tidx].s); + field_count = split_fields (s2, fields, nfields); + + if (field_count != field_count_expected) + { + printf ("%s: tidx %d: expected %d, got %d\n", + __func__, tidx, i, field_count_expected, field_count); + fail (tidx * 1000); + } + else + { + for (i = 0; i < field_count_expected; i ++) + if (strcmp (tv[tidx].fields_expected[i], fields[i])) + { + printf ("%s: tidx %d, field %d: expected '%s', got '%s'\n", + __func__, + tidx, i, tv[tidx].fields_expected[i], fields[i]); + fail (tidx * 1000 + i + 1); + } + } + + xfree (s2); + } +} + + static char * stresc (char *s) { @@ -887,6 +964,7 @@ main (int argc, char **argv) test_make_absfilename_try (); test_strsplit (); test_strtokenize (); + test_split_fields (); test_compare_version_strings (); test_format_text (); |