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:
parent
fe2a9303c9
commit
ad11dbb937
@ -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 \
|
||||
|
0
tests/qapi-schema/enum-bad-name.err
Normal file
0
tests/qapi-schema/enum-bad-name.err
Normal file
1
tests/qapi-schema/enum-bad-name.exit
Normal file
1
tests/qapi-schema/enum-bad-name.exit
Normal file
@ -0,0 +1 @@
|
||||
0
|
2
tests/qapi-schema/enum-bad-name.json
Normal file
2
tests/qapi-schema/enum-bad-name.json
Normal file
@ -0,0 +1,2 @@
|
||||
# FIXME: we should ensure all enum names can map to C
|
||||
{ 'enum': 'MyEnum', 'data': [ 'not^possible' ] }
|
3
tests/qapi-schema/enum-bad-name.out
Normal file
3
tests/qapi-schema/enum-bad-name.out
Normal file
@ -0,0 +1,3 @@
|
||||
[OrderedDict([('enum', 'MyEnum'), ('data', ['not^possible'])])]
|
||||
[{'enum_name': 'MyEnum', 'enum_values': ['not^possible']}]
|
||||
[]
|
0
tests/qapi-schema/enum-clash-member.err
Normal file
0
tests/qapi-schema/enum-clash-member.err
Normal file
1
tests/qapi-schema/enum-clash-member.exit
Normal file
1
tests/qapi-schema/enum-clash-member.exit
Normal file
@ -0,0 +1 @@
|
||||
0
|
2
tests/qapi-schema/enum-clash-member.json
Normal file
2
tests/qapi-schema/enum-clash-member.json
Normal file
@ -0,0 +1,2 @@
|
||||
# FIXME: we should reject enums where members will clash when mapped to C enum
|
||||
{ 'enum': 'MyEnum', 'data': [ 'one', 'ONE' ] }
|
3
tests/qapi-schema/enum-clash-member.out
Normal file
3
tests/qapi-schema/enum-clash-member.out
Normal file
@ -0,0 +1,3 @@
|
||||
[OrderedDict([('enum', 'MyEnum'), ('data', ['one', 'ONE'])])]
|
||||
[{'enum_name': 'MyEnum', 'enum_values': ['one', 'ONE']}]
|
||||
[]
|
0
tests/qapi-schema/enum-dict-member.err
Normal file
0
tests/qapi-schema/enum-dict-member.err
Normal file
1
tests/qapi-schema/enum-dict-member.exit
Normal file
1
tests/qapi-schema/enum-dict-member.exit
Normal file
@ -0,0 +1 @@
|
||||
0
|
2
tests/qapi-schema/enum-dict-member.json
Normal file
2
tests/qapi-schema/enum-dict-member.json
Normal file
@ -0,0 +1,2 @@
|
||||
# FIXME: we should reject any enum member that is not a string
|
||||
{ 'enum': 'MyEnum', 'data': [ { 'value': 'str' } ] }
|
3
tests/qapi-schema/enum-dict-member.out
Normal file
3
tests/qapi-schema/enum-dict-member.out
Normal file
@ -0,0 +1,3 @@
|
||||
[OrderedDict([('enum', 'MyEnum'), ('data', [OrderedDict([('value', 'str')])])])]
|
||||
[{'enum_name': 'MyEnum', 'enum_values': [OrderedDict([('value', 'str')])]}]
|
||||
[]
|
0
tests/qapi-schema/enum-empty.err
Normal file
0
tests/qapi-schema/enum-empty.err
Normal file
1
tests/qapi-schema/enum-empty.exit
Normal file
1
tests/qapi-schema/enum-empty.exit
Normal file
@ -0,0 +1 @@
|
||||
0
|
2
tests/qapi-schema/enum-empty.json
Normal file
2
tests/qapi-schema/enum-empty.json
Normal file
@ -0,0 +1,2 @@
|
||||
# An empty enum, although unusual, is currently acceptable
|
||||
{ 'enum': 'MyEnum', 'data': [ ] }
|
3
tests/qapi-schema/enum-empty.out
Normal file
3
tests/qapi-schema/enum-empty.out
Normal file
@ -0,0 +1,3 @@
|
||||
[OrderedDict([('enum', 'MyEnum'), ('data', [])])]
|
||||
[{'enum_name': 'MyEnum', 'enum_values': []}]
|
||||
[]
|
1
tests/qapi-schema/enum-int-member.err
Normal file
1
tests/qapi-schema/enum-int-member.err
Normal file
@ -0,0 +1 @@
|
||||
tests/qapi-schema/enum-int-member.json:3:31: Stray "1"
|
1
tests/qapi-schema/enum-int-member.exit
Normal file
1
tests/qapi-schema/enum-int-member.exit
Normal file
@ -0,0 +1 @@
|
||||
1
|
3
tests/qapi-schema/enum-int-member.json
Normal file
3
tests/qapi-schema/enum-int-member.json
Normal 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 ] }
|
0
tests/qapi-schema/enum-int-member.out
Normal file
0
tests/qapi-schema/enum-int-member.out
Normal file
0
tests/qapi-schema/enum-max-member.err
Normal file
0
tests/qapi-schema/enum-max-member.err
Normal file
1
tests/qapi-schema/enum-max-member.exit
Normal file
1
tests/qapi-schema/enum-max-member.exit
Normal file
@ -0,0 +1 @@
|
||||
0
|
3
tests/qapi-schema/enum-max-member.json
Normal file
3
tests/qapi-schema/enum-max-member.json
Normal 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' ] }
|
3
tests/qapi-schema/enum-max-member.out
Normal file
3
tests/qapi-schema/enum-max-member.out
Normal file
@ -0,0 +1,3 @@
|
||||
[OrderedDict([('enum', 'MyEnum'), ('data', ['max'])])]
|
||||
[{'enum_name': 'MyEnum', 'enum_values': ['max']}]
|
||||
[]
|
6
tests/qapi-schema/enum-missing-data.err
Normal file
6
tests/qapi-schema/enum-missing-data.err
Normal 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'
|
1
tests/qapi-schema/enum-missing-data.exit
Normal file
1
tests/qapi-schema/enum-missing-data.exit
Normal file
@ -0,0 +1 @@
|
||||
1
|
2
tests/qapi-schema/enum-missing-data.json
Normal file
2
tests/qapi-schema/enum-missing-data.json
Normal file
@ -0,0 +1,2 @@
|
||||
# FIXME: we should require that all QAPI enums have a data array
|
||||
{ 'enum': 'MyEnum' }
|
0
tests/qapi-schema/enum-missing-data.out
Normal file
0
tests/qapi-schema/enum-missing-data.out
Normal file
0
tests/qapi-schema/enum-union-clash.err
Normal file
0
tests/qapi-schema/enum-union-clash.err
Normal file
1
tests/qapi-schema/enum-union-clash.exit
Normal file
1
tests/qapi-schema/enum-union-clash.exit
Normal file
@ -0,0 +1 @@
|
||||
0
|
4
tests/qapi-schema/enum-union-clash.json
Normal file
4
tests/qapi-schema/enum-union-clash.json
Normal 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' } }
|
5
tests/qapi-schema/enum-union-clash.out
Normal file
5
tests/qapi-schema/enum-union-clash.out
Normal 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}]
|
||||
[]
|
0
tests/qapi-schema/enum-wrong-data.err
Normal file
0
tests/qapi-schema/enum-wrong-data.err
Normal file
1
tests/qapi-schema/enum-wrong-data.exit
Normal file
1
tests/qapi-schema/enum-wrong-data.exit
Normal file
@ -0,0 +1 @@
|
||||
0
|
2
tests/qapi-schema/enum-wrong-data.json
Normal file
2
tests/qapi-schema/enum-wrong-data.json
Normal file
@ -0,0 +1,2 @@
|
||||
# FIXME: we should require that all qapi enums have an array for data
|
||||
{ 'enum': 'MyEnum', 'data': { 'value': 'str' } }
|
3
tests/qapi-schema/enum-wrong-data.out
Normal file
3
tests/qapi-schema/enum-wrong-data.out
Normal file
@ -0,0 +1,3 @@
|
||||
[OrderedDict([('enum', 'MyEnum'), ('data', OrderedDict([('value', 'str')]))])]
|
||||
[{'enum_name': 'MyEnum', 'enum_values': OrderedDict([('value', 'str')])}]
|
||||
[]
|
Loading…
Reference in New Issue
Block a user