Demonstrate that the qapi generator doesn't deal well with expressions that aren't up to par. Later patches will improve the expected results as the generator is made stricter. Only one of the added tests actually behaves sanely at rejecting obvious problems.
Note that in some cases, we reject bad QAPI merely because our pseudo-JSON parser does not yet know how to parse numbers. This series does not address that, but when a later series adds support for numeric defaults of integer fields, the testsuite will ensure that we don't lose the error (and hopefully that the error message quality is improved). Signed-off-by: Eric Blake <ebl...@redhat.com> --- tests/Makefile | 4 +++- tests/qapi-schema/bad-type-dict.err | 0 tests/qapi-schema/bad-type-dict.exit | 1 + tests/qapi-schema/bad-type-dict.json | 2 ++ tests/qapi-schema/bad-type-dict.out | 3 +++ tests/qapi-schema/bad-type-int.err | 1 + tests/qapi-schema/bad-type-int.exit | 1 + tests/qapi-schema/bad-type-int.json | 3 +++ tests/qapi-schema/bad-type-int.out | 0 tests/qapi-schema/double-data.err | 1 + tests/qapi-schema/double-data.exit | 1 + tests/qapi-schema/double-data.json | 2 ++ tests/qapi-schema/double-data.out | 0 tests/qapi-schema/double-type.err | 0 tests/qapi-schema/double-type.exit | 1 + tests/qapi-schema/double-type.json | 2 ++ tests/qapi-schema/double-type.out | 3 +++ tests/qapi-schema/missing-type.err | 0 tests/qapi-schema/missing-type.exit | 1 + tests/qapi-schema/missing-type.json | 2 ++ tests/qapi-schema/missing-type.out | 3 +++ tests/qapi-schema/unknown-expr-key.err | 0 tests/qapi-schema/unknown-expr-key.exit | 1 + tests/qapi-schema/unknown-expr-key.json | 2 ++ tests/qapi-schema/unknown-expr-key.out | 3 +++ 25 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/qapi-schema/bad-type-dict.err create mode 100644 tests/qapi-schema/bad-type-dict.exit create mode 100644 tests/qapi-schema/bad-type-dict.json create mode 100644 tests/qapi-schema/bad-type-dict.out create mode 100644 tests/qapi-schema/bad-type-int.err create mode 100644 tests/qapi-schema/bad-type-int.exit create mode 100644 tests/qapi-schema/bad-type-int.json create mode 100644 tests/qapi-schema/bad-type-int.out create mode 100644 tests/qapi-schema/double-data.err create mode 100644 tests/qapi-schema/double-data.exit create mode 100644 tests/qapi-schema/double-data.json create mode 100644 tests/qapi-schema/double-data.out create mode 100644 tests/qapi-schema/double-type.err create mode 100644 tests/qapi-schema/double-type.exit create mode 100644 tests/qapi-schema/double-type.json create mode 100644 tests/qapi-schema/double-type.out create mode 100644 tests/qapi-schema/missing-type.err create mode 100644 tests/qapi-schema/missing-type.exit create mode 100644 tests/qapi-schema/missing-type.json create mode 100644 tests/qapi-schema/missing-type.out create mode 100644 tests/qapi-schema/unknown-expr-key.err create mode 100644 tests/qapi-schema/unknown-expr-key.exit create mode 100644 tests/qapi-schema/unknown-expr-key.json create mode 100644 tests/qapi-schema/unknown-expr-key.out diff --git a/tests/Makefile b/tests/Makefile index 6a4e5a6..753f7bd 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -198,7 +198,9 @@ check-qapi-schema-y := $(addprefix tests/qapi-schema/, \ 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 \ - funny-char.json indented-expr.json \ + funny-char.json indented-expr.json missing-type.json \ + double-type.json bad-type-int.json bad-type-dict.json \ + double-data.json unknown-expr-key.json \ missing-colon.json missing-comma-list.json \ missing-comma-object.json non-objects.json \ qapi-schema-test.json quoted-structural-chars.json \ diff --git a/tests/qapi-schema/bad-type-dict.err b/tests/qapi-schema/bad-type-dict.err new file mode 100644 index 0000000..e69de29 diff --git a/tests/qapi-schema/bad-type-dict.exit b/tests/qapi-schema/bad-type-dict.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/qapi-schema/bad-type-dict.exit @@ -0,0 +1 @@ +0 diff --git a/tests/qapi-schema/bad-type-dict.json b/tests/qapi-schema/bad-type-dict.json new file mode 100644 index 0000000..3c392a7 --- /dev/null +++ b/tests/qapi-schema/bad-type-dict.json @@ -0,0 +1,2 @@ +# FIXME: we should reject an expression with a metatype that is not a string +{ 'command': { } } diff --git a/tests/qapi-schema/bad-type-dict.out b/tests/qapi-schema/bad-type-dict.out new file mode 100644 index 0000000..c62f1ed --- /dev/null +++ b/tests/qapi-schema/bad-type-dict.out @@ -0,0 +1,3 @@ +[OrderedDict([('command', OrderedDict())])] +[] +[] diff --git a/tests/qapi-schema/bad-type-int.err b/tests/qapi-schema/bad-type-int.err new file mode 100644 index 0000000..9808550 --- /dev/null +++ b/tests/qapi-schema/bad-type-int.err @@ -0,0 +1 @@ +tests/qapi-schema/bad-type-int.json:3:11: Stray "1" diff --git a/tests/qapi-schema/bad-type-int.exit b/tests/qapi-schema/bad-type-int.exit new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/qapi-schema/bad-type-int.exit @@ -0,0 +1 @@ +1 diff --git a/tests/qapi-schema/bad-type-int.json b/tests/qapi-schema/bad-type-int.json new file mode 100644 index 0000000..398879d --- /dev/null +++ b/tests/qapi-schema/bad-type-int.json @@ -0,0 +1,3 @@ +# we reject an expression with a metatype that is not a string +# FIXME: once the parser understands integer inputs, improve the error message +{ 'type': 1, 'data': { } } diff --git a/tests/qapi-schema/bad-type-int.out b/tests/qapi-schema/bad-type-int.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/qapi-schema/double-data.err b/tests/qapi-schema/double-data.err new file mode 100644 index 0000000..6f1a67b --- /dev/null +++ b/tests/qapi-schema/double-data.err @@ -0,0 +1 @@ +tests/qapi-schema/double-data.json:2:39: Duplicate key "data" diff --git a/tests/qapi-schema/double-data.exit b/tests/qapi-schema/double-data.exit new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/tests/qapi-schema/double-data.exit @@ -0,0 +1 @@ +1 diff --git a/tests/qapi-schema/double-data.json b/tests/qapi-schema/double-data.json new file mode 100644 index 0000000..a94b7df --- /dev/null +++ b/tests/qapi-schema/double-data.json @@ -0,0 +1,2 @@ +# we reject an expression with duplicate top-level keys +{ 'type': 'bar', 'data': { }, 'data': { 'string': 'str'} } diff --git a/tests/qapi-schema/double-data.out b/tests/qapi-schema/double-data.out new file mode 100644 index 0000000..e69de29 diff --git a/tests/qapi-schema/double-type.err b/tests/qapi-schema/double-type.err new file mode 100644 index 0000000..e69de29 diff --git a/tests/qapi-schema/double-type.exit b/tests/qapi-schema/double-type.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/qapi-schema/double-type.exit @@ -0,0 +1 @@ +0 diff --git a/tests/qapi-schema/double-type.json b/tests/qapi-schema/double-type.json new file mode 100644 index 0000000..6ca96b9 --- /dev/null +++ b/tests/qapi-schema/double-type.json @@ -0,0 +1,2 @@ +# FIXME: we should reject an expression with ambiguous metatype +{ 'command': 'foo', 'type': 'bar', 'data': { } } diff --git a/tests/qapi-schema/double-type.out b/tests/qapi-schema/double-type.out new file mode 100644 index 0000000..3e244f5 --- /dev/null +++ b/tests/qapi-schema/double-type.out @@ -0,0 +1,3 @@ +[OrderedDict([('command', 'foo'), ('type', 'bar'), ('data', OrderedDict())])] +[] +[OrderedDict([('command', 'foo'), ('type', 'bar'), ('data', OrderedDict())])] diff --git a/tests/qapi-schema/missing-type.err b/tests/qapi-schema/missing-type.err new file mode 100644 index 0000000..e69de29 diff --git a/tests/qapi-schema/missing-type.exit b/tests/qapi-schema/missing-type.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/qapi-schema/missing-type.exit @@ -0,0 +1 @@ +0 diff --git a/tests/qapi-schema/missing-type.json b/tests/qapi-schema/missing-type.json new file mode 100644 index 0000000..1696f5c --- /dev/null +++ b/tests/qapi-schema/missing-type.json @@ -0,0 +1,2 @@ +# FIXME: we should reject an expression with missing metatype +{ 'data': { } } diff --git a/tests/qapi-schema/missing-type.out b/tests/qapi-schema/missing-type.out new file mode 100644 index 0000000..67fd4fa --- /dev/null +++ b/tests/qapi-schema/missing-type.out @@ -0,0 +1,3 @@ +[OrderedDict([('data', OrderedDict())])] +[] +[] diff --git a/tests/qapi-schema/unknown-expr-key.err b/tests/qapi-schema/unknown-expr-key.err new file mode 100644 index 0000000..e69de29 diff --git a/tests/qapi-schema/unknown-expr-key.exit b/tests/qapi-schema/unknown-expr-key.exit new file mode 100644 index 0000000..573541a --- /dev/null +++ b/tests/qapi-schema/unknown-expr-key.exit @@ -0,0 +1 @@ +0 diff --git a/tests/qapi-schema/unknown-expr-key.json b/tests/qapi-schema/unknown-expr-key.json new file mode 100644 index 0000000..1e9282d --- /dev/null +++ b/tests/qapi-schema/unknown-expr-key.json @@ -0,0 +1,2 @@ +# FIXME: we should reject an expression with unknown top-level keys +{ 'type': 'bar', 'data': { 'string': 'str'}, 'bogus': { } } diff --git a/tests/qapi-schema/unknown-expr-key.out b/tests/qapi-schema/unknown-expr-key.out new file mode 100644 index 0000000..c93f020 --- /dev/null +++ b/tests/qapi-schema/unknown-expr-key.out @@ -0,0 +1,3 @@ +[OrderedDict([('type', 'bar'), ('data', OrderedDict([('string', 'str')])), ('bogus', OrderedDict())])] +[] +[OrderedDict([('type', 'bar'), ('data', OrderedDict([('string', 'str')])), ('bogus', OrderedDict())])] -- 1.9.3