From nobody Wed Nov 5 16:36:21 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1535139839379825.4783756340986; Fri, 24 Aug 2018 12:43:59 -0700 (PDT) Received: from localhost ([::1]:43240 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ftHzy-0004wF-4c for importer@patchew.org; Fri, 24 Aug 2018 15:43:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33191) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ftHoi-0002HX-5A for qemu-devel@nongnu.org; Fri, 24 Aug 2018 15:32:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ftHoe-0001ds-1W for qemu-devel@nongnu.org; Fri, 24 Aug 2018 15:32:19 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:38840 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ftHob-0001ZY-Uc for qemu-devel@nongnu.org; Fri, 24 Aug 2018 15:32:14 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 29B9E402383E for ; Fri, 24 Aug 2018 19:32:10 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-97.ams2.redhat.com [10.36.116.97]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DE7BB621BE for ; Fri, 24 Aug 2018 19:32:09 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id C1DB3113292B; Fri, 24 Aug 2018 21:32:06 +0200 (CEST) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Fri, 24 Aug 2018 21:31:24 +0200 Message-Id: <20180824193206.25475-17-armbru@redhat.com> In-Reply-To: <20180824193206.25475-1-armbru@redhat.com> References: <20180824193206.25475-1-armbru@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Fri, 24 Aug 2018 19:32:10 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Fri, 24 Aug 2018 19:32:10 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'armbru@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PULL 16/58] check-qjson: Cover interpolation more thoroughly X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Markus Armbruster Reviewed-by: Eric Blake Message-Id: <20180823164025.12553-17-armbru@redhat.com> --- tests/check-qjson.c | 166 +++++++++++++++++++++++++++----------------- 1 file changed, 102 insertions(+), 64 deletions(-) diff --git a/tests/check-qjson.c b/tests/check-qjson.c index a586189d87..1688b2f5c1 100644 --- a/tests/check-qjson.c +++ b/tests/check-qjson.c @@ -876,30 +876,6 @@ static void utf8_string(void) } } =20 -static void vararg_string(void) -{ - int i; - struct { - const char *decoded; - } test_cases[] =3D { - { "hello world" }, - { "the quick brown fox jumped over the fence" }, - {} - }; - - for (i =3D 0; test_cases[i].decoded; i++) { - QString *str; - - str =3D qobject_to(QString, - qobject_from_jsonf_nofail("%s", - test_cases[i].decoded)); - g_assert(str); - g_assert(strcmp(qstring_get_str(str), test_cases[i].decoded) =3D= =3D 0); - - qobject_unref(str); - } -} - static void simple_number(void) { int i; @@ -1017,29 +993,6 @@ static void float_number(void) } } =20 -static void vararg_number(void) -{ - QNum *qnum; - int value =3D 0x2342; - long long value_ll =3D 0x2342342343LL; - double valuef =3D 2.323423423; - int64_t val; - - qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%d", value)); - g_assert(qnum_get_try_int(qnum, &val)); - g_assert_cmpint(val, =3D=3D, value); - qobject_unref(qnum); - - qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%lld", value_ll)); - g_assert(qnum_get_try_int(qnum, &val)); - g_assert_cmpint(val, =3D=3D, value_ll); - qobject_unref(qnum); - - qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%f", valuef)); - g_assert(qnum_get_double(qnum) =3D=3D valuef); - qobject_unref(qnum); -} - static void keyword_literal(void) { QObject *obj; @@ -1069,17 +1022,6 @@ static void keyword_literal(void) =20 qobject_unref(qbool); =20 - qbool =3D qobject_to(QBool, qobject_from_jsonf_nofail("%i", false)); - g_assert(qbool); - g_assert(qbool_get_bool(qbool) =3D=3D false); - qobject_unref(qbool); - - /* Test that non-zero values other than 1 get collapsed to true */ - qbool =3D qobject_to(QBool, qobject_from_jsonf_nofail("%i", 2)); - g_assert(qbool); - g_assert(qbool_get_bool(qbool) =3D=3D true); - qobject_unref(qbool); - obj =3D qobject_from_json("null", &error_abort); g_assert(obj !=3D NULL); g_assert(qobject_type(obj) =3D=3D QTYPE_QNULL); @@ -1091,6 +1033,101 @@ static void keyword_literal(void) qobject_unref(null); } =20 +static void interpolation_valid(void) +{ + long long value_lld =3D 0x123456789abcdefLL; + long value_ld =3D (long)value_lld; + int value_d =3D (int)value_lld; + unsigned long long value_llu =3D 0xfedcba9876543210ULL; + unsigned long value_lu =3D (unsigned long)value_llu; + unsigned value_u =3D (unsigned)value_llu; + double value_f =3D 2.323423423; + const char *value_s =3D "hello world"; + QObject *value_p =3D QOBJECT(qnull()); + QBool *qbool; + QNum *qnum; + QString *qstr; + QObject *qobj; + + /* bool */ + + qbool =3D qobject_to(QBool, qobject_from_jsonf_nofail("%i", false)); + g_assert(qbool); + g_assert(qbool_get_bool(qbool) =3D=3D false); + qobject_unref(qbool); + + /* Test that non-zero values other than 1 get collapsed to true */ + qbool =3D qobject_to(QBool, qobject_from_jsonf_nofail("%i", 2)); + g_assert(qbool); + g_assert(qbool_get_bool(qbool) =3D=3D true); + qobject_unref(qbool); + + /* number */ + + qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%d", value_d)); + g_assert_cmpint(qnum_get_int(qnum), =3D=3D, value_d); + qobject_unref(qnum); + + qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%ld", value_ld)); + g_assert_cmpint(qnum_get_int(qnum), =3D=3D, value_ld); + qobject_unref(qnum); + + qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%lld", value_lld)= ); + g_assert_cmpint(qnum_get_int(qnum), =3D=3D, value_lld); + qobject_unref(qnum); + + qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%u", value_u)); + g_assert_cmpuint(qnum_get_uint(qnum), =3D=3D, value_u); + qobject_unref(qnum); + + qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%lu", value_lu)); + g_assert_cmpuint(qnum_get_uint(qnum), =3D=3D, value_lu); + qobject_unref(qnum); + + qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%llu", value_llu)= ); + g_assert_cmpuint(qnum_get_uint(qnum), =3D=3D, value_llu); + qobject_unref(qnum); + + qnum =3D qobject_to(QNum, qobject_from_jsonf_nofail("%f", value_f)); + g_assert(qnum_get_double(qnum) =3D=3D value_f); + qobject_unref(qnum); + + /* string */ + + qstr =3D qobject_to(QString, + qobject_from_jsonf_nofail("%s", value_s)); + g_assert_cmpstr(qstring_get_try_str(qstr), =3D=3D, value_s); + qobject_unref(qstr); + + /* object */ + + qobj =3D qobject_from_jsonf_nofail("%p", value_p); + g_assert(qobj =3D=3D value_p); +} + +static void interpolation_unknown(void) +{ + if (g_test_subprocess()) { + qobject_from_jsonf_nofail("%x", 666); + } + g_test_trap_subprocess(NULL, 0, 0); + g_test_trap_assert_failed(); +} + +static void interpolation_string(void) +{ + QLitObject decoded =3D QLIT_QLIST(((QLitObject[]){ + QLIT_QSTR("%s"), + QLIT_QSTR("eins"), + {}})); + QObject *qobj; + + /* Dangerous misfeature: % is silently ignored in strings */ + qobj =3D qobject_from_jsonf_nofail("['%s', %s]", "eins", "zwei"); + g_assert(qlit_equal_qobject(&decoded, qobj)); + qobject_unref(qobj); +} + static void simple_dict(void) { int i; @@ -1309,7 +1346,7 @@ static void simple_whitespace(void) } } =20 -static void simple_varargs(void) +static void simple_interpolation(void) { QObject *embedded_obj; QObject *obj; @@ -1506,22 +1543,23 @@ int main(int argc, char **argv) g_test_add_func("/literals/string/escaped", escaped_string); g_test_add_func("/literals/string/quotes", string_with_quotes); g_test_add_func("/literals/string/utf8", utf8_string); - g_test_add_func("/literals/string/vararg", vararg_string); =20 g_test_add_func("/literals/number/simple", simple_number); g_test_add_func("/literals/number/large", large_number); g_test_add_func("/literals/number/float", float_number); - g_test_add_func("/literals/number/vararg", vararg_number); =20 g_test_add_func("/literals/keyword", keyword_literal); =20 + g_test_add_func("/literals/interpolation/valid", interpolation_valid); + g_test_add_func("/literals/interpolation/unkown", interpolation_unknow= n); + g_test_add_func("/literals/interpolation/string", interpolation_string= ); + g_test_add_func("/dicts/simple_dict", simple_dict); g_test_add_func("/dicts/large_dict", large_dict); g_test_add_func("/lists/simple_list", simple_list); =20 - g_test_add_func("/whitespace/simple_whitespace", simple_whitespace); - - g_test_add_func("/varargs/simple_varargs", simple_varargs); + g_test_add_func("/mixed/simple_whitespace", simple_whitespace); + g_test_add_func("/mixed/interpolation", simple_interpolation); =20 g_test_add_func("/errors/empty", empty_input); g_test_add_func("/errors/blank", blank_input); --=20 2.17.1