qapi: Add some enum tests

Demonstrate that the qapi generator doesn't deal well with enums
that aren't up to par. Later patches will update the expected
results as the generator is made stricter.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
Eric Blake 2015-05-04 09:05:03 -06:00 committed by Markus Armbruster
parent fe2a9303c9
commit ad11dbb937
37 changed files with 66 additions and 1 deletions

View File

@ -207,7 +207,11 @@ $(foreach target,$(SYSEMU_TARGET_LIST), \
$(eval check-qtest-$(target)-y += tests/qom-test$(EXESUF))))
check-qapi-schema-y := $(addprefix tests/qapi-schema/, \
comments.json empty.json funny-char.json indented-expr.json \
comments.json empty.json enum-empty.json enum-missing-data.json \
enum-wrong-data.json enum-int-member.json enum-dict-member.json \
enum-clash-member.json enum-max-member.json enum-union-clash.json \
enum-bad-name.json \
funny-char.json indented-expr.json \
missing-colon.json missing-comma-list.json \
missing-comma-object.json non-objects.json \
qapi-schema-test.json quoted-structural-chars.json \

View File

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,2 @@
# FIXME: we should ensure all enum names can map to C
{ 'enum': 'MyEnum', 'data': [ 'not^possible' ] }

View File

@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', ['not^possible'])])]
[{'enum_name': 'MyEnum', 'enum_values': ['not^possible']}]
[]

View File

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,2 @@
# FIXME: we should reject enums where members will clash when mapped to C enum
{ 'enum': 'MyEnum', 'data': [ 'one', 'ONE' ] }

View File

@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', ['one', 'ONE'])])]
[{'enum_name': 'MyEnum', 'enum_values': ['one', 'ONE']}]
[]

View File

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,2 @@
# FIXME: we should reject any enum member that is not a string
{ 'enum': 'MyEnum', 'data': [ { 'value': 'str' } ] }

View File

@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', [OrderedDict([('value', 'str')])])])]
[{'enum_name': 'MyEnum', 'enum_values': [OrderedDict([('value', 'str')])]}]
[]

View File

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,2 @@
# An empty enum, although unusual, is currently acceptable
{ 'enum': 'MyEnum', 'data': [ ] }

View File

@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', [])])]
[{'enum_name': 'MyEnum', 'enum_values': []}]
[]

View File

@ -0,0 +1 @@
tests/qapi-schema/enum-int-member.json:3:31: Stray "1"

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,3 @@
# we reject any enum member that is not a string
# FIXME: once the parser understands integer inputs, improve the error message
{ 'enum': 'MyEnum', 'data': [ 1 ] }

View File

View File

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,3 @@
# FIXME: we should reject user-supplied 'max' for clashing with implicit enum end
# TODO: should we instead munge the implicit value to avoid the clash?
{ 'enum': 'MyEnum', 'data': [ 'max' ] }

View File

@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', ['max'])])]
[{'enum_name': 'MyEnum', 'enum_values': ['max']}]
[]

View File

@ -0,0 +1,6 @@
Traceback (most recent call last):
File "tests/qapi-schema/test-qapi.py", line 19, in <module>
exprs = parse_schema(sys.argv[1])
File "scripts/qapi.py", line 334, in parse_schema
add_enum(expr['enum'], expr['data'])
KeyError: 'data'

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,2 @@
# FIXME: we should require that all QAPI enums have a data array
{ 'enum': 'MyEnum' }

View File

View File

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,4 @@
# FIXME: we should reject types that would conflict with implicit union enum
{ 'enum': 'UnionKind', 'data': [ 'oops' ] }
{ 'union': 'Union',
'data': { 'a': 'int' } }

View File

@ -0,0 +1,5 @@
[OrderedDict([('enum', 'UnionKind'), ('data', ['oops'])]),
OrderedDict([('union', 'Union'), ('data', OrderedDict([('a', 'int')]))])]
[{'enum_name': 'UnionKind', 'enum_values': ['oops']},
{'enum_name': 'UnionKind', 'enum_values': None}]
[]

View File

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,2 @@
# FIXME: we should require that all qapi enums have an array for data
{ 'enum': 'MyEnum', 'data': { 'value': 'str' } }

View File

@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', OrderedDict([('value', 'str')]))])]
[{'enum_name': 'MyEnum', 'enum_values': OrderedDict([('value', 'str')])}]
[]