Skip to content

Commit

Permalink
qapi: Add some enum tests
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
ebblake authored and Markus Armbruster committed May 5, 2015
1 parent fe2a930 commit ad11dbb
Show file tree
Hide file tree
Showing 37 changed files with 66 additions and 1 deletion.
6 changes: 5 additions & 1 deletion tests/Makefile
Expand Up @@ -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 \
Expand Down
Empty file.
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-bad-name.exit
@@ -0,0 +1 @@
0
2 changes: 2 additions & 0 deletions tests/qapi-schema/enum-bad-name.json
@@ -0,0 +1,2 @@
# FIXME: we should ensure all enum names can map to C
{ 'enum': 'MyEnum', 'data': [ 'not^possible' ] }
3 changes: 3 additions & 0 deletions tests/qapi-schema/enum-bad-name.out
@@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', ['not^possible'])])]
[{'enum_name': 'MyEnum', 'enum_values': ['not^possible']}]
[]
Empty file.
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-clash-member.exit
@@ -0,0 +1 @@
0
2 changes: 2 additions & 0 deletions tests/qapi-schema/enum-clash-member.json
@@ -0,0 +1,2 @@
# FIXME: we should reject enums where members will clash when mapped to C enum
{ 'enum': 'MyEnum', 'data': [ 'one', 'ONE' ] }
3 changes: 3 additions & 0 deletions tests/qapi-schema/enum-clash-member.out
@@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', ['one', 'ONE'])])]
[{'enum_name': 'MyEnum', 'enum_values': ['one', 'ONE']}]
[]
Empty file.
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-dict-member.exit
@@ -0,0 +1 @@
0
2 changes: 2 additions & 0 deletions tests/qapi-schema/enum-dict-member.json
@@ -0,0 +1,2 @@
# FIXME: we should reject any enum member that is not a string
{ 'enum': 'MyEnum', 'data': [ { 'value': 'str' } ] }
3 changes: 3 additions & 0 deletions tests/qapi-schema/enum-dict-member.out
@@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', [OrderedDict([('value', 'str')])])])]
[{'enum_name': 'MyEnum', 'enum_values': [OrderedDict([('value', 'str')])]}]
[]
Empty file.
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-empty.exit
@@ -0,0 +1 @@
0
2 changes: 2 additions & 0 deletions tests/qapi-schema/enum-empty.json
@@ -0,0 +1,2 @@
# An empty enum, although unusual, is currently acceptable
{ 'enum': 'MyEnum', 'data': [ ] }
3 changes: 3 additions & 0 deletions tests/qapi-schema/enum-empty.out
@@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', [])])]
[{'enum_name': 'MyEnum', 'enum_values': []}]
[]
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-int-member.err
@@ -0,0 +1 @@
tests/qapi-schema/enum-int-member.json:3:31: Stray "1"
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-int-member.exit
@@ -0,0 +1 @@
1
3 changes: 3 additions & 0 deletions tests/qapi-schema/enum-int-member.json
@@ -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 ] }
Empty file.
Empty file.
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-max-member.exit
@@ -0,0 +1 @@
0
3 changes: 3 additions & 0 deletions tests/qapi-schema/enum-max-member.json
@@ -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 changes: 3 additions & 0 deletions tests/qapi-schema/enum-max-member.out
@@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', ['max'])])]
[{'enum_name': 'MyEnum', 'enum_values': ['max']}]
[]
6 changes: 6 additions & 0 deletions tests/qapi-schema/enum-missing-data.err
@@ -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 change: 1 addition & 0 deletions tests/qapi-schema/enum-missing-data.exit
@@ -0,0 +1 @@
1
2 changes: 2 additions & 0 deletions tests/qapi-schema/enum-missing-data.json
@@ -0,0 +1,2 @@
# FIXME: we should require that all QAPI enums have a data array
{ 'enum': 'MyEnum' }
Empty file.
Empty file.
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-union-clash.exit
@@ -0,0 +1 @@
0
4 changes: 4 additions & 0 deletions tests/qapi-schema/enum-union-clash.json
@@ -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 changes: 5 additions & 0 deletions tests/qapi-schema/enum-union-clash.out
@@ -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}]
[]
Empty file.
1 change: 1 addition & 0 deletions tests/qapi-schema/enum-wrong-data.exit
@@ -0,0 +1 @@
0
2 changes: 2 additions & 0 deletions tests/qapi-schema/enum-wrong-data.json
@@ -0,0 +1,2 @@
# FIXME: we should require that all qapi enums have an array for data
{ 'enum': 'MyEnum', 'data': { 'value': 'str' } }
3 changes: 3 additions & 0 deletions tests/qapi-schema/enum-wrong-data.out
@@ -0,0 +1,3 @@
[OrderedDict([('enum', 'MyEnum'), ('data', OrderedDict([('value', 'str')]))])]
[{'enum_name': 'MyEnum', 'enum_values': OrderedDict([('value', 'str')])}]
[]

0 comments on commit ad11dbb

Please sign in to comment.