On Wed, Jun 15, 2022 at 6:58 PM Steve Sistare <steven.sist...@oracle.com> wrote:
> Signed-off-by: Steve Sistare <steven.sist...@oracle.com> > Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > MAINTAINERS | 1 + > tests/unit/meson.build | 1 + > tests/unit/test-strlist.c | 81 > +++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 83 insertions(+) > create mode 100644 tests/unit/test-strlist.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index 1e4e72f..f9a6362 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -3160,6 +3160,7 @@ F: include/migration/cpr.h > F: migration/cpr.c > F: qapi/cpr.json > F: stubs/cpr.c > +F: tests/unit/test-strlist.c > > Record/replay > M: Pavel Dovgalyuk <pavel.dovga...@ispras.ru> > diff --git a/tests/unit/meson.build b/tests/unit/meson.build > index 287b367..57d48d5 100644 > --- a/tests/unit/meson.build > +++ b/tests/unit/meson.build > @@ -17,6 +17,7 @@ tests = { > 'test-forward-visitor': [testqapi], > 'test-string-input-visitor': [testqapi], > 'test-string-output-visitor': [testqapi], > + 'test-strlist': [testqapi], > 'test-opts-visitor': [testqapi], > 'test-visitor-serialization': [testqapi], > 'test-bitmap': [], > diff --git a/tests/unit/test-strlist.c b/tests/unit/test-strlist.c > new file mode 100644 > index 0000000..ef740dc > --- /dev/null > +++ b/tests/unit/test-strlist.c > @@ -0,0 +1,81 @@ > +/* > + * Copyright (c) 2022 Oracle and/or its affiliates. > + * > + * This work is licensed under the terms of the GNU GPL, version 2. > + * See the COPYING file in the top-level directory. > + */ > + > +#include "qemu/osdep.h" > +#include "qapi/util.h" > +#include "qapi/qapi-builtin-types.h" > + > +static strList *make_list(int length) > +{ > + strList *head = 0, *list, **prev = &head; > + > + while (length--) { > + list = *prev = g_new0(strList, 1); > + list->value = g_strdup("aaa"); > + prev = &list->next; > + } > + return head; > +} > + > +static void test_length(void) > +{ > + strList *list; > + int i; > + > + for (i = 0; i < 5; i++) { > + list = make_list(i); > + g_assert_cmpint(i, ==, QAPI_LIST_LENGTH(list)); > + qapi_free_strList(list); > + } > +} > + > +struct { > + const char *string; > + char delim; > + const char *args[5]; > +} list_data[] = { > + { 0, ',', { 0 } }, > + { "", ',', { 0 } }, > + { "a", ',', { "a", 0 } }, > + { "a,b", ',', { "a", "b", 0 } }, > + { "a,b,c", ',', { "a", "b", "c", 0 } }, > + { "first last", ' ', { "first", "last", 0 } }, > + { "a:", ':', { "a", 0 } }, > + { "a::b", ':', { "a", "", "b", 0 } }, > + { ":", ':', { "", 0 } }, > + { ":a", ':', { "", "a", 0 } }, > + { "::a", ':', { "", "", "a", 0 } }, > +}; > + > +static void test_strv(void) > +{ > + int i, j; > + const char **expect; > + strList *list; > + GStrv args; > + > + for (i = 0; i < ARRAY_SIZE(list_data); i++) { > + expect = list_data[i].args; > + list = strList_from_string(list_data[i].string, > list_data[i].delim); > + args = strv_from_strList(list); > + qapi_free_strList(list); > + for (j = 0; expect[j] && args[j]; j++) { > + g_assert_cmpstr(expect[j], ==, args[j]); > + } > + g_assert_null(expect[j]); > + g_assert_null(args[j]); > + g_strfreev(args); > + } > +} > + > +int main(int argc, char **argv) > +{ > + g_test_init(&argc, &argv, NULL); > + g_test_add_func("/test-string/length", test_length); > + g_test_add_func("/test-string/strv", test_strv); > + return g_test_run(); > +} > -- > 1.8.3.1 > > > -- Marc-André Lureau