qemu/tests/unit/check-qlit.c
<<
>>
Prefs
   1/*
   2 * QLit unit-tests.
   3 *
   4 * Copyright (C) 2017 Red Hat Inc.
   5 *
   6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
   7 * See the COPYING file in the top-level directory.
   8 */
   9
  10#include "qemu/osdep.h"
  11
  12#include "qapi/qmp/qbool.h"
  13#include "qapi/qmp/qdict.h"
  14#include "qapi/qmp/qlist.h"
  15#include "qapi/qmp/qlit.h"
  16#include "qapi/qmp/qnum.h"
  17#include "qapi/qmp/qstring.h"
  18
  19static QLitObject qlit = QLIT_QDICT(((QLitDictEntry[]) {
  20    { "foo", QLIT_QNUM(42) },
  21    { "bar", QLIT_QSTR("hello world") },
  22    { "baz", QLIT_QNULL },
  23    { "bee", QLIT_QLIST(((QLitObject[]) {
  24        QLIT_QNUM(43),
  25        QLIT_QNUM(44),
  26        QLIT_QBOOL(true),
  27        { },
  28    }))},
  29    { },
  30}));
  31
  32static QLitObject qlit_foo = QLIT_QDICT(((QLitDictEntry[]) {
  33    { "foo", QLIT_QNUM(42) },
  34    { },
  35}));
  36
  37static QObject *make_qobject(void)
  38{
  39    QDict *qdict = qdict_new();
  40    QList *list = qlist_new();
  41
  42    qdict_put_int(qdict, "foo", 42);
  43    qdict_put_str(qdict, "bar", "hello world");
  44    qdict_put_null(qdict, "baz");
  45
  46    qlist_append_int(list, 43);
  47    qlist_append_int(list, 44);
  48    qlist_append_bool(list, true);
  49    qdict_put(qdict, "bee", list);
  50
  51    return QOBJECT(qdict);
  52}
  53
  54static void qlit_equal_qobject_test(void)
  55{
  56    QObject *qobj = make_qobject();
  57
  58    g_assert(qlit_equal_qobject(&qlit, qobj));
  59
  60    g_assert(!qlit_equal_qobject(&qlit_foo, qobj));
  61
  62    qdict_put(qobject_to(QDict, qobj), "bee", qlist_new());
  63    g_assert(!qlit_equal_qobject(&qlit, qobj));
  64
  65    qobject_unref(qobj);
  66}
  67
  68static void qobject_from_qlit_test(void)
  69{
  70    QObject *obj, *qobj = qobject_from_qlit(&qlit);
  71    QDict *qdict;
  72    QList *bee;
  73
  74    qdict = qobject_to(QDict, qobj);
  75    g_assert_cmpint(qdict_get_int(qdict, "foo"), ==, 42);
  76    g_assert_cmpstr(qdict_get_str(qdict, "bar"), ==, "hello world");
  77    g_assert(qobject_type(qdict_get(qdict, "baz")) == QTYPE_QNULL);
  78
  79    bee = qdict_get_qlist(qdict, "bee");
  80    obj = qlist_pop(bee);
  81    g_assert_cmpint(qnum_get_int(qobject_to(QNum, obj)), ==, 43);
  82    qobject_unref(obj);
  83    obj = qlist_pop(bee);
  84    g_assert_cmpint(qnum_get_int(qobject_to(QNum, obj)), ==, 44);
  85    qobject_unref(obj);
  86    obj = qlist_pop(bee);
  87    g_assert(qbool_get_bool(qobject_to(QBool, obj)));
  88    qobject_unref(obj);
  89
  90    qobject_unref(qobj);
  91}
  92
  93int main(int argc, char **argv)
  94{
  95    g_test_init(&argc, &argv, NULL);
  96
  97    g_test_add_func("/qlit/equal_qobject", qlit_equal_qobject_test);
  98    g_test_add_func("/qlit/qobject_from_qlit", qobject_from_qlit_test);
  99
 100    return g_test_run();
 101}
 102