qapi: Test use of 'number' within alternates

Add some testsuite exposure for use of a 'number' as part of
an alternate.  The current state of the tree has a few bugs
exposed by this: our input parser depends on the ordering of
how the qapi schema declared the alternate, and the parser
does not accept integers for a 'number' in an alternate even
though it does for numbers outside of an alternate.

Mixing 'int' and 'number' in the same alternate is unusual,
since both are supplied by json-numbers, but there does not
seem to be a technical reason to forbid it given that our
json lexer distinguishes between json-numbers that can be
represented as an int vs. those that cannot.

Improve the existing test_visitor_in_alternate() to match the
style of the new test_visitor_in_alternate_number(), and to
ensure full coverage of all possible qtype parsing.

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <1443565276-4535-9-git-send-email-eblake@redhat.com>
[Eric's follow-up fixes squashed in]
Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
Eric Blake 2015-09-29 16:21:06 -06:00 committed by Markus Armbruster
parent 8d25dd101f
commit 9c51b44129
3 changed files with 160 additions and 3 deletions

View file

@ -53,6 +53,30 @@ object :obj-user_def_cmd2-arg
object :obj-user_def_cmd3-arg
member a: int optional=False
member b: int optional=True
alternate AltIntNum
case i: int
case n: number
enum AltIntNumKind ['i', 'n']
alternate AltNumInt
case n: number
case i: int
enum AltNumIntKind ['n', 'i']
alternate AltNumStr
case n: number
case s: str
enum AltNumStrKind ['n', 's']
alternate AltStrBool
case s: str
case b: bool
enum AltStrBoolKind ['s', 'b']
alternate AltStrInt
case s: str
case i: int
enum AltStrIntKind ['s', 'i']
alternate AltStrNum
case s: str
case n: number
enum AltStrNumKind ['s', 'n']
event EVENT_A None
event EVENT_B None
event EVENT_C :obj-EVENT_C-arg