qemu/tests/qapi-schema
John Snow 4918bb7def qapi/expr.py: Check type of union and alternate 'data' member
Prior to this commit, specifying a non-object value here causes the QAPI
parser to crash in expr.py with a stack trace with (likely) an
AttributeError when we attempt to call that value's items() method.

This member needs to be an object (Dict), and not anything else. Add a
check for this with a nicer error message, and formalize that check with
new test cases that exercise that error.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20210421182032.3521476-8-jsnow@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2021-04-30 12:59:54 +02:00
..
include
allow-preconfig-test.err
allow-preconfig-test.json
allow-preconfig-test.out
alternate-any.err
alternate-any.json
alternate-any.out
alternate-array.err
alternate-array.json
alternate-array.out
alternate-base.err
alternate-base.json
alternate-base.out
alternate-branch-if-invalid.err
alternate-branch-if-invalid.json
alternate-branch-if-invalid.out
alternate-clash.err
alternate-clash.json
alternate-clash.out
alternate-conflict-bool-string.err
alternate-conflict-bool-string.json
alternate-conflict-bool-string.out
alternate-conflict-dict.err
alternate-conflict-dict.json
alternate-conflict-dict.out
alternate-conflict-enum-bool.err
alternate-conflict-enum-bool.json
alternate-conflict-enum-bool.out
alternate-conflict-enum-int.err
alternate-conflict-enum-int.json
alternate-conflict-enum-int.out
alternate-conflict-num-string.err
alternate-conflict-num-string.json
alternate-conflict-num-string.out
alternate-conflict-string.err
alternate-conflict-string.json
alternate-conflict-string.out
alternate-data-invalid.err
alternate-data-invalid.json
alternate-data-invalid.out
alternate-empty.err
alternate-empty.json
alternate-empty.out
alternate-invalid-dict.err
alternate-invalid-dict.json
alternate-invalid-dict.out
alternate-nested.err
alternate-nested.json
alternate-nested.out
alternate-unknown.err
alternate-unknown.json
alternate-unknown.out
args-alternate.err
args-alternate.json
args-alternate.out
args-any.err
args-any.json
args-any.out
args-array-empty.err
args-array-empty.json
args-array-empty.out
args-array-unknown.err
args-array-unknown.json
args-array-unknown.out
args-bad-boxed.err
args-bad-boxed.json
args-bad-boxed.out
args-boxed-anon.err
args-boxed-anon.json
args-boxed-anon.out
args-boxed-string.err
args-boxed-string.json
args-boxed-string.out
args-int.err
args-int.json
args-int.out
args-invalid.err
args-invalid.json
args-invalid.out
args-member-array-bad.err
args-member-array-bad.json
args-member-array-bad.out
args-member-case.err
args-member-case.json
args-member-case.out
args-member-unknown.err
args-member-unknown.json
args-member-unknown.out
args-union.err
args-union.json
args-union.out
args-unknown.err
args-unknown.json
args-unknown.out
bad-base.err
bad-base.json
bad-base.out
bad-data.err
bad-data.json
bad-data.out
bad-ident.err
bad-ident.json
bad-ident.out
bad-if-empty-list.err
bad-if-empty-list.json
bad-if-empty-list.out
bad-if-empty.err
bad-if-empty.json
bad-if-empty.out
bad-if-list.err
bad-if-list.json
bad-if-list.out
bad-if.err
bad-if.json
bad-if.out
bad-type-bool.err
bad-type-bool.json
bad-type-bool.out
bad-type-dict.err
bad-type-dict.json
bad-type-dict.out
bad-type-int.err
bad-type-int.json
bad-type-int.out
base-cycle-direct.err
base-cycle-direct.json
base-cycle-direct.out
base-cycle-indirect.err
base-cycle-indirect.json
base-cycle-indirect.out
command-int.err
command-int.json
command-int.out
comments.err
comments.json
comments.out
doc-bad-alternate-member.err
doc-bad-alternate-member.json
doc-bad-alternate-member.out
doc-bad-boxed-command-arg.err
doc-bad-boxed-command-arg.json
doc-bad-boxed-command-arg.out
doc-bad-command-arg.err
doc-bad-command-arg.json
doc-bad-command-arg.out
doc-bad-enum-member.err
doc-bad-enum-member.json
doc-bad-enum-member.out
doc-bad-event-arg.err
doc-bad-event-arg.json
doc-bad-event-arg.out
doc-bad-feature.err
doc-bad-feature.json
doc-bad-feature.out
doc-bad-indent.err
doc-bad-indent.json
doc-bad-indent.out
doc-bad-section.err
doc-bad-section.json
doc-bad-section.out
doc-bad-symbol.err
doc-bad-symbol.json
doc-bad-symbol.out
doc-bad-union-member.err
doc-bad-union-member.json
doc-bad-union-member.out
doc-before-include.err
doc-before-include.json
doc-before-include.out
doc-before-pragma.err
doc-before-pragma.json
doc-before-pragma.out
doc-duplicated-arg.err
doc-duplicated-arg.json
doc-duplicated-arg.out
doc-duplicated-return.err
doc-duplicated-return.json
doc-duplicated-return.out
doc-duplicated-since.err
doc-duplicated-since.json
doc-duplicated-since.out
doc-empty-arg.err
doc-empty-arg.json
doc-empty-arg.out
doc-empty-section.err
doc-empty-section.json
doc-empty-section.out
doc-empty-symbol.err
doc-empty-symbol.json
doc-empty-symbol.out
doc-good.err
doc-good.json
doc-good.out
doc-good.rst
doc-good.txt
doc-interleaved-section.err
doc-interleaved-section.json
doc-interleaved-section.out
doc-invalid-end.err
doc-invalid-end.json
doc-invalid-end.out
doc-invalid-end2.err
doc-invalid-end2.json
doc-invalid-end2.out
doc-invalid-return.err
doc-invalid-return.json
doc-invalid-return.out
doc-invalid-section.err
doc-invalid-section.json
doc-invalid-section.out
doc-invalid-start.err
doc-invalid-start.json
doc-invalid-start.out
doc-missing-colon.err
doc-missing-colon.json
doc-missing-colon.out
doc-missing-expr.err
doc-missing-expr.json
doc-missing-expr.out
doc-missing-space.err
doc-missing-space.json
doc-missing-space.out
doc-missing.err
doc-missing.json
doc-missing.out
doc-no-symbol.err
doc-no-symbol.json
doc-no-symbol.out
doc-undoc-feature.err
doc-undoc-feature.json
doc-undoc-feature.out
double-type.err
double-type.json
double-type.out
duplicate-key.err
duplicate-key.json
duplicate-key.out
empty.err
empty.json
empty.out
enum-bad-member.err
enum-bad-member.json
enum-bad-member.out
enum-bad-name.err
enum-bad-name.json
enum-bad-name.out
enum-bad-prefix.err
enum-bad-prefix.json
enum-bad-prefix.out
enum-clash-member.err
enum-clash-member.json
enum-clash-member.out
enum-dict-member-unknown.err
enum-dict-member-unknown.json
enum-dict-member-unknown.out
enum-if-invalid.err
enum-if-invalid.json
enum-if-invalid.out
enum-int-member.err
enum-int-member.json
enum-int-member.out
enum-member-case.err
enum-member-case.json
enum-member-case.out
enum-missing-data.err
enum-missing-data.json
enum-missing-data.out
enum-wrong-data.err
enum-wrong-data.json
enum-wrong-data.out
escape-outside-string.err
event-boxed-empty.err
event-boxed-empty.json
event-boxed-empty.out
event-case.err
event-case.json
event-case.out
event-member-invalid-dict.err
event-member-invalid-dict.json
event-member-invalid-dict.out
event-nest-struct.err
event-nest-struct.json
event-nest-struct.out
features-bad-type.err
features-bad-type.json
features-bad-type.out
features-deprecated-type.err
features-deprecated-type.json
features-deprecated-type.out
features-duplicate-name.err
features-duplicate-name.json
features-duplicate-name.out
features-if-invalid.err
features-if-invalid.json
features-if-invalid.out
features-missing-name.err
features-missing-name.json
features-missing-name.out
features-name-bad-type.err
features-name-bad-type.json
features-name-bad-type.out
features-no-list.err
features-no-list.json
features-no-list.out
features-unknown-key.err
features-unknown-key.json
features-unknown-key.out
flat-union-array-branch.err
flat-union-array-branch.json
flat-union-array-branch.out
flat-union-bad-base.err
flat-union-bad-base.json
flat-union-bad-base.out
flat-union-bad-discriminator.err
flat-union-bad-discriminator.json
flat-union-bad-discriminator.out
flat-union-base-any.err
flat-union-base-any.json
flat-union-base-any.out
flat-union-base-union.err
flat-union-base-union.json
flat-union-base-union.out
flat-union-clash-member.err
flat-union-clash-member.json
flat-union-clash-member.out
flat-union-discriminator-bad-name.err
flat-union-discriminator-bad-name.json
flat-union-discriminator-bad-name.out
flat-union-empty.err
flat-union-empty.json
flat-union-empty.out
flat-union-inline-invalid-dict.err
flat-union-inline-invalid-dict.json
flat-union-inline-invalid-dict.out
flat-union-int-branch.err
flat-union-int-branch.json
flat-union-int-branch.out
flat-union-invalid-branch-key.err
flat-union-invalid-branch-key.json
flat-union-invalid-branch-key.out
flat-union-invalid-discriminator.err
flat-union-invalid-discriminator.json
flat-union-invalid-discriminator.out
flat-union-invalid-if-discriminator.err
flat-union-invalid-if-discriminator.json
flat-union-invalid-if-discriminator.out
flat-union-no-base.err
flat-union-no-base.json
flat-union-no-base.out
flat-union-optional-discriminator.err
flat-union-optional-discriminator.json
flat-union-optional-discriminator.out
flat-union-string-discriminator.err
flat-union-string-discriminator.json
flat-union-string-discriminator.out
funny-char.err
funny-char.json
funny-char.out
funny-word.err
funny-word.json
funny-word.out
ident-with-escape.err
ident-with-escape.json
ident-with-escape.out
include-before-err.err
include-before-err.json
include-before-err.out
include-cycle-b.json
include-cycle-c.json
include-cycle.err
include-cycle.json
include-cycle.out
include-extra-junk.err
include-extra-junk.json
include-extra-junk.out
include-nested-err.err
include-nested-err.json
include-nested-err.out
include-no-file.err
include-no-file.json
include-no-file.out
include-non-file.err
include-non-file.json
include-non-file.out
include-repetition-sub.json
include-repetition.err
include-repetition.json
include-repetition.out
include-self-cycle.err
include-self-cycle.json
include-self-cycle.out
include-simple-sub.json
include-simple.err
include-simple.json
include-simple.out
indented-expr.err
indented-expr.json
indented-expr.out
leading-comma-list.err
leading-comma-list.json
leading-comma-list.out
leading-comma-object.err
leading-comma-object.json
leading-comma-object.out
meson.build
missing-colon.err
missing-colon.json
missing-colon.out
missing-comma-list.err
missing-comma-list.json
missing-comma-list.out
missing-comma-object.err
missing-comma-object.json
missing-comma-object.out
missing-type.err
missing-type.json
missing-type.out
nested-struct-data-invalid-dict.err
nested-struct-data-invalid-dict.json
nested-struct-data-invalid-dict.out
nested-struct-data.err
nested-struct-data.json
nested-struct-data.out
non-objects.err
non-objects.json
non-objects.out
oob-coroutine.err
oob-coroutine.json
oob-coroutine.out
oob-test.err
oob-test.json
oob-test.out
pragma-extra-junk.err
pragma-extra-junk.json
pragma-extra-junk.out
pragma-non-dict.err
pragma-non-dict.json
pragma-non-dict.out
pragma-unknown.err
pragma-unknown.json
pragma-unknown.out
pragma-value-not-bool.err
pragma-value-not-bool.json
pragma-value-not-bool.out
pragma-value-not-list-of-str.err
pragma-value-not-list-of-str.json
pragma-value-not-list-of-str.out
pragma-value-not-list.err
pragma-value-not-list.json
pragma-value-not-list.out
qapi-schema-test.err
qapi-schema-test.json
qapi-schema-test.out
quoted-structural-chars.err
quoted-structural-chars.json
quoted-structural-chars.out
redefined-command.err
redefined-command.json
redefined-command.out
redefined-event.err
redefined-event.json
redefined-event.out
redefined-predefined.err
redefined-predefined.json
redefined-predefined.out
redefined-type.err
redefined-type.json
redefined-type.out
reserved-command-q.err
reserved-command-q.json
reserved-command-q.out
reserved-enum-q.err
reserved-enum-q.json
reserved-enum-q.out
reserved-member-has.err
reserved-member-has.json
reserved-member-has.out
reserved-member-q.err
reserved-member-q.json
reserved-member-q.out
reserved-member-u.err
reserved-member-u.json
reserved-member-u.out
reserved-member-underscore.err
reserved-member-underscore.json
reserved-member-underscore.out
reserved-type-kind.err
reserved-type-kind.json
reserved-type-kind.out
reserved-type-list.err
reserved-type-list.json
reserved-type-list.out
returns-alternate.err
returns-alternate.json
returns-alternate.out
returns-array-bad.err
returns-array-bad.json
returns-array-bad.out
returns-bad-type.err
returns-bad-type.json
returns-bad-type.out
returns-dict.err
returns-dict.json
returns-dict.out
returns-unknown.err
returns-unknown.json
returns-unknown.out
string-code-point-31.err
string-code-point-31.json
string-code-point-31.out
string-code-point-127.err
string-code-point-127.json
string-code-point-127.out
struct-base-clash-deep.err
struct-base-clash-deep.json
struct-base-clash-deep.out
struct-base-clash.err
struct-base-clash.json
struct-base-clash.out
struct-data-invalid.err
struct-data-invalid.json
struct-data-invalid.out
struct-member-if-invalid.err
struct-member-if-invalid.json
struct-member-if-invalid.out
struct-member-invalid-dict.err
struct-member-invalid-dict.json
struct-member-invalid-dict.out
struct-member-invalid.err
struct-member-invalid.json
struct-member-invalid.out
struct-member-name-clash.err
struct-member-name-clash.json
struct-member-name-clash.out
sub-sub-module.json
test-qapi.py
trailing-comma-list.err
trailing-comma-list.json
trailing-comma-list.out
trailing-comma-object.err
trailing-comma-object.json
trailing-comma-object.out
type-bypass-bad-gen.err
type-bypass-bad-gen.json
type-bypass-bad-gen.out
type-case.err
type-case.json
type-case.out
unclosed-list.err
unclosed-list.json
unclosed-list.out
unclosed-object.err
unclosed-object.json
unclosed-object.out
unclosed-string.err
unclosed-string.json
unclosed-string.out
union-base-empty.err
union-base-empty.json
union-base-empty.out
union-base-no-discriminator.err
union-base-no-discriminator.json
union-base-no-discriminator.out
union-branch-case.err
union-branch-case.json
union-branch-case.out
union-branch-if-invalid.err
union-branch-if-invalid.json
union-branch-if-invalid.out
union-branch-invalid-dict.err
union-branch-invalid-dict.json
union-branch-invalid-dict.out
union-clash-branches.err
union-clash-branches.json
union-clash-branches.out
union-empty.err
union-empty.json
union-empty.out
union-invalid-base.err
union-invalid-base.json
union-invalid-base.out
union-invalid-data.err
union-invalid-data.json
union-invalid-data.out
union-optional-branch.err
union-optional-branch.json
union-optional-branch.out
union-unknown.err
union-unknown.json
union-unknown.out
unknown-escape.err
unknown-escape.json
unknown-escape.out
unknown-expr-key.err
unknown-expr-key.json
unknown-expr-key.out